Condividi tramite


Distribuire un cluster di Azure Service Fabric con tipi di nodo esclusivamente senza stato

I tipi di nodo di Service Fabric sono costituiti da presupposti intrinseci che, in un determinato momento, i servizi con stato potrebbero essere posizionati nei nodi. I tipi di nodo senza stato modificano questo presupposto per un tipo di nodo, consentendo così al tipo di nodo di usare altre funzionalità, ad esempio operazioni di scalabilità orizzontale più veloci, supporto per gli aggiornamenti automatici del sistema operativo in bronzo durabilità e scalabilità orizzontale a più di 100 nodi in un singolo set di scalabilità di macchine virtuali.

  • I tipi di nodo primari non possono essere configurati per essere senza stato
  • I tipi di nodo senza stato sono supportati solo con i livelli di durabilità Bronze
  • I tipi di nodo senza stato sono supportati solo in Service Fabric Runtime versione 7.1.409 o successiva.

Sono disponibili modelli di esempio: modello Tipi di nodo senza stato di Service Fabric

Abilitazione dei tipi di nodo senza stato nel cluster di Service Fabric

Per impostare uno o più tipi di nodo come senza stato in una risorsa cluster, impostare la proprietà isStateless su true. Quando si distribuisce un cluster di Service Fabric con tipi di nodo senza stato, ricordarsi di avere almeno un tipo di nodo primario nella risorsa cluster.

  • L'api della risorsa cluster di Service FabricVersion deve essere "2020-12-01-preview" o versione successiva.
{
    "nodeTypes": [
    {
        "name": "[parameters('vmNodeType0Name')]",
        "applicationPorts": {
            "endPort": "[parameters('nt0applicationEndPort')]",
            "startPort": "[parameters('nt0applicationStartPort')]"
        },
        "clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]",
        "durabilityLevel": "Silver",
        "ephemeralPorts": {
            "endPort": "[parameters('nt0ephemeralEndPort')]",
            "startPort": "[parameters('nt0ephemeralStartPort')]"
        },
        "httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]",
        "isPrimary": true,
        "isStateless": false, // Primary Node Types cannot be stateless
        "vmInstanceCount": "[parameters('nt0InstanceCount')]"
    },
    {
        "name": "[parameters('vmNodeType1Name')]",
        "applicationPorts": {
            "endPort": "[parameters('nt1applicationEndPort')]",
            "startPort": "[parameters('nt1applicationStartPort')]"
        },
        "clientConnectionEndpointPort": "[parameters('nt1fabricTcpGatewayPort')]",
        "durabilityLevel": "Bronze",
        "ephemeralPorts": {
            "endPort": "[parameters('nt1ephemeralEndPort')]",
            "startPort": "[parameters('nt1ephemeralStartPort')]"
        },
        "httpGatewayEndpointPort": "[parameters('nt1fabricHttpGatewayPort')]",
        "isPrimary": false,
        "isStateless": true,
        "vmInstanceCount": "[parameters('nt1InstanceCount')]"
    }    
    ],
}

Configurazione del set di scalabilità di macchine virtuali per i tipi di nodo senza stato

Per abilitare i tipi di nodo senza stato, è necessario configurare la risorsa del set di scalabilità di macchine virtuali sottostante nel modo seguente:

  • La proprietà singlePlacementGroup del valore, che deve essere impostata su false se è necessario ridimensionare fino a più di 100 macchine virtuali.
  • upgradePolicy del Set di scalabilità deve essere impostato su In sequenza.
  • Per la modalità di aggiornamento in sequenza è necessario configurare l'estensione integrità dell'applicazione o i probe di integrità. Per altre informazioni sulla configurazione dei probe di integrità o sull'estensione dell'integrità dell'applicazione, vedere questo documento. Configurare il probe di integrità con la configurazione predefinita per i tipi di nodo senza stato come suggerito di seguito. Dopo aver distribuito le applicazioni nel tipo di nodo, è possibile modificare le porte dell'estensione Probe di integrità/Integrità per monitorare l'integrità effettiva dell'applicazione.

Nota

Durante l'uso della scalabilità automatica con tipi di nodo senza stato, dopo l'operazione di riduzione delle prestazioni, lo stato del nodo non viene pulito automaticamente. Per pulire lo stato dei nodi inattivo durante la scalabilità automatica, è consigliabile usare l’Helper di scalabilità automatica di Service Fabric.

{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.Compute/virtualMachineScaleSets",
    "name": "[parameters('vmNodeType1Name')]",
    "location": "[parameters('computeLocation')]",
    "properties": {
        "overprovision": "[variables('overProvision')]",
        "upgradePolicy": {
          "mode": "Rolling",
          "automaticOSUpgradePolicy": {
            "enableAutomaticOSUpgrade": true
          }
        },
        "platformFaultDomainCount": 5
    },
    "virtualMachineProfile": {
    "extensionProfile": {
    "extensions": [
    {
    "name": "[concat(parameters('vmNodeType1Name'),'_ServiceFabricNode')]",
    "properties": {
        "type": "ServiceFabricNode",
        "autoUpgradeMinorVersion": false,
        "publisher": "Microsoft.Azure.ServiceFabric",
        "settings": {
            "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
            "nodeTypeRef": "[parameters('vmNodeType1Name')]",
            "dataPath": "D:\\\\SvcFab",
            "durabilityLevel": "Bronze",
            "certificate": {
                "thumbprint": "[parameters('certificateThumbprint')]",
                "x509StoreName": "[parameters('certificateStoreValue')]"
            },
            "systemLogUploadSettings": {
                "Enabled": true
            },
        },
        "typeHandlerVersion": "1.1"
    }
    },
    {
        "type": "extensions",
        "name": "HealthExtension",
        "properties": {
            "publisher": "Microsoft.ManagedServices",
            "type": "ApplicationHealthWindows",
            "autoUpgradeMinorVersion": true,
            "typeHandlerVersion": "1.0",
            "settings": {
            "protocol": "tcp",
            "port": "19000"
            }
            }
        },
    ]
}

Configurazione dei tipi di nodo senza stato con più zone di disponibilità

Per configurare il tipo di nodo senza stato che si estende su più zone di disponibilità, seguire la documentazione qui, insieme alle poche modifiche seguenti:

  • Impostare singlePlacementGroup: false se è necessario abilitare più gruppi di posizionamento.
  • Impostare upgradePolicy: In sequenza e aggiungere probe di integrità/estensione dell'integrità dell'applicazione, come indicato in precedenza.
  • Impostare platformFaultDomainCount: 5 per il set di scalabilità di macchine virtuali.

Per riferimento, vedere il modello per la configurazione dei tipi di nodo senza stato con più zone di disponibilità

Requisiti di rete

Ip pubblico e risorsa di Bilanciamento del carico

Per abilitare il ridimensionamento a più di 100 macchine virtuali in una risorsa del set di scalabilità di macchine virtuali, il servizio di bilanciamento del carico e la risorsa IP a cui fa riferimento il set di scalabilità di macchine virtuali devono entrambi usare uno SKU Standard. La creazione di un servizio di bilanciamento del carico o una risorsa IP senza la proprietà SKU creerà uno SKU Basic, che non supporta il ridimensionamento a più di 100 macchine virtuali. Un servizio di bilanciamento del carico dello SKU Standard bloccherà tutto il traffico dall'esterno per impostazione predefinita; per consentire il traffico esterno, è necessario distribuire un gruppo di sicurezza di rete nella subnet.

{
    "apiVersion": "2018-11-01",
    "type": "Microsoft.Network/publicIPAddresses",
    "name": "[concat('LB','-', parameters('clusterName')]",
    "location": "[parameters('computeLocation')]",
    "sku": {
        "name": "Standard"
    }
}
{
    "apiVersion": "2018-11-01",
    "type": "Microsoft.Network/loadBalancers",
    "name": "[concat('LB','-', parameters('clusterName')]", 
    "location": "[parameters('computeLocation')]",
    "dependsOn": [
        "[concat('Microsoft.Network/networkSecurityGroups/', concat('nsg', parameters('subnet0Name')))]"
    ],
    "properties": {
        "addressSpace": {
            "addressPrefixes": [
                "[parameters('addressPrefix')]"
            ]
        },
        "subnets": [
        {
            "name": "[parameters('subnet0Name')]",
            "properties": {
                "addressPrefix": "[parameters('subnet0Prefix')]",
                "networkSecurityGroup": {
                "id": "[resourceId('Microsoft.Network/networkSecurityGroups', concat('nsg', parameters('subnet0Name')))]"
              }
            }
          }
        ]
    },
    "sku": {
        "name": "Standard"
    }
}

Nota

Non è possibile eseguire una modifica sul posto dello SKU sull'INDIRIZZO IP pubblico e sulle risorse del servizio di bilanciamento del carico.

Regole NAT del set di scalabilità di macchine virtuali

Le regole NAT in ingresso del servizio di bilanciamento del carico devono corrispondere ai pool NAT del set di scalabilità di macchine virtuali. Ogni set di scalabilità di macchine virtuali deve avere un pool NAT in ingresso univoco.

{
"inboundNatPools": [
    {
        "name": "LoadBalancerBEAddressNatPool0",
        "properties": {
            "backendPort": "3389",
            "frontendIPConfiguration": {
                "id": "[variables('lbIPConfig0')]"
            },
            "frontendPortRangeEnd": "50999",
            "frontendPortRangeStart": "50000",
            "protocol": "tcp"
        }
    },
    {
        "name": "LoadBalancerBEAddressNatPool1",
        "properties": {
            "backendPort": "3389",
            "frontendIPConfiguration": {
                "id": "[variables('lbIPConfig0')]"
            },
            "frontendPortRangeEnd": "51999",
            "frontendPortRangeStart": "51000",
            "protocol": "tcp"
        }
    },
    {
        "name": "LoadBalancerBEAddressNatPool2",
        "properties": {
            "backendPort": "3389",
            "frontendIPConfiguration": {
                "id": "[variables('lbIPConfig0')]"
            },
            "frontendPortRangeEnd": "52999",
            "frontendPortRangeStart": "52000",
            "protocol": "tcp"
        }
    }
    ]
}

Regole in uscita dello SKU Load Balancer Standard

Load Balancer Standard e l'indirizzo IP pubblico standard introducono nuove funzionalità e comportamenti differenti per la connettività in uscita rispetto all’uso di SKU di base. Per disporre di connettività in uscita quando si utilizzano SKU standard, è necessario definire questa opzione sia per gli indirizzi IP pubblici standard sia per un'istanza di Load Balancer Standard pubblica. Per altre informazioni, vedere Connessioni in uscita e Azure Load Balancer Standard.

Nota

Il modello standard fa riferimento a un gruppo di sicurezza di rete che consente tutto il traffico in uscita per impostazione predefinita. Il traffico in ingresso è limitato alle porte necessarie per le operazioni di gestione di Service Fabric. Le regole del gruppo di sicurezza di rete possono essere modificate per soddisfare i requisiti.

Nota

Qualsiasi cluster di Service Fabric che usa uno SKU Standard deve garantire che ogni tipo di nodo disponga di una regola che consenta il traffico in uscita sulla porta 443. Questa operazione è necessaria per completare la configurazione del cluster e qualsiasi distribuzione senza tale regola avrà esito negativo.

Eseguire la migrazione all'uso dei tipi di nodo senza stato in un cluster

Per tutti gli scenari di migrazione, è necessario aggiungere un nuovo tipo di nodo solo senza stato. Non è possibile eseguire la migrazione del tipo di nodo esistente in modo che sia solo senza stato.

Per eseguire la migrazione di un cluster, che usa un servizio di bilanciamento del carico e un indirizzo IP con uno SKU di base, è prima necessario creare un'istanza completamente nuova di Load Balancer e una risorsa IP usando lo SKU standard. Non è possibile aggiornare queste risorse sul posto.

È necessario fare riferimento al nuovo LB e IP nei nuovi tipi di nodo senza stato da usare. Nell'esempio precedente viene aggiunta una nuova risorsa del set di scalabilità di macchine virtuali da usare per i tipi di nodo senza stato. Questi set di scalabilità di macchine virtuali fanno riferimento a LB e IP appena creati e sono contrassegnati come tipi di nodo senza stato nella risorsa cluster di Service Fabric.

Per iniziare, sarà necessario aggiungere le nuove risorse al modello di Resource Manager esistente. Tali risorse includono:

  • Risorsa IP pubblico con SKU Standard.
  • Risorsa di Load Balancer con SKU Standard.
  • Un gruppo di sicurezza di rete a cui fa riferimento la subnet in cui si distribuiscono i set di scalabilità di macchine virtuali.

Al termine della distribuzione delle risorse, è possibile iniziare a disabilitare i nodi nel tipo di nodo da rimuovere dal cluster originale.

Passaggi successivi