我已经在Service Fabric集群中运行了一个有状态服务,我现在知道它无法遵守传递给它的取消令牌。我的错。
我已准备好发布修复程序,但在升级过程中,我预计故障主节点上的服务副本会因为无法兑现传入的令牌而卡住。
我可以使用Restart-ServiceFabricDeployedCodePackage
甚至Restart-ServiceFabricNode
手动取下卡住的副本,但这会导致升级过程中的服务中断。
有没有办法在零停机时间内发布此修复程序?
答案 0 :(得分:2)
对于使用Service Fabric基础结构的有状态服务,这是不可能的,您需要在升级时停机。一旦你有一个支持取消令牌的版本,那么你会没事的。
也就是说,根据州的使用情况,如果您的客户端和服务之间有负载均衡器,您可以在新的固定版本上站起另一个服务实例并使用负载均衡器来消耗您的流量到新版本,升级旧版本,将其耗尽,然后删除您创建的第二个服务。这将允许零停机情况。
答案 1 :(得分:1)
我能想到的唯一解决方法是更糟糕的,因为他们在升级过程中关闭了部分健康状况检查,并且强迫"强迫"下来的过程。这不会使事情更加优雅或改善停机时间,并且具有可能导致其他健康问题被忽略的副作用。
即使完全滚动升级,也始终某些停机时间,因为将主服务器交换到另一个节点永远不会是即时的,并且调用者需要发现新的位置。使用这些命令,您只需将更优雅的关闭和清理转换为故障,从而导致相同的主交换。不应该是一个巨大的差异,因为无论如何客户(和SF)必须正常处理失败。
我一直在使用这些命令,因为它们可以很好地手动控制哪些副本/进程在出现问题时会被戳戳。