选举机制
启动时选举
从配置文件中读取集群个数
| 从.cfg文件中读取server的个数,以便在过半时选出leader
|
交换票
1
| 每台服务器把自己的票(myid和zxid)投给参与选举的节点
|
投票
1 2 3 4 5
| 将自己手上比较大的票投出去 先比较zxid,再比较myid 因为zxid代表着事务id,在这台Zookeeper服务器上每当有一个数改变,zxid就会加一,为了保证数据一致,就优先选择zxid
直到投票箱的数额超过集群一半
|
选举Leader
之后
1
| 有的节点在Leader诞生之后才连接上集群,此时如果发现以及存在Leader,便不会再参与投票,而是直接成为Follower
|
崩溃恢复时选举
1 2
| Leader建立完后,Leader周期性地不断向Follow发送心跳(ping命令,没有内容地socket)。 当Leader崩溃后,Follower发现socket通道已关闭,于是Follower开始进入到Looking状态,重新回到上一节中的Leader选举状态,此时集群不能对外访问
|
ping失败
重新选举