简述 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主要 ...
随机推荐
- java 设计模式-责任链
责任链设计模式,其实就是处理同一个请求的对象连接成一条链,请求的路径经过这条链,符合要求的就处理这个请求,不符合就接着往下面抛出,直道有人处理这条请求. 业务:比如啊,公司个人请假,三天以下就是主管审 ...
- HDU1873 看病要排队【模拟+优先队列】
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 小老板,我学的计算机组成原理告诉我半导体存储器都是断电后丢失的,为什么U盘SSD(固态硬盘)没事呢?
什么是闪存: 快闪存储器(英语:flash memory),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器 存储原理 要讲解闪存的存储原理,还是要从EPROM和EEPROM ...
- STL部分学习总结
一.map/multimap map/multimap映射容器的元素数据是由一个Key和一个Value成的,key与映照value之间具有一一映照的关系. map/multimap容器的数据结构也采用 ...
- ansible roles 自动化安装
例: ansible roles 自动化安装memcached 文件目录结构如下: cat memcached_role.yml - hosts: memcached remote_user: ro ...
- python sort和sorted的区别
sort 与 sorted 区别: sort 是应用在 list 上的方法,使用方法为 list.sort(),是对原有列表进行操作,改变原有列表的排序: sorted 可以对所有可迭代的对象进行排序 ...
- 从excel表格加载数据返回DataSet
添加命名空间:using System.Data.OleDb; /// <summary> /// 从excel表格加载数据返回DataSet /// </summary> / ...
- 创造DotNet Core轻量级框架【二】
上一篇 创造DotNet Core轻量级框架[一] 10 题外话 上一篇文章感谢大家提出的各种小建议和各种讨论,但是在写文章的时候框架最最最基础的样子已经做出来了,所以大家的各种建议和意见我会在后续逐 ...
- 使用RSS订阅喜欢的微博博主
获取uid方法:进入博主微博主页,使用控制台执行 /uid=(\d+)/. exec(document.querySelector('.opt_box .btn_bed').getAttribute( ...
- Coursera课程笔记----C程序设计进阶----Week 4
指针(一) (Week 4) 什么是"指针" 互联网上的资源--地址 当获得一个地址,就能得到该地址对应的资源,所以可以把"网址"称为指向资源的"指针 ...