跨可用性区域部署 Service Fabric 托管群集
Azure 中的可用性区域是一个高可用性产品/服务,在数据中心发生故障时可以保护应用程序和数据。 可用性区域是一个唯一的物理位置,在 Azure 区域中配备独立电源、冷却系统和网络。
Service Fabric 托管群集支持跨多个可用性区域的部署以提供区域复原。 此配置可确保关键系统服务和应用程序的高可用性,以防止出现单点故障。 Azure 可用性区域仅在选定区域中可用。 有关详细信息,请参阅 Azure 可用性区域概述。
注意
可用性区域跨越仅适用于标准 SKU 群集。
现提供示例模板:Service Fabric 跨可用性区域模板
区域复原 Azure Service Fabric 托管群集的拓扑
注意
可用性区域中跨主节点类型的好处是实际上仅用于三个区域,而不仅仅是两个区域。
跨可用性区域 (AZ) 分布的 Service Fabric 群集可确保群集状态的高可用性。
建议的托管群集拓扑需要下面的资源:
- 群集 SKU 必须为标准
- 主节点类型应至少具有九个节点(每个 AZ 3 个)才能获得最佳复原能力,但支持最少六个节点(每个 AZ 2 个)。
- 辅助节点类型应该至少有六个节点才能获得最佳复原能力,但支持最少三个节点。
注意
仅支持 3 个可用性区域部署。
注意
不能将托管群集的虚拟规模集从非跨区群集就地更改为跨区群集。
显示了 Azure Service Fabric 可用性区域体系结构的图
描述跨区域虚拟机规模集的 FD/UD 格式的示例节点列表
跨区域分发服务副本:在跨区域的节点类型上部署服务时,会放置副本以确保它们分别驻留在不同的区域中。 可以确保此分隔,因为每个这样的节点类型中存在的节点上的容错域都配置了区域信息(即,FD = fd:/zone1/1 等)。 例如:对于有 5 个副本或实例的服务,将采用 2-2-1 的分布方式,且运行时将尝试确保在 AZ 之间进行均匀分布。
用户服务副本配置:在跨可用性区域节点类型上部署的有状态用户服务应进行以下配置:副本计数目标 = 9,最小 = 5。 即使一个区域出现故障,此配置也可帮助该服务正常工作,因为其他两个区域中仍有六个副本处于启动状态。 在这种情况下,应用程序也会升级。
区域故障情况:当某个区域出现故障时,该区域中的所有节点都将出现故障。 这些节点上的服务副本也会出现故障。 由于其他区域中存爱副本,因此服务将继续响应,并将主要副本故障转移到正常运行的区域。 服务将显示处于警告状态,因为未达到目标副本计数,并且虚拟机 (VM) 计数仍大于定义的最小目标副本大小。 因此,Service Fabric 负载均衡器将打开正在工作的区域中的副本,以匹配配置的目标副本数量。 此时,服务应该看起来运行正常。 在出现故障的区域恢复正常后,负载均衡器会再次将所有服务副本均匀分布到所有区域。
网络配置
有关详细信息,请参阅配置 Service Fabric 托管群集的网络设置
启用区域复原 Azure Service Fabric 托管群集
要启用区域可复原的 Azure Service Fabric 托管群集,必须包含以下 ZonalResiliency 属性,该属性指定群集是否具有区域复原能力。
{
"apiVersion": "2021-05-01",
"type": "Microsoft.ServiceFabric/managedclusters",
"properties": {
...
"zonalResiliency": "true",
...
}
}
将现有的非区域复原群集迁移到区域复原(预览版)
未跨可用性区域的现有 Service Fabric 托管群集现可就地迁移,以便跨可用性区域。 支持的方案包括在具有 3 个可用性区域的区域中创建的群集,以及在部署后提供 3 个可用性区域的区域中创建的群集。
要求:
- 标准 SKU 群集
- 区域中的三个可用性区域。
注意
迁移到区域复原配置可能会导致通过负载均衡器的外部连接短暂丢失,但不会影响群集运行状况。 当需要创建新的公共 IP,以在出现区域故障时可复原网络时,就会发生这种情况。 请相应地规划迁移。
首先确定是否需要新的 IP,以及需要迁移哪些资源才能获得区域复原能力。 若要获取托管群集资源当前的可用性区域复原状态,请使用以下 API 调用:
POST https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ServiceFabric/managedClusters/{clusterName}/getazresiliencystatus?api-version=2022-02-01-preview
也可以使用 Az Module,如下所示:
Select-AzSubscription -SubscriptionId {subscriptionId} Invoke-AzResourceAction -ResourceId /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ServiceFabric/managedClusters/{clusterName} -Action getazresiliencystatus -ApiVersion 2022-02-01-preview
此命令应提供类似于以下内容的响应:
{ "baseResourceStatus" :[ { "resourceName": "sfmccluster1" "resourceType": "Microsoft.Storage/storageAccounts" "isZoneResilient": false }, { "resourceName": "PublicIP-sfmccluster1" "resourceType": "Microsoft.Network/publicIPAddresses" "isZoneResilient": false }, { "resourceName": "primary" "resourceType": "Microsoft.Compute/virutalmachinescalesets" "isZoneResilient": false } ], "isClusterZoneResilient": false }
如果公共 IP 资源不具有区域复原能力,则群集的迁移将导致外部连接短暂丢失。 连接丢失的原因是迁移过程需要设置新的公共 IP 并将群集完全限定的域名 (FQDN) 更新为新 IP。 如果公共 IP 资源具有区域复原能力,则迁移不会修改公共 IP 资源或 FQDN,并且不会对外部连接造成影响。
使用客户发起的转换将为托管群集创建的基础存储帐户从本地冗余存储 (LRS) 转换为区域冗余存储 (ZRS)。 需要迁移的存储帐户的资源组采用与托管群集资源相同的订阅下的“SFC_ClusterId”格式(前 SFC_9240df2f-71ab-4733-a641-53a8464d992d)。
将区域属性添加到现有节点类型
此步骤将与节点类型关联的托管虚拟机规模集配置为区域复原,确保添加到其中的任何新 VM 都将跨可用性区域(区域 VM)部署。 如果指定的节点类型是主节点类型,则资源提供程序将执行公共 IP 以及群集 FQDN DNS 更新(如果需要)的迁移,从而获得区域复原能力。 使用
getazresiliencystatus
API 了解此步骤的含义。
使用 apiVersion 2022-02-01-preview 或更高版本。
将
zones
参数设置为["1", "2", "3"]
添加到现有节点类型:{ "apiVersion": "2024-02-01-preview", "type": "Microsoft.ServiceFabric/managedclusters/nodetypes", "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeName'))]", "location": "[resourcegroup().location]", "dependsOn": [ "[concat('Microsoft.ServiceFabric/managedclusters/', parameters('clusterName'))]" ], "properties": { ... "isPrimary": true, "zones": ["1", "2", "3"] ... } }, { "apiVersion": "2024-02-01-preview", "type": "Microsoft.ServiceFabric/managedclusters/nodetypes", "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeNameSecondary'))]", "location": "[resourcegroup().location]", "dependsOn": [ "[concat('Microsoft.ServiceFabric/managedclusters/', parameters('clusterName'))]" ], "properties": { ... "isPrimary": false, "zones": ["1", "2", "3"] ... } }
缩放节点类型以添加局部区域节点并删除区域节点
在此阶段,虚拟机规模集标记为区域复原。 因此,纵向扩展时,新添加的节点将是局部区域节点,而纵向缩减时,区域节点将被删除。 此方法通过调整节点类型上的
vmInstanceCount
属性,可以灵活地按照符合容量要求的任何顺序进行缩放。例如,如果初始 vmInstanceCount 设置为 6(表示 6 个区域节点),则可以执行两个部署:
- 第一个部署:将 vmInstanceCount 增加到 12,以添加 6 个局部区域节点。
- 第二个部署:将 vmInstanceCount 减少到 6,以删除所有区域节点。
在整个过程中,可以查看
getazresiliencystatus
API 以检索进度状态,如下所示。 每个节点类型至少有 6 个局部区域节点和 0 个区域节点后,此过程视为完成。{ "baseResourceStatus" :[ { "resourceName": "sfmccluster1" "resourceType": "Microsoft.Storage/storageAccounts" "isZoneResilient": true }, { "resourceName": "PublicIP-sfmccluster1" "resourceType": "Microsoft.Network/publicIPAddresses" "isZoneResilient": true }, { "resourceName": "ntPrimary" "resourceType": "Microsoft.Compute/virutalmachinescalesets" "isZoneResilient": false "details": "Status: InProgress, ZonalNodes: 6, RegionalNodes: 6" }, { "resourceName": "ntSecondary" "resourceType": "Microsoft.Compute/virutalmachinescalesets" "isZoneResilient": true "details": "Status: Done, ZonalNodes: 6, RegionalNodes: 0" } ], "isClusterZoneResilient": false }
注意
主节点类型的缩放过程将需要额外的时间,因为每次添加或删除节点都会启动 Service Fabric 群集升级。
标记可复原到区域故障的群集
此步骤有助于将来的部署,因为它可确保节点类型的所有未来部署跨越可用性区域,因此群集仍能忍受 AZ 故障。 在群集 ARM 模板中设置
zonalResiliency: true
,并执行部署,将群集标记为区域复原,同时确保所有新的节点类型部署都跨可用性区域。 仅当所有节点类型至少有 6 个局部区域节点和 0 个区域节点时,才允许此更新。{ "apiVersion": "2022-02-01-preview", "type": "Microsoft.ServiceFabric/managedclusters", "zonalResiliency": "true" }
还可以在门户中的“概述 - 属性”下查看更新状态,> 类似于
Zonal resiliency True
完成后的属性。验证所有资源是否具有区域复原能力
若要验证托管群集资源的可用性区域复原状态,请使用以下 GET API 调用:
POST https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ServiceFabric/managedClusters/{clusterName}/getazresiliencystatus?api-version=2022-02-01-preview
此 API 调用应提供类似于以下内容的响应:
{ "baseResourceStatus" :[ { "resourceName": "sfmccluster1" "resourceType": "Microsoft.Storage/storageAccounts" "isZoneResilient": true }, { "resourceName": "PublicIP-sfmccluster1" "resourceType": "Microsoft.Network/publicIPAddresses" "isZoneResilient": true }, { "resourceName": "ntPrimary" "resourceType": "Microsoft.Compute/virutalmachinescalesets" "isZoneResilient": true "details": "Status: Done, ZonalNodes: 6, RegionalNodes: 0" }, { "resourceName": "ntSecondary" "resourceType": "Microsoft.Compute/virutalmachinescalesets" "isZoneResilient": true "details": "Status: Done, ZonalNodes: 6, RegionalNodes: 0" } ], "isClusterZoneResilient": true }
如果遇到任何问题,请联系支持人员寻求帮助。