【问题标题】:Upgrade Service Fabric Service that Fails to Honor Cancellation Token升级无法兑现取消令牌的 Service Fabric 服务
【发布时间】:2018-09-01 05:01:03
【问题描述】:

我在 Service Fabric 群集中运行了一个有状态服务,我现在知道该服务无法兑现传递给它的取消令牌。我的错。

我已准备好发布修复程序,但在升级过程中,我预计故障主节点上的服务副本会卡住,因为它不会兑现传入的令牌。

我可以使用Restart-ServiceFabricDeployedCodePackage甚至Restart-ServiceFabricNode手动删除卡住的副本,但这会导致升级过程中短暂的服务中断。

有没有办法以零停机时间发布此修复程序?

【问题讨论】:

  • 这对于有状态服务是不可能的,您需要在升级时停机。一旦你有了一个支持取消令牌的版本,你就可以了。
  • 感谢您的反馈。需要知道我的选择是什么。如果您想将其发布为答案,我会接受。

标签: azure azure-service-fabric service-fabric-stateful


【解决方案1】:

这对于使用 Service Fabric 基础结构的有状态服务是不可能的,升级时需要停机。一旦你有一个支持取消令牌的版本,你就可以了。

也就是说,根据状态的使用,如果您的客户端和服务之间有负载均衡器,您可以在新的固定版本上建立另一个服务实例并使用负载均衡器来消耗您的流量到新版本,升级旧版本,重新使用它,然后删除您创建的第二个服务。这将允许零停机情况。

【讨论】:

    【解决方案2】:

    我能想到的唯一解决方法更糟糕,因为它们会在升级期间关闭部分运行状况检查并“强制”进程停止。这不会使事情变得更优雅或缩短停机时间,并且具有可能导致其他健康问题被忽略的副作用。

    总是有一些停机时间,即使是完全滚动升级,因为将主节点交换到另一个节点从来都不是即时的,调用者需要发现新位置。使用这些命令,您只是将更优雅的关闭和清理转换为失败,从而导致相同的主交换。应该不会有太大的不同,因为客户(和 SF)无论如何都必须正常处理故障。

    我会继续使用这些命令,因为它们可以让您很好地手动控制当事情卡住时要戳的副本/进程。

    【讨论】:

    • 非常感谢!我们刚刚完成升级,没有服务中断。我们使用Restart-ServiceFabricDeployedCodePackage 手动强制将主节点交换到升级路径中的最后一个节点。然后,将辅助副本升级到固定版本后,我们再次在当前主副本上运行 Restart-ServiceFabricDeployedCodePackage 以强制其中一个升级的辅助副本成为主副本。
    猜你喜欢
    • 2017-06-26
    • 2017-10-30
    • 2016-10-13
    • 2020-10-06
    • 2020-02-18
    • 2017-03-17
    • 2016-11-06
    • 2016-07-27
    • 2023-04-04
    相关资源
    最近更新 更多