【问题标题】:How to stop the entire Akka Cluster (Sharding)如何停止整个 Akka 集群(分片)
【发布时间】:2021-04-29 20:56:59
【问题描述】:

如何通过一个参与者的分片(跨越多台机器 - 节点)来停止 ENTIRE 集群?

我知道我可以在 'this' 节点 context.system.terminate() 上停止 actor 系统

我知道我可以停止本地分片区域。

我找到了.prepareForFullClusterShutdown(),但它实际上并没有停止节点。

我想没有单一的命令可以做到这一点,但必须有某种方法可以做到这一点。

【问题讨论】:

    标签: scala akka actor sharding akka-cluster


    【解决方案1】:

    据我所知,没有开箱即用的方法可以做到这一点:总体预期是有一个外部控制平面(例如 kubernetes)来管理它。

    但是,可以在集群的每个节点上都有一个参与者,它侦听成员事件并订阅 pubsub 主题。该参与者将跟踪当前的集群成员,当被告知开始关闭集群时,它会向主题发布(例如)ShutdownCluster 消息并跟踪哪些节点离开。一段时间后(因为分布式发布订阅最多一次),如果除了这个之外还有节点没有离开,它会再次发送它。最终,在集群中的所有其他节点都离开后,该参与者会关闭其节点。当其他节点看到ShutdownCluster消息时,它们会立即关闭自己。

    当然,这种方案可能无法很好地与任何形式的外部编排(无论是容器调度程序,如 kubernetes、mesos 还是 nomad;或者甚至是像 monit 这样的简单的东西,它注意到服务没有运行)并重新启动它)。

    【讨论】:

    • 谢谢,订阅MemberPreparingForShutdown 在每个节点上按预期工作。 (除了 SLURM 我没有其他编排,所以它不会干扰)
    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    相关资源
    最近更新 更多