如何停止整个集群,并从一个参与者进行分片(跨越多个计算机-节点)?我知道我可以在“this”节点context.system.terminate()上停止参与者系统我知道我能阻止当地的碎片区。我找到了.prepareForFullClusterShutdown(),但它实际上并没有停止节点。我想没有单一的命令可以做到这一点,但一定有某种方法可以做到这一点。
context.system.terminate()
.prepareForFullClusterShutdown()
fnatzsnv1#
据我所知,没有现成的方法可以做到这一点:总的期望是存在管理此的外部控制平面(例如,Kubernetes)。但是,可以在集群的每个节点上都有一个执行元,用于监听成员资格事件并订阅pubsub主题。它发布了(例如)ShutdownCluster消息发送到主题,并跟踪哪些节点离开。(因为分布式pubsub最多只发送一次)如果除此节点之外还有其他节点没有离开,它会再次发送该消息。最终,在集群中的所有其他节点都离开后,此参与者会关闭其节点。当其他节点看到ShutdownCluster消息时,他们立即关闭了自己。当然,这种方案可能无法很好地与任何形式的外部编排配合使用(无论是像kubernetes、mesos或nomad这样的容器调度程序;或者甚至是像monit这样的简单操作,它注意到服务没有运行并重新启动它)。
ShutdownCluster
1条答案
按热度按时间fnatzsnv1#
据我所知,没有现成的方法可以做到这一点:总的期望是存在管理此的外部控制平面(例如,Kubernetes)。
但是,可以在集群的每个节点上都有一个执行元,用于监听成员资格事件并订阅pubsub主题。它发布了(例如)
ShutdownCluster
消息发送到主题,并跟踪哪些节点离开。(因为分布式pubsub最多只发送一次)如果除此节点之外还有其他节点没有离开,它会再次发送该消息。最终,在集群中的所有其他节点都离开后,此参与者会关闭其节点。当其他节点看到ShutdownCluster
消息时,他们立即关闭了自己。当然,这种方案可能无法很好地与任何形式的外部编排配合使用(无论是像kubernetes、mesos或nomad这样的容器调度程序;或者甚至是像monit这样的简单操作,它注意到服务没有运行并重新启动它)。