部署具有 Stateless-only 節點類型的 Service Fabric 叢集

Service Fabric 節點類型隨附固有的假設,在某個時間點,可設定狀態的服務可能會放在節點上。 無狀態節點類型會變更此假設的節點類型,因此可讓節點類型使用其他功能,例如更快的擴展作業、支援以銅級持久性自動執行作業系統升級,以及在單一虛擬機器擴展集中擴展至超過 100 個節點。

  • 主要節點類型無法設定為無狀態
  • 只有銅級持久性層級支援無狀態節點類型
  • 只有 Service Fabric 執行階段版本 7.1.409 或更高版本才支援無狀態節點類型。

可用的範例範本:Service Fabric 無狀態節點類型範本

在 Service Fabric 叢集中啟用無狀態節點類型

若要在叢集資源中將一或多個節點類型設定為無狀態,請將 isStateless 屬性設定為 true。 部署具有無狀態節點類型的 Service Fabric 叢集時,請記得在叢集資源中至少要有一個主要節點類型。

  • Service Fabric 叢集資源 apiVersion 必須是 "2020-12-01-preview" 或更高版本。
{
    "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')]"
    }    
    ],
}

設定無狀態節點類型的虛擬機器擴展集

若要啟用無狀態節點類型,您必須以下列方式設定基礎虛擬機器擴展集資源:

  • 如果您需要擴展至超過 100 個 VM,則 singlePlacementGroup 屬性值應設定為 false
  • 擴展集的 upgradePolicy 應設定為 Rolling
  • 必須設定應用程式健康情況擴充功能或健康情況探查,才能使用輪流升級模式。 如需設定健全狀態探查或應用程式健康情況延伸模組的詳細資訊,請參閱此文件。使用無狀態節點類型的預設設定來設定健全狀態探查,如下所建議。 將應用程式部署至節點類型後,您就可以變更健康情況探查/健康情況擴充功能連接埠,來監視實際的應用程式健康情況。

注意

使用無狀態節點類型的自動調整時,在縮小作業之後,節點狀態不會自動清除。 為了在自動調整期間清除向下節點的 NodeState,建議使用 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"
            }
            }
        },
    ]
}

設定具有多個可用性區域的無狀態節點類型

若要設定跨越多個可用性區域的無狀態節點類型,請遵循此處說明和以下這些變更:

  • singlePlacementGroup:如果需要啟用多個放置群組,請設定為 false
  • 設定 upgradePolicy:設定為 Rolling 並新增應用程式健康情況擴充功能/健康情況探查,如上所述。
  • platformFaultDomainCount:為虛擬機器擴展集設定 5

如需參考,請參閱設定具有多個可用性區域之無狀態節點類型的範本

網路需求

公用 IP 和負載平衡器資源

若要在虛擬機器擴展集資源上啟用超過 100 個 VM 的擴展,該虛擬機器擴展集所參考的負載平衡器和 IP 資源必須同時使用標準 SKU。 建立負載平衡器或 IP 資源時,如果沒有 SKU 屬性,將會建立基本 SKU,而不支援擴展至超過 100 個 VM。 標準 SKU 負載平衡器預設會封鎖來自外部的所有流量;若要允許外部流量,必須將 NSG 部署到子網路。

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

注意

您無法在公用 IP 和負載平衡器資源上進行 SKU 的就地變更。

虛擬機器擴展集 NAT 名稱

負載平衡器的輸入 NAT 規則應符合虛擬機器擴展集的 NAT 集區。 每個虛擬機器擴展集都必須有唯一的輸入 NAT 集區。

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

標準 SKU 負載平衡器輸出規則

標準負載平衡器和標準公用 IP 引進新功能以及不同的輸出連線行為 (與使用基本 SKU 相較)。 如果您想要在使用標準 SKU 時輸出連線,您必須使用標準公用 IP 位址或標準公用 Load Balancer 明確定義該連線。 如需詳細資訊,請參閱輸出連線Azure 標準負載平衡器

注意

標準範本會參考 NSG,以根據預設允許所有輸出流量。 輸入流量僅限於 Service Fabric 管理作業所需的連接埠。 NSG 規則可以修改為符合您的需求。

注意

凡是使用標準 SKU SLB 的 Service Fabric 叢集,都必須確保每個節點類型均有允許連接埠 443 上輸出流量的規則。 這是完成叢集設定的必要步驟,沒有這類規則的部署將會失敗。

移轉至在叢集中使用無狀態節點類型

在所有的遷移案例中,都必須新增 Stateless-only 的節點類型。 現有的節點類型無法移轉至 Stateless-only。

如果要移轉的叢集所使用的負載平衡器和 IP 設有基本 SKU,您必須先使用標準 SKU 建立全新的負載平衡器和 IP 資源。 您無法就地更新這些資源。

在您要使用的新無狀態節點類型中,必須參考新的 LB 和 IP。 上方的範例新增了用於無狀態節點類型的虛擬機器擴展集資源。 這些虛擬機器擴展集會參考新建立的 LB 和 IP,並在 Service Fabric 叢集資源中標示為無狀態節點類型。

若要開始,您必須將新的資源新增至現有的 Resource Manager 範本。 這些資源包括:

  • 使用標準 SKU 的公用 IP 資源。
  • 使用標準 SKU 的負載平衡器資源。
  • 您要在其中部署虛擬機器擴展集的子網路所參考的 NSG。

資源部署完成之後,您就可以開始停用節點類型中想要從原始叢集移除的節點。

下一步