zookeeper 选举策略

zookeeper的核心以下三点 

  • 一致:对外提供的数据是一致的 
  • 有头:有Leader
  • 数据树:存储数据的一颗数据树

 

1、Paxos算法

基于消息传递的一致性算法

参考 https://www.douban.com/note/208430424/

2、ZAB协议

Zab借鉴了Paxos算法,但又不像Paxos那样,是一种通用的分布式一致性算法。是为Zookeeper设计的支持崩溃恢复的原子广播协议。

Leader的选举过程:

  1. 3888端口(选举Leader)两两机器通信 
  2. 只要任何人投票,就会触发那个准Leader发起自己的投票
  3. 推选制,先比较zxid(事务id),zxid相同,再比较myid(机器自己的id)

分以下两种情况:

注意:zxid——集群中过半的机器产生的最大的事物id


1、第一次启动集群

机器数量启动过半了才能选出Leader

假设机器node1( mid=1,Zid=0);node2(mid=2,Zid=0);node3 (mid=3,Zid=0);node4 (mid=4,Zid=0)。其中Node1,Node2,Node3三台机器启动完,各自发出投票信息,先比对Zid都为0,无法选出;再比对mid大小   Node3胜出被选为Leader

2、重启集群或者Leader挂了

zookeeper机器集群之间都会保持1s一次的心跳,从leader同步最新的数据 

假如 某一个时刻Node3机器 (Leader)  Zid增长到8(事物id)突然挂了, Node4 Zid =7 没来的急同步Leader信息,先发现Leader挂了。

  1. Node4(mid=4,Zid=7)向Node1,Node2发起自身投票为Leader
  2. 假如Node2(mid=2,Zid=8)接收Node4(mid=4,Zid=7)信息。发现自身Zid,Node2(Zid=8) > Node4(Zid=7),反馈给Node4说哥们儿不行啊,你的票信息过期了;同时Node2(mid=2,Zid=8)被动触发给自己投票当选Leader并广播投票信息(mid=2,Zid=8)给其他机器,同时自身加一票
  3. Node1(mid=1,Zid=8)接收到Node2(mid=2,Zid=8)投票信息。Zid相等;Node1(mid=1)<Node2(mid=2);Node1反馈给Node2说你是大哥,Node2加一票。
  4. Node4(mid=4,Zid=7)接收到Node2(mid=2,Zid=8)投票信息。Zid相等;Node4(Zid=7)<Node2(Zid=8);Node4反馈给Node2说你是大哥,Node2加一票。
  5. 最终Node2此轮竞争中3票胜出,当选Leader

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值