前言
在Zookeeper集群中,客户端会随机连接到Zookeeper集群中 的一个节点。如果是读请求,就直接从当前节点中读取数据,如果是写请求,那么请求先会被转发给leader提交事务。然后leader再广播事务,只要有超过半数节点写入成功, 那么写请求就会被提交(类2PC事务)。整个过程如下图所示:
整套数据同步机制是通过ZAB
协议实现的,下面我们重点了解一下ZAB
协议的实现原理。
ZAB
协议简介
ZAB
(Zookeeper Atomic Broadcast) 协议是为Zookeeper专门设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖ZAB
协议来实现 分布式数据一致性。ZAB
协议包含两种基本模式,分别是崩溃恢复和消息广播。
当整个集群在启动时,或者当leader
节点出现网络中断、 崩溃等情况时,ZAB
协议就会进入恢复模式并选举产生新的leader
,当leader
服务器选举出来后,并且集群中有过半的机器和该leader
节点完成数据同步后(同步指的是数据同步,用来保证集群中过半的机器能够和 leader
服务器的数据状态保持一致),ZAB
协议就会退出恢复