写在前面:
其实ZAB协议是专门为分布式协调服务zookeeper设计的一种支持崩溃恢复的原子广播协议。
进入主题:
1.
zab是zk实现分布式数据一致性的核心算法,zab借鉴paxos算法(paxos之前文章有讲解)
2.
在zk中,主要依赖ZAB协议来实现分布式数据一致性,基于该协议,zk实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。
3.ZAB协议的三个阶段【发现,同步,广播】
- 发现:即要求zookeeper集群必须选择出一个leader进程,同时leader会维护一个follower可用列表。将来客户端可以这follower中的节点进行通信。
- 同步:leader要负责将本身的数据与follower完成同步,做到多副本存储。这样也是体现了CAP中CP(c:一致性,p:分区容错性)。follower将队列中未处理完的请求消费完成后,写入本地事物日志中。
- 广播:leader可以接受客户端新的proposal请求,将新的proposal请求广播给所有的follower。
4.协议核心
ZAB协议的核心是定义了对于那些会改变ZooKeeper服务器数据状态的事务请求处理方式,即:
所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器被称为Leader服务器,而余下的其他服务器称为Follower服务器。Leader服务器负责将一个客户端事务请求转换成一个事务Proposal(提议),并将该Proposal分发给集群中所有的Follower服务器。之后Leader服务器需要等待所有的Follower服务器的反馈,一旦超过半数的Follower服务器进行了正确的反馈后,那么Leader就会再次向所有的Follower服务器分发Commit消息,要求其将前一个Proposal进提交。
5.ZAB协议包含两种基本模式,分别是:
崩溃恢复之数据恢复
- 当整个集群正在启动时,或者当leader节点出现网络中断、崩溃等情况时,ZAB协议就会进入恢复模式并选举产生新的leader,当leader服务器选举出来后,并且集群中有过半的机器和该leader节点完成数据同步后(同步指的是数据同步,用来保证集群中过半的机器能够和leader服务器的数据状态保持一致),ZAB协议就会退出恢复模式。
消息广播之原子广播
- 当集群中已经有过半的Follower节点完成了和Leader状态同步以后,那么整个集群就进入了消息广播模式。这个时候,在Leader节点正常工作时,启动一台新的服务器加入到集群,那这个服务器会直接进入数据恢复模式,和leader节点进行数据同步。同步完成后即可正常对外提供非事务请求的处理。
完毕。