1

有一些集群,还有一些 unix 网络守护进程。此守护程序在每个集群节点上启动,但只有一个可以处于活动状态。

当活动的守护进程中断(节点中断的程序中断)时,其他节点应该变为活动的。

我可以想到一些可能的算法,但我认为已经对此进行了一些研究,还有一些现成的算法?我对吗?你能指出我的答案吗?

谢谢。

4

1 回答 1

1

Jgroups 是一个 Java 网络堆栈,其中包括DistributedLockManager支持类型和集群投票功能。这些允许任意数量的 unix 守护进程就谁应该处于活动状态达成一致。所有节点都可能试图获得锁(例如),只有一个会成功,直到应用程序或节点失败。

Jgroups 也有特定通信通道协调器的概念。一次只能有一个节点作为协调者,当一个节点发生故障时,另一个节点成为协调者。很容易测试您是否是协调员,在这种情况下您将处于活动状态。

参见:http ://www.jgroups.org/javadoc/org/jgroups/blocks/DistributedLockManager.html

如果你要自己实现这个,有很多事情要记住:

  • 每个节点都需要具有一致的集群视图。
  • 所有节点都需要通知所有其余节点他们在线——可能使用多播。
  • 离线的节点(由于 ap 或节点故障)将需要从所有其他节点的“视图”中删除。
  • 然后,您可以让 IP 最低的节点或其他节点成为活动节点。
  • 如果这不合适,那么您将需要进行某种投票交换,以便节点可以同意谁是活跃的。类似于:http ://en.wikipedia.org/wiki/Two-phase_commit_protocol
于 2010-06-03T17:36:07.297 回答