目录
一、什么是Zab协议
二、Zab协议的4个阶段
1、选举阶段(Leader Election)
2、发现阶段(Discovery)
3、同步阶段(Synchronization)
4、广播阶段(Broadcase)
一、什么是Zab协议
ZAB协议,全称 Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。它是专门为分布式协调服务——Zookeeper,设计的一种支持崩溃恢复和原子广播的协议。
当leader崩溃或者集群中参与选票的个数不足一半,表示整个集群对外服务不可用,需要进行崩溃恢复。
从设计上看,ZAB协议和 Raft 很类似。ZooKeeper集群中,只有一个Leader节点,其余均为Follower节点。
二、Zab协议的4个阶段
1、选举阶段(Leader Election)
在集群选举开始时,所有节点都处于选举当某一个节点的票数超过半数节点后,该节点将被推选为准Leader。
选举段是产生一个准Leader。只有到达广播阶段(Broadcast)后,准 Leader 才会成为新
Leader。
2、发现阶段(Discovery)
在发现阶段,各个 Follower 开始和准 Leader 进行同步 Follower 最近接收的事务提议。这时,准 Leader 会产生一个新的 Epoch,并尝其他 Follower 接收该 Epoch 后再更新到本地。
发现阶段的一个 Follower只会连接 Leader,如果节点1认为节点2是Leader,则当节点1尝试连接节点2时,如果连接拒绝,则集群会进人重新选举阶段。发现阶段的主要目的是发现当前大多数节点接收最新提议。
3、同步阶段(Synchronization)
同步阶段主要是将 Leader 在前一阶段获得的最提议信息同步到集群中所有的副本,只有当半数以上的节点都同步完成时,准 Leader会成为真正的 Leader。
Follower 只会接收 Zxid 比自己的 lastZxid 大的提议。同步阶段完成后集群选主的操作才完成,新的Leader将产生
4、广播阶段(Broadcase)
到了这个阶段,Zookeeper集群才会正式对外提供事务服务,并且Leaderkk可以进行消息广播。同时只要有新的节点加入,还需要对新的节点进行同步。
需要注意的是,ZAB提交事务并不像2PC一样需要全部Follower都返回ACK,只需要得到超过半数的节点的ACK就可以了。