【Azure微服务 Service Fabric 】如何转移Service Fabric集群中的种子节点(Seed Node)
注意:在对Service Fabric的节点做操作之前,请务必确认是否是种子节点(Seed Node)且当前节点的数量是否与SF的持久层要求的数量一致。
可靠性级别是 Service Fabric 群集资源的一个属性。 对于各个节点类型,此属性的配置必须相同。 该属性控制群集系统服务的复制因子,是群集资源级别的设置。
可靠性级别决定了主节点类型必须具有的节点数下限。 可靠性层可以采用以下值:
- 白金:运行包含 7 个目标副本集和 9 个种子节点的系统服务。
- 金:运行包含 7 个目标副本集和 7 个种子节点的系统服务。
- 银:运行包含 5 个目标副本集和 5 个种子节点的系统服务。
- 铜:运行包含 3 个目标副本集和 3 个种子节点的系统服务。
建议的最低可靠性级别为“银”级。
在使用Service Fabric的过程中,有时会遇见某个节点出现问题,一般情况下,SF集群被设计为高可用集群,当单个节点停机期间会有其他的节点来接管。但是有时候也需要把种子节点转移出去,当有这种需求的时候,可以参考一下步骤:
准备条件:
- 使用Powershell/sfctl 已经连接到当前SF集群(Connect-ServiceFabricCluster & sfctl cluster)
- 使用Service Fabric Explorer连接到SF集群
执行步骤:
一:确保node type下的虚机数量满足reliability tier的最低需求,并同时满足至少有一个以上的none-seed node
二:使用powershell 或者 sfctl 停用要移除的seed node (以_nt1vm_5为例)
# power shell Disable-ServiceFabricNode -NodeName _nt1vm_5 -Intent RemoveNode -Force
# sfctl sfctl node disable --node-name _nt1vm_5 --deactivation-intent RemoveNode
三:等待seed node状态由 ‘disabling’ 转换为 ‘disabled’ (等待时间30分钟以上)
等待操作触发的cluster upgrade 完成,以及_nt1vm_5 转换为none-seed node
四:在VMSS界面直接移除对应的虚机 (运行在Linux上的Service Fabric Cluster不支持sfctl node transition命令)
五:使用powershell 或者 sfctl 移除node state
#power shell
Remove-ServiceFabricNodeState -NodeName "_nt1vm_5"
#sfctl
sfctl node remove-state --node-name _nt1vm_5
参考资料:
Service Fabric 具有种子节点的概念 。 种子节点可以维护基础群集的可用性。
种子节点可以与其他节点签署租约,在发生某些类型的故障时充当断路器,这样可确保群集保持启动状态。 如果随机故障删除了群集中的大部分种子节点并且无法快速将其恢复,则群集会自动关闭。 群集随后会发生故障。
在 Azure 中,Service Fabric 资源提供程序管理 Service Fabric 群集配置。 默认情况下,资源提供程序在主节点类型的容错域和升级域之间分配种子节点 。 如果将主节点类型标记为“银”或“金”级耐久性,则在通过缩减主节点类型或手动删除种子节点的方式删除种子节点时,群集会尝试从主节点类型的可用容量中提升另一个非种子节点。 如果你的可用容量少于群集可靠性级别对主节点类型的要求,则此尝试会失败。
在独立 Service Fabric 群集和 Azure 中,主节点类型是运行种子的节点类型。 定义主节点类型时,Service Fabric 会自动利用为每个系统服务创建最多九个种子节点和七个副本时提供的节点数。 如果一组随机故障同时导致其中的大部分副本关闭,则系统服务会进入仲裁丢失状态。 如果大部分种子节点丢失,群集会在不久之后关闭。
https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-capacity
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!