Zookeeper-一致性协议ZAB

2020-12-19  本文已影响0人  麦大大吃不胖

by shihang.mai

1. 概念

ZAB是zookeeper原子广播意思,并且它paxos协议的变种,关于paxos参考博客

https://www.cnblogs.com/syq816/p/12465991.html

2. 协议详解

2.1 leader存在

zookeeper的ZAB
  1. Client连接follower,发送create ooxx节点
  2. follower转发到leader
  3. leader事务id递增,zxid=8
  4. leader维护每个follower的一个队列,通过广播方式向队列中发送一个"创建节点的log"
  5. follower写日志到磁盘,返回一个ok给leader。(某些follower可能存在网络波动,延迟返回ok)
  6. 如上图一个follower和leader已经ok(leader自身一票),过半了,那么再次通过广播方式向队列中发送一个"write",write意思是叫follower向自身内存创建节点
  7. follower在自身内存创建节点,返回ok给leader.(所有follower最终一直性)
  8. leader返回给发出请求的follower一个over-ok,follower再返回给Client ok

2.2 leader不存在

新leader选择方式依据以下原则

  1. zxid最大的
  2. 当zxid一样,选择myid最大的

2.2.1 第一次启动集群

zk集群-第一次启动选leader
  1. 4台机器,过半就是3台
  2. 无论哪3台机器启动,必须等到第3台启动,建立了两两连接,它们才可以将票投出去,选leader。
  3. 例如启动node1,node2,node4,那么4当选leader。zxid一样,myid大当选

2.2.2 leader挂了,重启集群

zk集群-重选leader或重启集群

原leader,node4挂了

  1. 首先节点间通过3888端口两两通讯
  2. node3分别向node2和node1发起投票,而node2和node1收到后,回绝并自己也发起投票.
  3. 最终node2成为leader

只要任何人发生投票,都会触发那个准leader发起自己的投票

上一篇下一篇

猜你喜欢

热点阅读