ZAB协议介绍

ZAB协议包括两种基本模式:崩溃恢复和消息广播。

ZAB协议包括两种基本模式:崩溃恢复消息广播

当整个服务框架在启动过程中,或是Leader服务器出现崩溃、网络中断、重启或者集群中不存在过半的服务器与Leader服务器保持正常通信等异常情况时,ZAB就会进入崩溃恢复模式并选举产生新的Leader服务器。

当选举产生了新的Leader服务器,同时集群中已经有过半的机器与该Leader服务器完成了状态同步(数据同步)之后,ZAB协议就会退出恢复模式。

之后就进入了消息广播模式。如果此时一个同样遵循ZAB协议的加入到集群时,那么如果此时已经存在一个Leader在负责消息广播,那么该服务器就会自觉进入数据恢复模式,在完成之后加入到消息广播流程中。

ZooKeeper设计成只允许唯一的一个Leader服务器来进行事物请求的处理。Leader服务器在接收到客户端的事物请求之后,会生成对应提案并发起一轮广播;如果是其他非Leader机器接收到客户端的事物请求,那么它会将这个事物请求转发给Leader服务器。

attachments-2021-03-8NUtH8o3606461368b573.png


消息广播

ZAB的消息广播过程是一个原子广播协议,类似与一个2PC的过程。

attachments-2021-03-prHNEV9g6064614acf3bc.png

不过其整个流程与2PC也略有不同。在ZAB的二阶段提交过程中,移除了中断逻辑,所有的Follower服务器要么正常反馈Leader提出的事物Proposal,要么抛弃Leader服务器。同时在收到过半Follower的ack之后,Leader服务器就可以开始提交事物Proposal了,不必等待所有Follower都反馈。

当然,这种简化了的二阶段提交模型下,是无法处理因Leader服务器崩溃退出而带来的数据不一致问题的,因此在ZAB协议中添加了崩溃恢复模式来解决这个问题。

另外,整个消息广播协议是基于具有FIFO特性的TCP协议进行网络通信的,因此能够很容易的保证消息广播过程中消息接受与发送的顺序性。

在消息广播过程中,Leader服务器会为每个事物Proposal分配一个全局单调递增且唯一的ID,称为事物ID(即ZXID)。每个事物Proposal都必须按照ZXID的先后顺序来进行处理。Leader服务器会为每一个Follower服务器分配一个单独的队列,然后将需要广播的事物Proposal放入队列,并依据FIFO进行消息发送。Follower在接收到Proposal后,会以事物日志的形式写入本地磁盘,并在写入完之后反馈给Leader一个ack。在Leader接受半数Follower发送的ack之后,就会广播一个commit,同时自身也会完成对事物的提交。

崩溃恢复

一旦 Leader 服务器出现崩溃或者由于网络原因导致 Leader 服务器失去了与过半 Follower 的联系,那么就会进入崩溃恢复模式。

在整个过程中,需要一个高效的Leader选举算法快速选举出一个新的Leader服务器,同时还要让其他服务器快速感知新产生的Leader。

崩溃恢复主要包括两部分:Leader选举数据恢复

ZAB协议崩溃恢复需要满足两个要求:

  • 崩溃恢复过程需要确保已经被Leader提交的Proposal也能被所有Proposal提交
  • 崩溃恢复过程需要丢弃那些在Leader上提出但未提交的事物

因此,选举出的Leader也必须满足以下要求:

  • 该Leader节点持有最大的ZXID
  • 不能包含未提交的Proposal(即新Leader是已经提交了所有Proposal的原Follower节点)

在完成Leader选举后,Leader服务器首先会确认事物日志中所有的Proposal是否都已经被集群中过半的机器提交了,即是否完成数据同步。

Leader服务器需要确保所有Follower服务器能接收到每一条事物Proposal,并且能正确地将所有已经提交的事物Proposal应用到内从数据库中,Leader服务器会通过前文问题到的队列,将每个Follower队列中没有被commit的事物以Proposal消息的形式按顺序发送给Follower,并在该Proposal消息后紧跟一个commit,表示该事物已提交。

来看看ZAB协议是如何处理那些被丢弃的事物Proposal的。在事物编号ZXID的设计中,ZXID是一个64位数字,低32位可以看做是一个简单的计数器,高32位代表了Leader周期epoch的编号,每次变更一个Leader,都会在原epoch上加1,这样在就旧的Leader恢复之后,其他Follower就不会听它的了,因为Follower只服从epoch最高的Leader命令。


  • 发表于 2021-03-31 19:48
  • 阅读 ( 37 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
热爱技术的小仓鼠
热爱技术的小仓鼠

230 篇文章

作家榜 »

  1. NX小编 1251 文章
  2. 58沈剑 325 文章
  3. 热爱技术的小仓鼠 230 文章
  4. 奈学教育 154 文章
  5. z老师 131 文章
  6. 五十三 58 文章
  7. 李希沅 | 奈学教育 52 文章
  8. 江帅帅 | 奈学教育 32 文章