Dela via


Distribuera ett Azure Service Fabric-kluster med tillståndslösa nodtyper

Service Fabric-nodtyperna förutsätter att tillståndskänsliga tjänster någon gång kan placeras på noderna. Tillståndslösa nodtyper ändrar det här antagandet för en nodtyp, vilket gör att nodtypen kan använda andra funktioner, till exempel snabbare skalningsåtgärder, stöd för automatiska OS-uppgraderingar med bronshållbarhet och utskalning till fler än 100 noder i en enda VM-skalningsuppsättning.

  • Det går inte att konfigurera primära nodtyper så att de är tillståndslösa
  • Tillståndslösa nodtyper stöds endast med bronshållbarhetsnivåer
  • Tillståndslösa nodtyper stöds bara i Service Fabric Runtime version 7.1.409 eller senare.

Exempelmallar är tillgängliga: Mall för tillståndslösa nodtyper i Service Fabric

Aktivera tillståndslösa nodtyper i Service Fabric-kluster

Om du vill ange en eller flera nodtyper som tillståndslösa i en klusterresurs anger du egenskapen isStateless till true. När du distribuerar ett Service Fabric-kluster med tillståndslösa nodtyper ska du komma ihåg att minst ha en primär nodtyp i klusterresursen.

  • ApiVersion för Service Fabric-klusterresursen ska vara "2020-12-01-preview" eller högre.
{
    "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')]"
    }    
    ],
}

Konfigurera VM-skalningsuppsättning för tillståndslösa nodtyper

Om du vill aktivera tillståndslösa nodtyper bör du konfigurera den underliggande VM-skalningsuppsättningsresursen på följande sätt:

  • Värdet singlePlacementGroup-egenskapen , som ska anges till false om du behöver skala till fler än 100 virtuella datorer.
  • Skalningsuppsättningens upgradePolicy ska vara inställd på Rullande.
  • Rullande uppgraderingsläge kräver att programhälsotillägget eller hälsoavsökningarna har konfigurerats. Mer information om hur du konfigurerar hälsoavsökningar eller programhälsotillägg finns i det här dokumentet. Konfigurera hälsoavsökning med standardkonfigurationen för tillståndslösa nodtyper enligt vad som föreslås nedan. När programmen har distribuerats till nodtypen kan portar för hälsoavsökning/hälsotillägg ändras för att övervaka programmets faktiska hälsa.

Anteckning

När du använder autoskalning med tillståndslösa nodtyper rensas inte nodtillståndet automatiskt efter nedskalningsåtgärden. För att rensa NodeState för nednoder under autoskalning rekommenderar vi att du använder Service Fabric AutoScale Helper .

{
    "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"
            }
            }
        },
    ]
}

Konfigurera tillståndslösa nodtyper med flera Tillgänglighetszoner

Om du vill konfigurera tillståndslös nodtyp som sträcker sig över flera tillgänglighetszoner följer du dokumentationen här, tillsammans med några ändringar på följande sätt:

  • Ange singlePlacementGroup : false om flera placeringsgrupper måste aktiveras.
  • Ange upgradePolicy : Rullande och lägg till programhälsotillägg/hälsoavsökningar enligt ovan.
  • Ange platformFaultDomainCount : 5 för VM-skalningsuppsättning.

Som referens kan du titta på mallen för att konfigurera tillståndslösa nodtyper med flera Tillgänglighetszoner

Nätverkskrav

Offentlig IP- och Load Balancer resurs

Om du vill aktivera skalning till fler än 100 virtuella datorer på en vm-skalningsuppsättningsresurs måste lastbalanseraren och IP-resursen som refereras av vm-skalningsuppsättningen båda använda en standard-SKU . Om du skapar en lastbalanserare eller IP-resurs utan SKU-egenskapen skapas en Basic-SKU som inte stöder skalning till fler än 100 virtuella datorer. En standard-SKU-lastbalanserare blockerar all trafik från utsidan som standard. för att tillåta extern trafik måste en NSG distribueras till undernätet.

{
    "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"
    }
}

Anteckning

Det går inte att göra en ändring på plats av SKU:n för de offentliga IP- och lastbalanseringsresurserna.

NAT-regler för VM-skalningsuppsättningar

Lastbalanserarens inkommande NAT-regler ska matcha NAT-poolerna från VM-skalningsuppsättningen. Varje VM-skalningsuppsättning måste ha en unik inkommande NAT-pool.

{
"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"
        }
    }
    ]
}

Standard-SKU Load Balancer regler för utgående trafik

Standard Load Balancer och standard offentlig IP introducerar nya funktioner och olika beteenden för utgående anslutningar jämfört med att använda Basic-SKU:er. Om du vill ha utgående anslutning när du arbetar med Standard-SKU:er måste du uttryckligen definiera den antingen med offentliga STANDARD-IP-adresser eller Offentliga standard-Load Balancer. Mer information finns i Utgående anslutningar och Azure Standard Load Balancer.

Anteckning

Standardmallen refererar till en NSG som tillåter all utgående trafik som standard. Inkommande trafik är begränsad till de portar som krävs för Service Fabric-hanteringsåtgärder. NSG-reglerna kan ändras för att uppfylla dina krav.

Anteckning

Alla Service Fabric-kluster som använder en Standard SKU SLB måste se till att varje nodtyp har en regel som tillåter utgående trafik på port 443. Detta är nödvändigt för att slutföra klusterkonfigurationen, och all distribution utan en sådan regel kommer att misslyckas.

Migrera till att använda tillståndslösa nodtyper i ett kluster

För alla migreringsscenarier måste en ny tillståndslös nodtyp läggas till. Det går inte att migrera den befintliga nodtypen så att den endast är tillståndslös.

Om du vill migrera ett kluster, som använde en Load Balancer och EN IP-adress med en grundläggande SKU, måste du först skapa en helt ny Load Balancer- och IP-resurs med hjälp av standard-SKU:n. Det går inte att uppdatera dessa resurser på plats.

Den nya lastbalanserare och IP-adress bör refereras till i de nya tillståndslösa nodtyperna som du vill använda. I exemplet ovan läggs en ny VM-skalningsuppsättning till för att användas för tillståndslösa nodtyper. Dessa VM-skalningsuppsättningar refererar till den nyligen skapade lastbalanserare och IP-adress och markeras som tillståndslösa nodtyper i Service Fabric-klusterresursen.

Till att börja med måste du lägga till de nya resurserna i din befintliga Resource Manager mall. Dessa resurser omfattar:

  • En offentlig IP-resurs med standard-SKU.
  • En Load Balancer resurs med standard-SKU.
  • En NSG som refereras av undernätet där du distribuerar vm-skalningsuppsättningar.

När resurserna har distribuerats kan du börja inaktivera noderna i den nodtyp som du vill ta bort från det ursprungliga klustret.

Nästa steg