Zookeeper ZAB协议

Posted alen-apple

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper ZAB协议相关的知识,希望对你有一定的参考价值。

一、概述

1.ZAB(Zookeeper Atomic Broadcast) 是专门为Zookeeper设计的一套广播协议

2.这个协议底层基于2PC算法进行设计,利用PAXOS算法进行改进

3.作用:原子广播和崩溃恢复

 

二、原子广播

1.原子广播主要保证Zookeeper集群中的所有节点的数据一致性

2.原子广播基于 2PC 算法来进行设计的

3. 2PC - 2 Phase Commit -> 二阶段提交 - 核心思想“一票否决”:

  a.第一个阶段:确认阶段,协调者收到请求之后,将请求转发给每一个参与者,等待参与者的反馈

  b.第二个阶段:提交阶段,如果所有的参与者都返回yes,那么协调者就会给参与者发布指令执行这个请求,并且

  协调者会给客户端返回成功信号

  c.中止阶段:如果协调者收到参与者返回no,或者没有收到所有参与者的yes,那么会要求所有参与者删除该操作的    同时,会给客户端返回失败信号

4.如果某个节点记录一个操作失败,但是整个集群又决定执行这个操作,那么这个时候,follower会给leader发送请求,然后leader会将该操作再次发给follower重新记录,在follower重新记录期间,不参与投票

5.流程: 写操作,通过 leader 进入

技术图片

  

三、崩溃恢复

1.当整个集群中的leader丢失的时候,集群会自动选举出一个新的leader,那么这个过程称之为“崩溃恢复”

2.每一个leader被选举出来之后,都会被分配一个全局递增的编号-epochid,当leader选举出来之后,将epochid分发给每一个follower,同时如果出现了两个leader,那么这个时候Zookeeper自动kill掉epochid比较小的leader保证整个集群中只有一个leader,同时被kill掉的leader会转为follower

3.事务id是64位二进制数字组成,其中高32位表示的是epochid,低32位才是真正的事务id

  例如:cZxid = 0x500000001 -> 0x5 是高32位,00000001 -> 是低32位(8进制展现 如:00000001) 

4.每更换一次leader,就会产生一个新的log以及snapshot文件,文件存放位置由 zoo.cfg中dataDir决定

以上是关于Zookeeper ZAB协议的主要内容,如果未能解决你的问题,请参考以下文章

zookeeper中的ZAB协议理解

Zookeeper的ZAB协议

Zookeeper之Zab协议

zookeeper(16)源码分析-ZAB协议

Zookeeper--09---Zookeeper集群 ZAB协议

Zookeeper深入原理(3) - Zab协议