zookeeper启动或leader宕机选举leader流程
**说明:**
:第一次写,如有不足之处,请多指教
**本次实例环境:JKD1.8;zookeeper:3.5.8;集群节点3个**
选票格式说明vote = (myid,ZXID):
myid:集群节点的顺序编号
ZXID:致使zookeeper节点状态改变的每一个操作都将节点接收到一个ZXID格式的时间戳,并且全局有序。也就是说,每个节点的改变都将产生一个唯一的ZXID。
**选举步骤**
1、当集群中两个节点启动时:myid = 1 的节点会先向myid = 2 的节点给自己投票(1,0);myid = 2 的节点也会向myid = 1的节点投自己一票(2,0)
2、这时两个节点的票数是一样的,没有超过半数,就会先通过ZXID判断哪个节点的ZXID较大,就会优先选择,如果一样,会通过myid判断大的会成为第一轮的获胜者。因为票数没有超过半数不会产生新的leader所以会开启下一轮选举。
3、第二轮选举,两个节点不会在投自己,而是把上一轮选举出的推荐节点,投给对方,这时myid = 1向myid = 2的投票(2,0),myid = 2 的节点向myid = 1 投(2,0)。
4、通过上两轮的选举myid = 2 的票数是2,myid = 1的票数是1,myid =2 的节点获胜称为Leader
5、这时启动myid = 3 的节点,发现集群中已经有了Leader就不会再进行选举,直接将自己设置为follower节点