ZooKeeper之ZAB协议
Posted we9999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZooKeeper之ZAB协议相关的知识,希望对你有一定的参考价值。
ZAB协议
Zookeeper的核心是原子广播,这个机制保证了server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,分别是恢复模式和广播模式。当服务启动或者在领导者崩溃后,Zab就进入恢复模式。当领导者被选举出来,且大多数server的完成了和leader的状态同步之后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。
ZAB协议由崩溃(故障)恢复和消息广播组成
事物
在ZAB协议中,每个事物都有一个编号ZXID,ZXID由两部分组成,高32位是epoch,底32位为递增计数器。
- epoch:选举周期
- 计数器:随事物的到来递增
故障恢复(选举和数据恢复)
选举
只需要保证选举出来的leader服务器拥有集群中所有机器最高编码(ZXID最大)的事物proposal,那么就可以保证这个新选举出来的leader一定具有。
数据同步
leader会为每一个follower服务器准备一个队列,将那个没有被各个follower同步的事物以proposal的形式逐个发送给follower服务器,并在proposal后面紧接着发送一个Commit消息,以表示该事物已经被提交,当follower将数据同步完成之后,leader会将follower将数据同步完成之后,leader会将follower加入到真正可以的follower列表中。
故障恢复:算法描述
- 每个follower会将自己最后接收的事物proposal的epoch发送给准leader。
- 准leader在收到所有的epoch中选举一个最大值,在此基础上加一形成新的选举周期,发送给所有的follower。
- follower收到后会更新自己的epoch,并反馈给准leader一个ACK,同时携带历史事物集合。准leader收到所有的follower的历史事物集合之后,会形成初始事物集合。
故障恢复:同步
- 准leader将初始化事物集合发送给集群中所有的follower
- follower收到后对于其中的每一个事物,folllower都会接受,最后将结果反馈给leader,表示已经接受并处理了初始化事物集合中的事物。
- leader收到来自过半的leader的反馈,就会向所有的leader发送commit消息。
消息广播
在leader健在的时候由leader实现
- 发送给集群中的所有follower
- 收到过半的ACK
- 发送commit提交事物
以上是关于ZooKeeper之ZAB协议的主要内容,如果未能解决你的问题,请参考以下文章