共用方式為


部署具有 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。 在沒有 SKU 屬性的情況下建立 IP 資源將會建立基本 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 負載平衡器輸出規則

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

注意

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

注意

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

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

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

若要移轉使用具有基本 SKU 的 IP 叢集,您必須先使用標準 SKU 建立全新的 IP 資源。 您無法就地更新這些資源。

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

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

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

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

下一步