简述 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主要 ...
随机推荐
- SpringBoot Mybatis-Plus 整合 dynamic-datasource-spring-boot-starter 对数据库进行读写分离
准备工作 对 MySql 进行主从搭建 引入 dynamic-datasource-spring-boot-starter 坐标 引入 druid-spring-boot-starter 坐标 对应框 ...
- Linux分类
Linux versions:http://www.cnblogs.com/sammyliu/articles/4832157.html1. Maintained by organization- D ...
- 暑期档追剧指南曝光 HUAWEI nova 2系列再放实用三大招
火辣辣的夏季来啦,每年这时火热的不只天气,还有暑期黄金档影视剧的激烈争夺战.今年有<择天记>收视率珠玉在前,<欢乐颂2>更是引发全民追剧热潮,"小花"赵丽颖 ...
- vs code中Vue代码格式化的问题
个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! VSCode自从更新之后,vue文件的html代码格式化就失效了,而且vu ...
- 通过fiddler抓取IDEA的请求
2019独角兽企业重金招聘Python工程师标准>>> 因为fiddler默认是代理的8888端口,所以设置一下IDEA的请求使用本地的8888作为代理发出. 1."EDI ...
- poj1679 The Unique MST(最小生成树唯一性)
最小生成树的唯一性,部分参考了oi-wiki 如果一条不在最小生成树边集内的边,它可以替换一条在最小生成树边集内,且权值相等的边,那么最小生成树不是唯一的 同过kruskal来判断 考虑权值相等的边, ...
- 编写简单的内核模块及内核源码下载,内核模块Makefile编写
CentOS的内核源码默认是没有下载的,需要自己下载,首先安装linux的时候就应该知道linux的版本,我装的是Centos7的 下面查一下内核的版本,使用下面的命令 [scut_lcw@local ...
- B. Welfare State(RMQ问题的逆向考虑)
\(对于操作1,我们只关心最后一次操作.\) \(对于操作2,我们只关心值最大的一次操作.\) \(也就是说,我们记录每个居民最后一次被修改的位置\) \(然后它的最终答案就是从这个位置起,max(操 ...
- Linux(Ubuntu) MySQL数据库安装与卸载
安装 修改远程访问 卸载 安装 首先检查系统中是否已经安装了MySQL sudo netstat -tap | grep mysql 没有显示已安装结果,则没有安装 如若已安装,可以选择删除.(删除方 ...
- ACM入门问题:最大利益问题
设最大的利益为maxv,最小值为minv 1.求最大利益的简单算法 ;j<=n-;j++) ;i<=j-;i++) maxv =(maxv与R[j]-R[i]中较大的一个) maxv=ma ...