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决定

 

四、PAXOS算法

上述翻译如下:

在一个集群中,所有节点决定是否执行某个操作;节点之间通过网络进行通信,而节点在收到请求之后会将请求记录到本地日志上。

问题在于这个过程中不保证网络的稳定性以及节点的稳定性。如何保证执行选举投票过程正常进行且保证选举投票的结果有效性?

PAXOS算法实际上解决了在不稳定集群汇总的数据有效性和一致性问题

 

posted @ 2020-06-20 12:07  alen-fly  阅读(192)  评论(0编辑  收藏  举报