共用方式為

部署具有无状态节点类型的Azure Service Fabric群集

服务Fabric节点类型具有固有假设,即在某些时间点,有状态服务可能放置在节点上。 无状态节点类型改变了对节点类型的此假设,从而使节点类型能够利用其他功能,例如更快速的横向扩展操作、支持铜级耐久性的自动操作系统升级,以及在单个虚拟机横向扩展集中扩展到超过 100 个节点。

  • 主节点类型不能配置为无状态
  • 无状态节点类型仅支持“青铜”持续性级别
  • 无状态节点类型仅在服务Fabric运行时版本 7.1.409 或更高版本上受支持。

示例模板可用:Service Fabric无状态节点类型模板

在服务Fabric群集中启用无状态节点类型

若要在群集资源中将一个或多个节点类型设置为无状态,请将“isStateless”属性设置为“true” 。 部署具有无状态节点类型的服务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')]"
    }    
    ],
}

配置虚拟机规模集以用于无状态节点类型

若要启用无状态节点类型,应按以下方式配置底层虚拟机规模集资源:

  • singlePlacementGroup 属性的值应设置为 false(如果需要扩展到超过 100 个 VM)。
  • 应将规模集的 upgradePolicy 设置为滚动升级
  • 设置为滚动升级模式时,需要配置应用健康扩展或健康探针。 有关配置运行状况探测或应用程序运行状况扩展的详细信息,请参阅此 文档。使用无状态节点类型的默认配置来配置运行状况探测,建议如下。 将应用程序部署到节点类型后,可以更改运行状况探测/运行状况扩展端口,以监视实际的应用程序运行状况。

注意

对无状态节点类型使用自动缩放时,在缩减操作后,不会自动清理节点状态。 为了在自动缩放过程中清理下线节点的状态,建议使用 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"
            }
            }
        },
    ]
}

配置具有多个Availability Zones的无状态节点类型

若要配置跨多个可用性区域的无状态节点类型,请遵循此处的文档进行操作,并作如下一些更改:

  • singlePlacementGroup 设置为 false,如果需要启用多个放置组。
  • 设置upgradePolicy滚动,并按照上文说明添加应用程序运行状况扩展和运行状况探针。
  • platformFaultDomainCount 设置为5,用于虚拟机扩展集。

要获得参考资料,请查看 template,了解如何配置具有多个可用区的无状态节点类型。

网络要求

公共 IP 和 Load Balancer 资源

为了能够在虚拟机规模集资源中扩展到超过 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 Standard Load Balancer

注意

标准模板引用默认情况下允许所有出站流量的 NSG。 入站流量仅限于Service Fabric管理操作所需的端口。 你可以根据需要对 NSG 规则进行修改。

注意

任何使用标准 SKU SLB 的服务 Fabric 群集都需要确保每个节点类型都有允许端口 443 上的出站流量的规则。 这是完成群集设置所必需的,没有此类规则的任何部署都将失败。

迁移为在群集中使用无状态节点类型

对于所有迁移方案,都需要添加一个新的纯无状态节点类型。 现有节点类型不能迁移为仅无状态。

若要迁移使用具有基本 SKU 的 IP 的群集,必须先使用标准 SKU 创建全新的 IP 资源。 无法就地更新这些资源。

应将新的 LB 和 IP 引用到您想要使用的新无状态节点类型中。 上面的示例中添加了一个新的虚拟机规模集资源,用于无状态节点类型。 这些虚拟机规模设置引用新创建的负载均衡器(LB)和 IP,并在服务构架集群资源中标记为无状态节点类型。

首先,需要将新资源添加到现有Resource Manager模板。 这些资源包括:

  • 使用标准 SKU 的公共 IP 资源。
  • 使用标准 SKU 的Load Balancer资源。
  • 由在其中部署虚拟机规模集的子网所引用的 NSG。

资源完成部署后,你就可以开始禁用要从原始群集中删除的节点类型中的节点。

后续步骤