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协议的主要内容,如果未能解决你的问题,请参考以下文章