码迷,mamicode.com
首页 > 其他好文 > 详细

Zookeeper ZAB协议

时间:2020-06-20 14:07:33      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:设计   二进制   技术   删除   全局   崩溃恢复   基于   概述   ase   

一、概述

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协议

标签:设计   二进制   技术   删除   全局   崩溃恢复   基于   概述   ase   

原文地址:https://www.cnblogs.com/alen-apple/p/13168224.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!