如何解决如何停止整个 Akka 集群分片
如何通过一个参与者的分片(跨越多台机器 - 节点)停止 ENTIRE 集群?
我知道我可以在“这个”节点 context.system.terminate()
我知道我可以停止本地 Sharding Region。
我找到了 .prepareForFullClusterShutdown()
,但它实际上并没有停止节点。
我想没有单一的命令可以做到这一点,但一定有办法做到这一点。
解决方法
据我所知,没有现成的方法可以做到这一点:总体期望是有一个外部控制平面(例如 kubernetes)来管理这个。
但是,可以在集群的每个节点上都有一个参与者,用于侦听成员资格事件并订阅发布订阅主题。该参与者将跟踪当前的集群成员资格,并且当被告知开始集群关闭时,它会向主题发布(例如)ShutdownCluster
消息并跟踪哪些节点离开。一段时间后(因为分布式发布订阅最多一次),如果除了这个节点之外还有节点没有离开,它会再次发送它。最终,在集群中的所有其他节点都离开后,这个参与者会关闭它的节点。当其他节点看到 ShutdownCluster
消息时,它们会立即关闭自己。
当然,这种方案可能不适用于任何形式的外部编排(无论是像 kubernetes、mesos 还是 nomad 这样的容器调度程序;甚至是像 monit 这样的简单的东西,它注意到服务没有运行)并重新启动它)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。