如何停止整个 Akka 集群(分片)

How to stop the entire Akka Cluster (Sharding)

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

我知道我可以在 'this' 节点 context.system.terminate()

上停止 actor 系统

我知道我可以停止本地 Sharding Region。

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

我想没有一个命令可以做到这一点,但一定有某种方法可以做到这一点。

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

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

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