ZOOKEEPER 八月 15, 2020

Zookeeper ZAB协议

文章字数 1.9k 阅读约需 2 mins. 阅读次数 12530

Zookeeper Automic Broadcast(ZAB),即Zookeeper原子性广播,是Paxos经典实现。

ZAB(zookeeper)中节点分四种状态

  • looking:选举Leader的状态(崩溃恢复状态下)
  • following:跟随者(follower)的状态,服从Leader命令
  • leading:当前节点是Leader,负责协调工作。
  • observing:observer(观察者),不参与选举,只读节点。

ZAB中的两个模式

崩溃恢复、消息广播

崩溃恢复

leader挂了,需要选举新的leader

a.每个server都有一张选票<myid,zxid>,如(3,9),选票投自己。

b.每个server投完自己后,再分别投给其他还可用的服务器。如把Server3的(3,9)分别投给Server4和Server5,一次类推

c.比较投票,比较逻辑:优先比较Zxid,Zxid相同时才比较myid。比较Zxid时,大的做leader;比较myid时,小的做leader

d.改变服务器状态(崩溃恢复->数据同步,或者崩溃恢复->消息广播)

消息广播

a.Leader接受请求后,将这个请求赋予全局的唯一64位自增Id(zxid)。

b.将zxid作为议案发给所有follower。

c.所有的follower接受到议案后,想将议案写入硬盘后,马上回复Leader一个ACK(OK)。

d.当Leader接受到合法数量(过半)Acks,Leader给所有follower发送commit命令。

e.follower执行commit命令。

到了这个阶段,ZK集群才正式对外提供服务,并且Leader可以进行消息广播,如果有新节点加入,还需要进行同步。

数据同步

a.取出Leader最大lastZxid(从本地log日志来)

b.找到对应zxid的数据,进行同步(数据同步过程保证所有follower一致)

c.只有满足quorum同步完成,准Leader才能成为真正的Leader

0%