种子节点重启后重新加入集群节点
Re-join cluster node after seed node got restarted
让我们想象一下这样的场景。我的 akka 集群中有三个节点(节点 A、B、C)。每个节点都部署到网络内的不同物理设备。
所有这些节点都包含在 Topshelf windows 服务中。
节点A是我的种子节点,其他的只是指定了端口的'worker'个节点。
当我运行 群集并停止节点(服务)B 或C,然后重新启动它们。节点重新加入没有问题。
我想问一下是否可以处理其他场景。当我停止种子节点(节点 A)时,其他节点 - 服务仍然 运行ning 然后我重新启动节点服务 A - 我想让节点 B,C 重新加入集群并使整个生态系统又开始工作了。
这样的场景可以实现吗?如果是,那我应该怎么做?
在Akka.NET集群中,任何节点都可以作为其他节点的种子节点,只要它是集群的一部分。 "Seeds" 只是一个配置问题,因此您可以定义一个众所周知的节点地址列表,它们是集群的一部分。
针对你的情况,我想到的解决方案有以下几种:
- 一种常见的方法是在配置中定义多个种子节点,这样您的节点就不会成为单点故障。只要至少一个已配置的种子节点处于活动状态,一切都应该正常工作。请记住, 种子节点应该在每个配置中以完全相同的顺序定义 。
- 如果您的 "worker" 节点具有静态分配的端点,它们也可以用作种子节点。
- 由于您可以通过代码以编程方式初始化集群,您还可以使用第 3 方服务作为节点发现服务。您可以为此使用 consul - 我已经开始 a project,它提供了这样的功能。虽然它尚未发布,但如果它对您有帮助,请随意分叉或贡献它。
让我们想象一下这样的场景。我的 akka 集群中有三个节点(节点 A、B、C)。每个节点都部署到网络内的不同物理设备。
所有这些节点都包含在 Topshelf windows 服务中。
节点A是我的种子节点,其他的只是指定了端口的'worker'个节点。
当我运行 群集并停止节点(服务)B 或C,然后重新启动它们。节点重新加入没有问题。
我想问一下是否可以处理其他场景。当我停止种子节点(节点 A)时,其他节点 - 服务仍然 运行ning 然后我重新启动节点服务 A - 我想让节点 B,C 重新加入集群并使整个生态系统又开始工作了。
这样的场景可以实现吗?如果是,那我应该怎么做?
在Akka.NET集群中,任何节点都可以作为其他节点的种子节点,只要它是集群的一部分。 "Seeds" 只是一个配置问题,因此您可以定义一个众所周知的节点地址列表,它们是集群的一部分。
针对你的情况,我想到的解决方案有以下几种:
- 一种常见的方法是在配置中定义多个种子节点,这样您的节点就不会成为单点故障。只要至少一个已配置的种子节点处于活动状态,一切都应该正常工作。请记住, 种子节点应该在每个配置中以完全相同的顺序定义 。
- 如果您的 "worker" 节点具有静态分配的端点,它们也可以用作种子节点。
- 由于您可以通过代码以编程方式初始化集群,您还可以使用第 3 方服务作为节点发现服务。您可以为此使用 consul - 我已经开始 a project,它提供了这样的功能。虽然它尚未发布,但如果它对您有帮助,请随意分叉或贡献它。