【Azure 微服务】面对Service Fabric中节点状态不正常(Disabling/Warning/RemoveNode)的几种尝试解决方案
问题描述
发现 Service Fabric 的节点状态异常,如出现 Disabling, Warning,或者 RemoveNode的情况,并且持续很长时间都没有变化(2小时以上)。如何来缓解这种问题呢?
问题解答
面对这样的情况,首先需要进入每一个节点中,查看对应的 Warning 信息。如果Warning 中包含具体的信息,就根据内容尝试缓解问题。如果消息不能明确指出问题所在,则可以尝试通过 节点右边的 Restart 按钮来重启节点。
比如截图中的消息 'System.FM' reported Warning for property 'State'. Fabric node is taking longer than expected to deactivate.,关闭 Fabric 节点所耗的时间比预期的要长,并且节点状态一直显示 Disabling。表示节点已经Block了。Service Fabric 自身已经无法完成修复工作,需要手动接入。
修复Service Fabric中Application错误
当通过Service Fabric Explorer中的Restart也无法对此情况有任何帮助时,就需要查看集群的状态,应用是否存在错误。
比如截图中,Service Fabric中的应用出现Error, 消息显示 Partition is quorum loss. As the replicas come up, partition should recover from the quorum loss. 应用Partition丢失,当Replicas被选中成为Primary后,Partition将从Quorum Loss的情况中恢复。但是由于SF的应用设置的QuorumLossWaitDuration 的时间戳为infinite(无限)。所以错误就无法完成自动修复。
需要通过如下命令来修改QuorumLossWaitDuration的值
Update-ServiceFabricService -Stateful -ServiceName "fabric:/<Application Name, need replace>" -TargetReplicaSetSize 5 -MinReplicaSetSize 5 -ReplicaRestartWaitDuration 10 -QuorumLossWaitDuration 60 -Force
-
Update-ServiceFabricService :https://docs.microsoft.com/en-us/powershell/module/servicefabric/update-servicefabricservice?view=azureservicefabricps
-
StatefulServiceDescription.QuorumLossWaitDuration Property : https://docs.microsoft.com/en-us/dotnet/api/system.fabric.description.statefulservicedescription.quorumlosswaitduration?view=azure-dotnet#system-fabric-description-statefulservicedescription-quorumlosswaitduration
-
Gets or sets the maximum duration, for which a partition is allowed to be in a state of quorum loss.【获取或设置允许分区处于仲裁丢失状态的最大持续时间。】
-
If the partition is still in quorum loss after this duration, Service Fabric will recover the partition from the quorum loss by considering the down replicas as lost. Note that this can potentially incur data loss. The default value is Infinity and it is not recommended to change this value.【如果在此持续时间后分区仍处于仲裁丢失状态,Service Fabric 将通过将关闭的副本视为丢失来从仲裁丢失中恢复分区。请注意,这可能会导致数据丢失。默认值为"无穷大",不建议更改此值。】
修复Service Fabric节点错误
只有当SF中的应用信息已经被修复后,就可以通过以下几种常规的手段来Restart,Replace 节点:
1)通过 Service Fabric Explorer工具,在节点右侧点击“Restart”按钮重启节点
2)进入Service Fabric的VMSS门户页面,选中问题节点后,可以执行删除,重启,重置等按钮。
也可以使用PowerShell指令,如 Remove-ServiceFabricNode,Restart-ServiceFabricNode,Disable-ServiceFabricNode 等指令完成相同的操作。
PS: 特别注意,当操作的节点为种子节点(Seed Node), 不能直接删除,需要先Disable后,然Seed Node转移到其他节点,然后删除。操作方式可见:(如何转移Service Fabric集群中的种子节点(Seed Node):https://www.cnblogs.com/lulight/p/13691999.html)
参考资料
ServiceFabric:https://docs.microsoft.com/en-us/powershell/module/servicefabric/?view=azureservicefabricps
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-01-13 【Azure Redis 缓存】Azure Redis功能性讨论
2021-01-13 【Azure App Service for Linux】Linux Web App如何安装系统未安装的包