服务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。
资源完成部署后,你就可以开始禁用要从原始群集中删除的节点类型中的节点。