默认选举规则
zxid:每个数据节点最新的数据的id,最新的节点的编号越大
- 在zookeeper第一次启动都为0
只要zookeeper每台机器的数据都一样,这个值都是一样的
- 除非zookeeper中每台机器之间有数据不一样
- leader广播写入了数据,有些follower写成功了,有些follower失败了
- 如果不一样,zxid越大,就越优先成为leader,代表这台机器中的数据是最全的
- leader:1 2 3 4
- followera:1 2 3 4
- followerb:1 2 3
- 如果这时候,leader宕机,重新选举新的leader
谁的数据最全,就最应该成为leader
- followera优先成为leader
myid:每个机器节点对应的初始权重
部署的时候指定
- 如果有两个follower,他们最新的zxid都是一样的,怎么办?
- leader:1 2 3 4
- followera:1 2 3 4
- followerb:1 2 3 4
- 如果这时候,leader宕机,重新选举新的leader
先比较zxid,如果zxid一致,再比较myid
- myid越大,越优先成为leader
- 投票超过半数
举例
- 三台机器依次对应的初始权重为1、2、3
- 三台机器首次依次启动
机器 zxid myid
node-01 0 1
node-02 0 2
node-03 0 3
- node-01启动,投票投自己,0 - 1
这时候node-01会有优先成为leader
- node-02启动,投票投自己,0-2
- 比较zxid:一样
- 比较myid:2>1
node-02成为备选的leader,这时候node-01改投node-02
- 总共3台机器,已经两台机器投票了,
超过半数,投的都是2
- 第二台机器成为leader
- node-03启动,
只能成为follower