微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何停止整个 Akka 集群分片

如何解决如何停止整个 Akka 集群分片

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

我知道我可以在“这个”节点 context.system.terminate()

上停止 actor 系统

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

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

我想没有单一的命令可以做到这一点,但一定有办法做到这一点。

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。