Udostępnij za pośrednictwem


Wdrażanie klastra usługi Azure Service Fabric z typami węzłów tylko bezstanowymi

Typy węzłów usługi Service Fabric mają z założenia, że w pewnym momencie usługi stanowe mogą być umieszczane w węzłach. Typy węzłów bezstanowych zmieniają to założenie dla typu węzła, co pozwala typowi węzła na korzystanie z innych funkcji, takich jak szybsze operacje skalowania w poziomie, obsługa automatycznych uaktualnień systemu operacyjnego na brąz trwałości i skalowanie w poziomie do ponad 100 węzłów w jednym zestawie skalowania maszyn wirtualnych.

  • Nie można skonfigurować typów węzłów podstawowych jako bezstanowych
  • Typy węzłów bezstanowych są obsługiwane tylko w przypadku poziomów trwałości z brązu
  • Typy węzłów bezstanowych są obsługiwane tylko w środowisku uruchomieniowym usługi Service Fabric w wersji 7.1.409 lub nowszej.

Dostępne są przykładowe szablony: szablon Typy węzłów bezstanowych usługi Service Fabric

Włączanie typów węzłów bezstanowych w klastrze usługi Service Fabric

Aby ustawić co najmniej jeden typ węzła jako bezstanowy w zasobie klastra, ustaw właściwość isStateless na true. Podczas wdrażania klastra usługi Service Fabric z typami węzłów bezstanowych pamiętaj, aby mieć jeden podstawowy typ węzła w zasobie klastra.

  • Wersja apiVersion zasobu klastra usługi Service Fabric powinna mieć wartość "2020-12-01-preview" lub nowsza.
{
    "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')]"
    }    
    ],
}

Konfigurowanie zestawu skalowania maszyn wirtualnych dla typów węzłów bezstanowych

Aby włączyć typy węzłów bezstanowych, należy skonfigurować podstawowy zasób zestawu skalowania maszyn wirtualnych w następujący sposób:

  • Wartość właściwości singlePlacementGroup , która powinna być ustawiona na wartość false , jeśli chcesz skalować do więcej niż 100 maszyn wirtualnych.
  • Zasady uaktualniania zestawu skalowania powinny być ustawione na Wartość Rolling.
  • Tryb uaktualniania stopniowego wymaga skonfigurowania rozszerzenia kondycji aplikacji lub sond kondycji. Aby uzyskać więcej informacji na temat konfigurowania sond kondycji lub rozszerzenia kondycji aplikacji, zapoznaj się z tym dokumentem. Skonfiguruj sondę kondycji z domyślną konfiguracją typów węzłów bezstanowych, jak pokazano poniżej. Po wdrożeniu aplikacji do typu węzła można zmienić porty rozszerzenia Sonda kondycji/Kondycja, aby monitorować rzeczywistą kondycję aplikacji.

Uwaga

Podczas korzystania z skalowania automatycznego z typami węzłów bezstanowych po operacji skalowania w dół stan węzła nie jest automatycznie czyszczony. Aby wyczyścić węzeł NodeState węzłów w dół podczas autoskalowania, zaleca się użycie pomocnika autoskalowania usługi 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"
            }
            }
        },
    ]
}

Konfigurowanie typów węzłów bezstanowych z wieloma Strefy dostępności

Aby skonfigurować typ węzła bezstanowego obejmujący wiele stref dostępności, postępuj zgodnie z dokumentacją w tym miejscu, wraz z kilkoma zmianami w następujący sposób:

  • Ustaw wartość singlePlacementGroup : false , jeśli do włączenia wielu grup umieszczania jest wymaganych.
  • Ustaw parametr upgradePolicy: rolling and add Application Health Extension/Health Probes (Uaktualnianie zasad zasad: rolling and add Application Health Extension/Health Probes), jak wspomniano powyżej.
  • Ustaw wartość platformFaultDomainCount : 5 dla zestawu skalowania maszyn wirtualnych.

Aby zapoznać się z dokumentacją, zapoznaj się z szablonem konfigurowania typów węzłów bezstanowych z wieloma Strefy dostępności

Wymagania dotyczące sieci

Publiczny adres IP i zasób usługi Load Balancer

Aby umożliwić skalowanie do ponad 100 maszyn wirtualnych w zasobie zestawu skalowania maszyn wirtualnych, zasób modułu równoważenia obciążenia i adresu IP, do którego odwołuje się ten zestaw skalowania maszyn wirtualnych, musi używać jednostki SKU w warstwie Standardowa . Utworzenie zasobu IP bez właściwości jednostki SKU spowoduje utworzenie jednostki SKU w warstwie Podstawowa, która nie obsługuje skalowania do ponad 100 maszyn wirtualnych. Moduł równoważenia obciążenia jednostki SKU w warstwie Standardowa domyślnie blokuje cały ruch z zewnątrz; aby zezwolić na ruch zewnętrzny, sieciowa grupa zabezpieczeń musi zostać wdrożona w podsieci.

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

Uwaga

Nie można przeprowadzić zmiany jednostki SKU w miejscu w publicznym adresie IP i zasobach modułu równoważenia obciążenia.

Reguły translatora adresów sieciowych zestawu skalowania maszyn wirtualnych

Reguły NAT dla ruchu przychodzącego modułu równoważenia obciążenia powinny być zgodne z pulami translatora adresów sieciowych z zestawu skalowania maszyn wirtualnych. Każdy zestaw skalowania maszyn wirtualnych musi mieć unikatową pulę NAT dla ruchu przychodzącego.

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

Reguły ruchu wychodzącego usługi Load Balancer w warstwie Standardowa

Publiczny adres IP w warstwie Standardowa wprowadza nowe możliwości i różne zachowania łączności wychodzącej w porównaniu z użyciem jednostki SKU w warstwie Podstawowa. Jeśli chcesz, aby łączność wychodząca podczas pracy z jednostkami SKU w warstwie Standardowa była jawnie zdefiniowana przy użyciu publicznych adresów IP w warstwie Standardowa lub publicznego modułu równoważenia obciążenia w warstwie Standardowa. Aby uzyskać więcej informacji, zobacz Połączenia wychodzące i Azure usługa Load Balancer w warstwie Standardowa.

Uwaga

Szablon standardowy odwołuje się do sieciowej grupy zabezpieczeń, która domyślnie zezwala na cały ruch wychodzący. Ruch przychodzący jest ograniczony do portów wymaganych w przypadku operacji zarządzania usługą Service Fabric. Reguły sieciowej grupy zabezpieczeń można modyfikować w celu spełnienia wymagań.

Uwaga

Każdy klaster usługi Service Fabric korzystający z usługi SLB w warstwie Standardowa musi mieć pewność, że każdy typ węzła ma regułę zezwalającą na ruch wychodzący na porcie 443. Jest to konieczne do ukończenia konfiguracji klastra, a każde wdrożenie bez takiej reguły zakończy się niepowodzeniem.

Migrowanie do używania typów węzłów bezstanowych w klastrze

W przypadku wszystkich scenariuszy migracji należy dodać nowy typ węzła tylko bezstanowy. Nie można migrować istniejącego typu węzła jako bezstanowego.

Aby przeprowadzić migrację klastra, który używał adresu IP z podstawową jednostkę SKU, należy najpierw utworzyć zupełnie nowy zasób IP przy użyciu standardowej jednostki SKU. Nie można zaktualizować tych zasobów w miejscu.

Nowy moduł równoważenia obciążenia i adres IP powinny być przywoływały się w nowych typach węzłów bezstanowych, których chcesz użyć. W powyższym przykładzie dodano nowe zasoby zestawu skalowania maszyn wirtualnych, które mają być używane dla typów węzłów bezstanowych. Te zestawy skalowania maszyn wirtualnych odwołują się do nowo utworzonego modułu równoważenia obciążenia i adresu IP i są oznaczone jako typy węzłów bezstanowych w zasobie klastra usługi Service Fabric.

Aby rozpocząć, należy dodać nowe zasoby do istniejącego szablonu usługi Resource Manager. Te zasoby obejmują:

  • Zasób publicznego adresu IP korzystający z jednostki SKU w warstwie Standardowa.
  • Zasób modułu równoważenia obciążenia przy użyciu jednostki SKU w warstwie Standardowa.
  • Sieciowa grupa zabezpieczeń, do której odwołuje się podsieć, w której wdrażasz zestawy skalowania maszyn wirtualnych.

Po zakończeniu wdrażania zasobów można rozpocząć wyłączanie węzłów w typie węzła, który chcesz usunąć z oryginalnego klastra.

Następne kroki