简述 zookeeper 基于 Zab 协议实现选主及事务提交
Zab 协议:zookeeper 基于 Paxos 协议的改进协议 zookeeper atomic broadcast 原子广播协议。
zookeeper 基于 Zab 协议实现选主及事务提交。
一、为什么需要选主?
选主是复杂分布式服务的一个特有机制,旨在保障系统数据的一致性。
分布式服务一般对于数据的存储形式是:每个节点都保存全量数据,每个节点都可以对外提供“一致”的服务,这就涉及到不同节点间的数据同步。
我们所说的可能的数据不一致主要是由数据变更过程引发,因为它涉及服务内所有节点的数据更新。对于 zookeeper, 选主便是保障服务内数据变更触发,控制及变更后服务各节点数据的一致性的一个重要环节。
二、怎么选主?
zookeeper 集群内节点通常处于以下几种状态:
1、LEADING:
也就是我们所说的领导者所处的状态,领导者负责处理接收到的数据变更请求及将变更同步到各个从节点。此处需要注意的是,即使变更数据请求发送到了从节点,从节点也会将其转发到主节点。
2、FOLLOWING:
通常情况下从节点所处的状态,从节点主要负责读请求处理及参与集群投票,选举。
3、LOOKING:
是一种选主过程中的特有状态,当前服务无主节点时,则所有节点切换为 LOOKING 状态,遵循 Zab 协议,相互通信以选举出主节点。过程完成,则转换到相应的 LEADING 或者 FOLLOWING 状态。
选主过程发生在服务初始启动及运行过程中主节点故障两种情景下。在正式介绍选主过程之前,先就几个涉及到的名词作简要概述:
1、法定数量:
设定的为了确定协议一致性结果,必须有多少参与方意见达成一致。主要用于确认服务可用或失败、确认数据更新事务成功等。
2、领导者选举通知:
选主过程中,各节点间进行通信的消息。主要包括两部分,一个是节点自身的标识sid,会随着每次重启自增;另一个是 zookeeper 事务id,简称 zxid,标识对 zookeeper 的操作指令顺序、大小(遵循 happend before 原则)。
选主过程:
1、服务内的每个节点向其它节点发出自己的投票信息(sid,zxid),如下图:

Node1 接收到 Node2 发送的选举信息,会对比自己的投票信息,当 (zxid1 > zxid2 || zxid1 == zxid2 && sid1 > sid2) 则保持自己的信息 sid 及 zxid 不变,否则的话则将自身的 sid 及 zxid 更新为 Node2 的 sid 和 zxid。
2、当服务内某个节点获得了超过法定人数的投票,则选主结束。
主节点进入 LEADING 状态,其它节点进入 FOLLOWING 状态,同时开始发起数据同步(从节点在同步数据前无法对外提供服务)。
三、关于事务提交
Zab 协议包含两种模式:恢复模式及广播模式。
前面我们提到过恢复模式下的应用,服务初始及主节点故障情况下的领导者选举,恢复模式结束于领导者被选出及超过法定数量的从节点数据达到同步。
主节点负责处理写请求及发送广播消息,且需要说明的是,广播模式下只有主节点可以发送广播消息,如果某个从节点需要发送广播信息,也需要通过主节点进行。
主节点基于Zab协议协商完成写变更事务提交:
1、主节点广播发送事务提交提议

2、从节点接收到提议后,回复确认信息通知主节点

3、主节点接收到超过法定数量从节点确认信息后,广播发送事务提交命令到从节点

zookeeper 服务实现中很重要的一点:顺序性。顺序请求,顺序响应;主节点事务顺序提交,从节点按顺序响应事务等等。
简述 zookeeper 基于 Zab 协议实现选主及事务提交的更多相关文章
- ZooKeeper之ZAB协议
ZooKeeper为高可用的一致性协调框架,自然的ZooKeeper也有着一致性算法的实现,ZooKeeper使用的是ZAB协议作为数据一致性的算法,ZAB(ZooKeeper Atomic Broa ...
- zookeeper的ZAB协议
ZAB协议概述 ZooKeeper并没有完全采用Paxos算法,而是使用了一种称为ZooKeeper Atomic Broadcast(ZAB,zookeeper原子消息广播协议)的协议作为其数据一致 ...
- 三:ZooKeeper的ZAB协议
一:ZAB协议概述--->ZooKeeper并没有完全采用Paxos算法,而是使用了一种称为ZooKeeper Atomic Broadcast(ZAB,zookeeper原子消息广播协议)的协 ...
- 2. ZooKeeper的ZAB协议。
转自:https://blog.csdn.net/en_joker/article/details/78662880 ZooKeeper并没有完全采用Paxos算法,而是使用了一种称为ZooKeepe ...
- 【5】Zookeeper的ZAB协议
一.ZAB协议(原子消息广播协议) ZAB(Zookeeper Atomic Broadcast)协议是Zookeeper用来保证其数据一致性的核心算法,是一种支持崩溃恢复的原子广播协议.基于此协 ...
- ZooKeeper和ZAB协议
前言 ZooKeeper是一个提供高可用,一致性,高性能的保证读写顺序的存储系统.ZAB协议为ZooKeeper专门设计的一种支持数据一致性的原子广播协议. 演示环境 $ uname -a Darwi ...
- zookeeper核心-zab协议-《每日五分钟搞定大数据》
上篇文章<paxos与一致性>说到zab是在paxos的基础上做了重要的改造,解决了一系列的问题,这一篇我们就来说下这个zab. zab协议的全称是ZooKeeper Atomic Bro ...
- 分布式专题(二)——Zookeeper的ZAB协议介绍
- 搞懂分布式技术4:ZAB协议概述与选主流程详解
搞懂分布式技术4:ZAB协议概述与选主流程详解 ZAB协议 ZAB(Zookeeper Atomic Broadcast)协议是专门为zookeeper实现分布式协调功能而设计.zookeeper主要 ...
随机推荐
- IDEA 之 ERROR:端口被占用
问题描述:在IDEA启动javaweb项目中未能成功启动,ERROR:端口已经被使用.但是tomcat并没有被启动. 解决方法: 打开CMD 输入以下命令 netstat -aon | finfstr ...
- 微软宣布一批新获得Microsoft Teams认证的会议硬件
COVID-19 疾病流行期间,微软见到了 Microsoft Teams 视频会议解决方案取得的巨大增长.然而在许多情况下,生产力与音视频硬件的质量息息相关.好消息是,该公司刚刚完成了一批第三方硬件 ...
- 【Linux网络基础】 DNS:介绍、作用、解析原理
1. DNS是什么? DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去+·记住能够被机器直接读 ...
- linux下编译boost的多线程程序
linux下面用boost库进行多线程编程,一开始总是编译不成功,花了好多的时间. 下面是一段小示例代码: //start from the very beginning,and to create ...
- web安全笔记
判断网站是否伪静态 把.html后缀即可或者加.php?id=99 例子:33_99.html 去掉.html和_变成33.php?id=99 即可判断是否伪静态 判断网站是否在win或者linu ...
- 再谈 PHP 未来之路
前段时间我写过一篇博文<phper:敢问路在何方>,分析了 PHPer 的困境以及 PHP 程序员的学习.进阶突破之路.同时我在知乎上也发过类似的提问.从大家的评论和回答看,大体分为以下几 ...
- [蓝桥杯2018初赛]小朋友崇拜圈(dfs找环)
传送门 思路: 题意大意:n条有向边,找出最大环. 我们发现,如果一个小朋友没有被任何人崇拜,那么他一定不位于环中.为此我们可以设置一个indug数组预处理.如果2被崇拜了那么indug[2]就加加, ...
- F - Watching Fireworks is Fun
C. Watching Fireworks is Fun 题目大意: 一个城镇有n个区域,从左到右1-n,每个区域之间距离1个单位距离.节日中有m个烟火要放,给定放的地点a[ i ].时间t[ i ] ...
- 面试官:小伙子,听说你看过ThreadLocal源码?(万字图文深度解析ThreadLocal)
前言 Ym8V9H.png (高清无损原图.pdf关注公众号后回复 ThreadLocal 获取,文末有公众号链接) 前几天写了一篇AQS相关的文章:我画了35张图就是为了让你深入 AQS,反响不错, ...
- Coursera课程笔记----计算导论与C语言基础----Week 2
计算机的历史与未来(Week 2) 计算机历史 早期计算机:手工计算器➡️机械计算器➡️计算机原型 现代计算机:电子管计算机➡️晶体管计算机➡️集成电路计算机➡️超大规模集成电路 早期的手工计算辅助工 ...