对于Zookeeper集群,整个集群需要
从集群节点中选出⼀个节点作为Leader
,⼤体流程如下:
-
集群中各个节点⾸先都是 观望状态 (LOOKING),⼀开始都会投票给⾃⼰,认为⾃⼰⽐较适合作为 leader
-
然后 相互交互投票 ,每个节点会收到其他节点发过来的选票,然后pk,先⽐较zxid,zxid⼤者获胜,zxid如果相等则⽐较myid,myid⼤者获胜
-
⼀个节点收到其他节点发过来的选票,经过PK后,如果PK输了,则改票,此节点就会投给zxid 或 myid更⼤的节点,并将选票放⼊⾃⼰的投票箱中,并将新的选票发送给其他节点
-
如果 pk是平局则将接收到的选票放⼊⾃⼰的投票箱中
-
如果pk赢了,则忽略所接收到的选票
-
当然⼀个节点将⼀张选票放⼊到⾃⼰的投票箱之后,就会从投票箱中统计票数,看是否超过⼀半的节点都和⾃⼰所投的节点是⼀样的,如果超过半数,那么则认为当前⾃⼰所投的节点是leader
-
集群中每个节点都会经过同样的流程,pk的规则也是⼀样的, ⼀旦改票就会告诉给其他服务器,所以最终各个节点中的投票箱中的选票也将是⼀样的 ,所以各个节点最终选出来的leader也是⼀样的,这样集群的leader就选举出来了