码迷,mamicode.com
首页 > 其他好文 > 详细

ZooKeeper之ZAB协议

时间:2020-03-02 22:41:09      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:故障恢复   rop   32位   com   结果   block   自己的   恢复   领导   

ZAB协议

Zookeeper的核心是原子广播,这个机制保证了server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,分别是恢复模式和广播模式。当服务启动或者在领导者崩溃后,Zab就进入恢复模式。当领导者被选举出来,且大多数server的完成了和leader的状态同步之后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。

ZAB协议由崩溃(故障)恢复和消息广播组成

事物

在ZAB协议中,每个事物都有一个编号ZXID,ZXID由两部分组成,高32位是epoch,底32位为递增计数器。

  • epoch:选举周期
  • 计数器:随事物的到来递增

故障恢复(选举和数据恢复)

  1. 选举
    只需要保证选举出来的leader服务器拥有集群中所有机器最高编码(ZXID最大)的事物proposal,那么就可以保证这个新选举出来的leader一定具有。

  2. 数据同步

leader会为每一个follower服务器准备一个队列,将那个没有被各个follower同步的事物以proposal的形式逐个发送给follower服务器,并在proposal后面紧接着发送一个Commit消息,以表示该事物已经被提交,当follower将数据同步完成之后,leader会将follower将数据同步完成之后,leader会将follower加入到真正可以的follower列表中。

故障恢复:算法描述

  1. 每个follower会将自己最后接收的事物proposal的epoch发送给准leader。
  2. 准leader在收到所有的epoch中选举一个最大值,在此基础上加一形成新的选举周期,发送给所有的follower。
  3. follower收到后会更新自己的epoch,并反馈给准leader一个ACK,同时携带历史事物集合。准leader收到所有的follower的历史事物集合之后,会形成初始事物集合。

故障恢复:同步

  1. 准leader将初始化事物集合发送给集群中所有的follower
  2. follower收到后对于其中的每一个事物,folllower都会接受,最后将结果反馈给leader,表示已经接受并处理了初始化事物集合中的事物。
  3. leader收到来自过半的leader的反馈,就会向所有的leader发送commit消息。

消息广播

在leader健在的时候由leader实现

  1. 发送给集群中的所有follower
  2. 收到过半的ACK
  3. 发送commit提交事物

ZooKeeper之ZAB协议

标签:故障恢复   rop   32位   com   结果   block   自己的   恢复   领导   

原文地址:https://www.cnblogs.com/we9999/p/12398314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!