美文网首页
Zookeeper-一致性协议ZAB

Zookeeper-一致性协议ZAB

作者: 麦大大吃不胖 | 来源:发表于2020-12-19 15:29 被阅读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挂了

    • 如果每个人都发现了leader挂了,那直接亮出自己的zxid和myid即可快速选出leader
    • 现在只有node3知道
    1. 首先节点间通过3888端口两两通讯
    2. node3分别向node2和node1发起投票,而node2和node1收到后,回绝并自己也发起投票.
    3. 最终node2成为leader

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

    相关文章

      网友评论

          本文标题:Zookeeper-一致性协议ZAB

          本文链接:https://www.haomeiwen.com/subject/qwxxwktx.html