zookeeper选举原理和zab协议

一、选举原理

首先每一个节点都有一个myid,节点一启动,就会进行查找leader,如果没有找到,就会进行投票,

它会接受到其它节点的投票信息,然后拿自己的和收到的投票格式进行对比(先比较zxid,如果zxid一样,则比较myid大小,谁(节点)的zxid大,并且超过半数,谁就是leader)

投票格式为(myId,zxid),即选举机制保证了leader为所有机器的最大事务

 

一、zab协议

Zookeeper 的核心是原子广播机制,这个机制保证了各个 server 之间的同步,保证了多节点数据的一致性。
实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式和广播模式。

  1. 恢复模式
    1. 当服务启动或者在领导者崩溃后,Zab就进入了恢复模式(当领导者被选举出来,且大多数 server 完成了和 leader 的状态同步以后,恢复模式就结束了)
    2. 进入选举(文章后面有详细讲解zk的选举原理),然后进行数据同步
      选举出来的 Leader 服务器拥有集群中所有机器 ZXID 最大的事务
      当 Follower 连接上 Leader 之后,Follower 服务器会根据自己服务器上最后被提交的 ZXID 和 leader上的 ZXID 进行比对,比对结果要么回滚,要么和 Leader 同步

       

  2. 广播模式
    一旦 leader 已经和多数的 follower 进行了状态同步后,它就可以开始广播消息了,即进入广播状态。
    这时候当一个 server 加入 ZooKeeper 服务中,它会在恢复模式下启动,发现 leader,并和 leader 进行状态同步。待到同步结束,它也参与消息广播
    
    广播模式(半数机制):
    客户端发起请求(命令)
    第一阶段:leader向各节点发起提议,foller节点接收到提议,写本地数据(先不进行commit),发送ack确认响应leader。
    第二阶段:leader收到半数以上的ack确认后,自己本地再进行提交,把commit命令广播所有节点,确认事务都已经被过半的 Follwer 提交了,最后才会响应给客户端成功标志。

     

 

 

注:以上为本人总结,如有错误之处,望不吝指出,非常感谢!

如果对您起到了一点点帮助,请给予我一点鼓励,在下方点个小小的赞,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值