Delen via


Een Azure Service Fabric-cluster implementeren met alleen stateless knooppunttypen

Service Fabric-knooppunttypen worden inherent verondersteld dat stateful services op een bepaald moment op de knooppunten kunnen worden geplaatst. Staatloze knooppunttypen veranderen deze aanname voor een knooppunttype, waardoor het knooppunttype andere functies kan gebruiken, zoals snellere uitschaalbewerkingen, ondersteuning voor automatische besturingssysteemupgrades op bronzen duurzaamheid en uitschalen naar meer dan 100 knooppunten in één virtuele-machineschaalset.

  • Primaire knooppunttypen kunnen niet worden geconfigureerd om staatloos te zijn
  • Stateless knooppunttypen worden alleen ondersteund met bronzen duurzaamheidsniveaus
  • Stateless-knooppunttypen worden alleen ondersteund in Service Fabric Runtime versie 7.1.409 of hoger.

Voorbeeldsjablonen zijn beschikbaar: sjabloon Stateless Node Types van Service Fabric

Stateless knooppunttypen inschakelen in Service Fabric-cluster

Als u een of meer knooppunttypen wilt instellen als staatloos in een clusterresource, stelt u de eigenschap isStateless in op true. Wanneer u een Service Fabric-cluster implementeert met stateless knooppunttypen, moet u er rekening mee houden dat u ten minste één primair knooppunttype in de clusterresource hebt.

  • De ApiVersion van de Service Fabric-clusterresource moet '2020-12-01-preview' of hoger zijn.
{
    "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')]"
    }    
    ],
}

Virtuele-machineschaalset configureren voor staatloze knooppunttypen

Als u staatloze knooppunttypen wilt inschakelen, moet u de onderliggende virtuele-machineschaalsetresource op de volgende manier configureren:

  • De eigenschap value singlePlacementGroup , die moet worden ingesteld op false als u wilt schalen naar meer dan 100 VM's.
  • De upgradePolicy van de schaalset moet worden ingesteld op Rolling.
  • Voor de modus Rolling Upgrade zijn toepassingsstatusuitbreidings- of statustests geconfigureerd. Raadpleeg dit document voor meer informatie over het configureren van de statustests of de extensie voor de toepassingsstatus. Configureer de statustest met de standaardconfiguratie voor stateless knooppunttypen, zoals hieronder wordt voorgesteld. Zodra de toepassingen zijn geïmplementeerd in het knooppunttype, kunnen statustest-/statusuitbreidingspoorten worden gewijzigd om de werkelijke toepassingsstatus te bewaken.

Notitie

Tijdens het gebruik van automatische schaalaanpassing met staatloze knooppunttypen, wordt de knooppuntstatus na het omlaag schalen niet automatisch opgeschoond. Als u de NodeState van down-knooppunten tijdens automatische schaalaanpassing wilt opschonen, wordt u geadviseerd om de Helper voor Automatische schaalaanpassing van Service Fabric te gebruiken.

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

Stateless knooppunttypen configureren met meerdere Beschikbaarheidszones

Als u het type staatloze knooppunt wilt configureren dat meerdere beschikbaarheidszones beslaat, volgt u de documentatie hier, samen met de paar wijzigingen als volgt:

  • Stel singlePlacementGroup in: false als meerdere plaatsingsgroepen moeten worden ingeschakeld.
  • Stel upgradePolicy in: Rolling and add Application Health Extension/Health Probes zoals hierboven vermeld.
  • Stel platformFaultDomainCount in: 5 voor virtuele-machineschaalset.

Raadpleeg de sjabloon voor het configureren van stateless knooppunttypen met meerdere Beschikbaarheidszones

Netwerkvereisten

Openbare IP- en load balancer-resource

Als u schalen wilt inschakelen naar meer dan 100 VM's op een virtuele-machineschaalsetresource, moeten de load balancer en de IP-resource waarnaar wordt verwezen door die virtuele-machineschaalset beide een standard-SKU gebruiken. Als u een load balancer of IP-resource maakt zonder de SKU-eigenschap, wordt er een Basic-SKU gemaakt. Deze biedt geen ondersteuning voor schalen naar meer dan 100 VM's. Een standard-SKU-load balancer blokkeert standaard al het verkeer van buiten; om extern verkeer toe te staan, moet een NSG worden geïmplementeerd in het 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"
    }
}

Notitie

Het is niet mogelijk om een in-place wijziging van de SKU uit te voeren op de openbare IP- en load balancer-resources.

NAT-regels voor virtuele-machineschaalsets

De binnenkomende NAT-regels van de load balancer moeten overeenkomen met de NAT-pools uit de virtuele-machineschaalset. Elke virtuele-machineschaalset moet een unieke inkomende NAT-pool hebben.

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

Uitgaande regels voor standard-SKU Load Balancer

Standard Load Balancer en standaard openbaar IP-adres introduceren nieuwe mogelijkheden en verschillende gedragingen voor uitgaande connectiviteit in vergelijking met het gebruik van Basic-SKU's. Als u uitgaande connectiviteit wilt bij het werken met Standard-SKU's, moet u deze expliciet definiëren met openbare STANDAARD-IP-adressen of openbare Standard Load Balancer. Zie Uitgaande verbindingen en Azure Standard Load Balancer voor meer informatie.

Notitie

De standaardsjabloon verwijst naar een NSG die standaard al het uitgaande verkeer toestaat. Binnenkomend verkeer is beperkt tot de poorten die vereist zijn voor Service Fabric-beheerbewerkingen. De NSG-regels kunnen worden aangepast om aan uw vereisten te voldoen.

Notitie

Elk Service Fabric-cluster dat gebruikmaakt van een Standard SKU SLB moet ervoor zorgen dat elk knooppunttype een regel heeft die uitgaand verkeer toestaat op poort 443. Dit is nodig om het instellen van het cluster te voltooien en elke implementatie zonder een dergelijke regel mislukt.

Migreren naar het gebruik van stateless knooppunttypen in een cluster

Voor alle migratiescenario's moet een nieuw staatloos knooppunttype worden toegevoegd. Het bestaande knooppunttype kan niet worden gemigreerd om alleen stateless te zijn.

Als u een cluster wilt migreren dat gebruikmaakt van een Load Balancer en IP met een basis-SKU, moet u eerst een geheel nieuwe Load Balancer- en IP-resource maken met behulp van de standaard-SKU. Het is niet mogelijk om deze resources ter plaatse bij te werken.

Er moet naar de nieuwe LB- en IP-adressen worden verwezen in de nieuwe typen staatloze knooppunten die u wilt gebruiken. In het bovenstaande voorbeeld worden nieuwe resources voor virtuele-machineschaalsets toegevoegd om te worden gebruikt voor stateless knooppunttypen. Deze virtuele-machineschaalsets verwijzen naar de zojuist gemaakte LB en IP en worden gemarkeerd als stateless knooppunttypen in de Service Fabric-clusterresource.

Om te beginnen moet u de nieuwe resources toevoegen aan uw bestaande Resource Manager-sjabloon. Deze resources zijn onder andere:

  • Een openbare IP-resource met behulp van standard-SKU.
  • Een Load Balancer-resource met behulp van standard-SKU.
  • Een NSG waarnaar wordt verwezen door het subnet waarin u uw virtuele-machineschaalsets implementeert.

Zodra de resources zijn geïmplementeerd, kunt u beginnen met het uitschakelen van de knooppunten in het knooppunttype dat u uit het oorspronkelijke cluster wilt verwijderen.

Volgende stappen