ZAB协议

主要流程

  ZAB协议主要分为三部分:Leader选举、数据同步和消息广播,其中Leader选举和数据同步属于崩溃恢复模式,消息广播属于消息广播模式,如下图所示。
这里写图片描述

Leader选举

触发时机

  1. 服务端集群启动;
  2. Leader宕机或重启;
  3. 网络异常;Leader与多半机器心跳异常后会自动降级,重新选举;Follower与Leader心跳异常后,重新选举;

数据同步

目的

  保障集群中过半的机器与Leader服务器的数据一致;

触发时机

  1. 新Leader产生;
  2. Follower新增、重启或网络异常等;

同步分类

  1. DIFF同步,当minCommittedLog < peerLastZxid < minCommittedLog,且peerLastZxid事务在Leader存在时触发;
  2. TRUNC+DIFF同步,当minCommittedLog < peerLastZxid < minCommittedLog,但peerLastZxid事务在Leader不存在时触发;
  3. TRUNC同步,当peerLastZxid > maxCommittedLog时触发;
  4. SNAP同步,当peerLastZxid < minCommittedLog或新增Follower时触发;

消息广播

  简化的二阶段提交,Leader先接受所有的写请求,封装成事务,然后广播给其它机器,过程如下图所示:
这里写图片描述

阶段一:事务执行

  Leader广播Proposal到所有的Follower,Follower要么接受Proposal返回ACK,要么抛弃Proposal,如果Leader收到的ACK过半则进入阶段二;

阶段二:事务提交

  Leader广播Commit消息到所有的Follower,且自身完成事务的提交;

ZAB协议 VS Paxos协议

  与Paxos协议相比,ZAB协议增加了“数据同步”逻辑,确保主备架构下的数据一致性,Leader选举和消息广播思想与Paxos相同。

参考:

  1. https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos

猜你喜欢

转载自blog.csdn.net/yangguosb/article/details/80253834