书中介绍过,zookeeper所使用的一致性协议与paxos一致性协议还有所不同,paxos一致性协议在未弄懂之前理解与实现比都较复杂,具体可以参考相关资料,这里不并叙述。

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

崩溃恢复模式,当一台leader服务器崩溃了之后,ZAB协议就会进入崩溃恢复模式,在所有的follower服务器中选举一台为leader,当选举了新的leader后,集群中有半数与新的leader完成状态同步后就会退出恢复模式,所谓的状态同步就是数据同步,用来保证过半的follower能与leader保持数据一致,当过半的follower集群与leader数据保持一致了,那么接下来就进行到消息广播模式。

消息广播模式,ZAB协议消息广播过程使用的是一个原子广播协议,类似于一个二阶段提交,但是又有所不同,并非所有follower节点都返回ack才进行一致性事物完成,而是只需要半数以上即可具体一个事物广播流程如下:

      客户端轮询zokeeper集群中各个节点,当轮询到一台是follower,如果是读的请求,follower会返回请求结果,如果是增加修改删除操作,follower会像leader生成事物请求,针对客户端的事物请求,leader会为其生成对应的事物Proposal,然后发送给集群中所有follower服务器,然后分别在收集各自的选票,最后进行事物提交,ZAB协议的二阶段提交过程中移除了了中断提交过程,对zookeeper集群来说,超过半数反馈ack就代表事物成功,这种方式无法完成所有节点事物一致问题,所以ZAB协议采用了崩溃恢复模式来解决数据不一致的问题。另外整个消息广播协议是基于具有FIFO特性的TCP协议进行通讯的,因此能够很容易的保证消息广播过程中的消息接收与发送的顺序性,消息广播模式流程示意图如下:

zookeeper 恢复镜像 zookeeper 崩溃恢复_ZAB协议