ZooKeeper 的选举机制
在进行 ZooKeeper 集群启动的时候,集群中会有 Leader 节点和 Follower 节点。 一个集群中只会有一个 Leade r节点。启动 ZooKeeper 集群的时候 Leader 并不是固定的,而是通过一定的选举策略产生的。
选择 Leader 节点的时候需要进行投票(Vote)。其中每个集群节点(服务器)都可以进行投票,并把自己的投票结果发送给其他的所有节点。投票的主要的信息 Vote 包含两个字段 myid 和 zxid
myid 是服务器节点的 id(服务器的标记)
zxid 是选举的全局事务 id(zxid 每次选举都会递增,选举轮次)
- 节点处于 looking 状态的时候会开始进行投票
- 第一次投票的时候永远是投自己的票
- 当收到其他节点发送的投票信息后,会进行 Vote(myid,zxid) 信息比较
- 首先根据 zxid 进行比较,zxid 值最大的准备选择为 Leader
- 如果 zxid 值相等,则根据 myid 进行比较。选择 myId 值大的作为 Leader, 重新发出投票信息
- 当有超过半数的 server 选择相同的 server 作为 Leader,则 Leader 节点选择完成