选举机制

启动时选举

image-20220118003853321

从配置文件中读取集群个数

1
从.cfg文件中读取server的个数,以便在过半时选出leader

交换票

1
每台服务器把自己的票(myid和zxid)投给参与选举的节点

投票

1
2
3
4
5
将自己手上比较大的票投出去
先比较zxid,再比较myid
因为zxid代表着事务id,在这台Zookeeper服务器上每当有一个数改变,zxid就会加一,为了保证数据一致,就优先选择zxid

直到投票箱的数额超过集群一半

选举Leader

1
选举得票数最高的为Leader

之后

1
有的节点在Leader诞生之后才连接上集群,此时如果发现以及存在Leader,便不会再参与投票,而是直接成为Follower

崩溃恢复时选举

1
2
Leader建立完后,Leader周期性地不断向Follow发送心跳(ping命令,没有内容地socket)。
Leader崩溃后,Follower发现socket通道已关闭,于是Follower开始进入到Looking状态,重新回到上一节中的Leader选举状态,此时集群不能对外访问

ping失败

1
发现ping多次失败后,异常报错

重新选举

1
Follower开始进入倒Looking状态

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!