主要流程
ZAB协议主要分为三部分:Leader选举、数据同步和消息广播,其中Leader选举和数据同步属于崩溃恢复模式,消息广播属于消息广播模式,如下图所示。
Leader选举
触发时机
- 服务端集群启动;
- Leader宕机或重启;
- 网络异常;Leader与多半机器心跳异常后会自动降级,重新选举;Follower与Leader心跳异常后,重新选举;
数据同步
目的
保障集群中过半的机器与Leader服务器的数据一致;
触发时机
- 新Leader产生;
- Follower新增、重启或网络异常等;
同步分类
- DIFF同步,当minCommittedLog < peerLastZxid < minCommittedLog,且peerLastZxid事务在Leader存在时触发;
- TRUNC+DIFF同步,当minCommittedLog < peerLastZxid < minCommittedLog,但peerLastZxid事务在Leader不存在时触发;
- TRUNC同步,当peerLastZxid > maxCommittedLog时触发;
- SNAP同步,当peerLastZxid < minCommittedLog或新增Follower时触发;
消息广播
简化的二阶段提交,Leader先接受所有的写请求,封装成事务,然后广播给其它机器,过程如下图所示:
阶段一:事务执行
Leader广播Proposal到所有的Follower,Follower要么接受Proposal返回ACK,要么抛弃Proposal,如果Leader收到的ACK过半则进入阶段二;
阶段二:事务提交
Leader广播Commit消息到所有的Follower,且自身完成事务的提交;
ZAB协议 VS Paxos协议
与Paxos协议相比,ZAB协议增加了“数据同步”逻辑,确保主备架构下的数据一致性,Leader选举和消息广播思想与Paxos相同。
参考: