在 zookeeper 集群中发生选举的场景有以下彡种:
本文主要针对集群启动时发生的选举实现进行分析
此时我们明白 WorkerReceiver 线程在运行期间会一直从 QuorumCnxManager.recvQueue 的队列中拉取接收到的外部投票信息,若当前节点为 LOOKING 状态则将外部投票信息添加到
到此我们基本明白了 ZK 集群节点发送和接收投票的处理流程,但是这个时候您是不是又有一种懵的状态呢 笑哭我们会发现选举过程中依赖了多个线程 WorkerSender, SendWorker, WorkerReceiver,
看了这么长时间的代码, 最后我们就来个小结吧 :
QuorumCnxManager 类主要职能是负责集群中节点与外部节点进行通信及投票信息的中转
- 比较外部投票与内部投票的选举周期值,选举周期大的值优先
- 若选举周期值一致则比较事务 ID; 事务 ID 朂新的优先
- 若选举周期值一致且事务 ID 值相同,则比较投票节点的 server id; server id 最大的优先
集群中节点通信时为了避免重复建立连接遵守一个原则:连接总是由 server id 较大的一方发起
源码看着真累 o(╯□╰)o