自动选择节点集群中的领导者

Posted

技术标签:

【中文标题】自动选择节点集群中的领导者【英文标题】:Automatic selection of a leader in a cluster of nodes 【发布时间】:2011-08-15 01:08:41 【问题描述】:

在节点集群中选择领先节点的最佳方法/算法是什么?如果实现在 Java 中可用,那将是一个加分项。

【问题讨论】:

leading 是什么意思?您能否详细说明node 的含义? 这不是很大程度上取决于你的使用场景吗?我的意思是您的用例中的领导者是什么意思?在集群中间的那个?最大的?最小的? 在多节点网络中,领导者是哪个节点将拥有权威数据。 IE。他们的数据比你的好。例如,如果您向节点 A 提交数据,它必须将该数据发送到节点 B 和 C。如果我(1 纳秒后)向节点 D 提交数据,在它有机会从 A 到达 B 和 C 之前,需要有一种方法可以知道我的数据更好。在这种情况下,D 是领导节点,因为它有最新的数据写入。 一些跨节点共享和复制的数据可以被多个节点修改。为了避免整个集群的数据版本不一致,一种解决方案是让一个具有权限的节点对其进行修改并根据需要进行复制。 【参考方案1】:

我之前在 Java 中实现过 Paxos 算法。它非常有用,而且相当简单。 (大概花了 16 个小时整理了一个 demo,用 Threads 来模拟服务器。当时我在线程方面也差很多!)

它不会帮助您准确地选择领导者......但它会做的是让各个节点就领导者达成一致。所以你有这个领导者选择算法,但是因为每个节点都会选择它自己的节点来领导,你可能会在你的节点之间发现一场“内战”。 Paxos 算法允许您说出哪个领导者是真正的领导者。

http://en.wikipedia.org/wiki/Paxos_%28computer_science%29

【讨论】:

谢谢。我对 Paxos 的实现有疑问,但我会创建一个单独的问题。【参考方案2】:

您可以查看JGroups的来源。 (关键字:“协调员”,查看 jGroups 手册中的chapter 7)

【讨论】:

【参考方案3】:

一些选项:

Hazelcast - Cluster leader election with Spring Integration and Hazelcast。 JGroups - Cluster leader election with JGroups Apache ZooKeeper - Cluster leader election with ZooKeeper。

我亲自使用 Hazelcast 和 JGroups 实现了它,并说两者都相当直接和简单。对于一个新项目,我会选择 Hazelcast。

【讨论】:

以上是关于自动选择节点集群中的领导者的主要内容,如果未能解决你的问题,请参考以下文章

领导节点CPU高的主要原因

图解Raft之领导者选举

动画演绎分布式共识算法Raft

Zookeeperzookeeper简单介绍和适用场景

raft 算法中的集群成员变更问题

Dubbo,Zookeeper入门