文档章节

Zookeeper核心选举算法和ZAB协议

selfless
 selfless
发布于 2017/02/14 18:31
字数 557
阅读 44
收藏 0
点赞 0
评论 0

Leader选举算法

首先要区分集群机器角色:

  1. Leader,
  • 事务请求的唯一调度和处理者、保证事务有序性
  • 集群内部各个服务器的调度者
  1. Follower
  • 处理非事务请求
  • 参与事务投票和leader选举投票
  1. Observer
  • 处理非事务请求
  • 不参与投票

选举算法名称叫:FastLeaderElection,Leader的选举产生在两个时间段

  1. 服务器启动

服务器启动的时候,若只有一台机器,则不选举leader,若两台机器,广播自己的ZXID和MYID,所有机器根据ZXID和MYID来判断:

  • ZXID越大,则首先选择为Leader
  • MYID越大,则首先选择为Leader

收到投票大于等于半数(n/2+1)

例如:两台server,分别是:server1, myid=1, zxid=0;server2, myid=2, zxid=0; 选举,server2加入的时候,广播(2,0),server1拿到(2,0)对比自己的(1,0),广播(2,0),都收到(2,0),判断大于半数,选举结束。

  1. 运行期间选举Leader

一般是Leader机器挂了,所有Follower机器变更状态为LOOKING,广播自己的ZXID和MYID。处理、广播、统计

leader搜集统计,过半之后,将自己设置为LEADING状态,其他机器同步状态。

ZAB协议

事务有全局唯一的服务器即leader来处理,leader将事务抓化为proposal分发给follower,等待follower反馈,超过半数,leader发送commit信息,将proposal提交。

  1. 崩溃恢复
  • ZAB保证Leader上提交的事务,所有Follower机器都能提交
  • ZAB保证丢弃只在Leader服务器上提出的事务

完成leader选举之后,leader需要确保日志中所有的Proposal在过半机器上已经提交

  1. 消息广播

二阶段提交协议,发送proposal,等待ack,然后超过半数后,发送commit,提交事务

其他

常用四字命令:

测试服务器启动状态:echo ruok | nc localhost 2181

查看服务器详细统计:echo mntr | nc localhost 2181

查看服务器角色状态:echo stat | nc localhost 2181

查看服务器自身状态:echo srvr | nc localhost 2181

查看服务器配置信息:echo conf | nc localhost 2181

© 著作权归作者所有

共有 人打赏支持
selfless
粉丝 24
博文 26
码字总数 21597
作品 0
海淀
程序员
ZooKeeper学习笔记三 ZooKeeper与Paxos

本文学习内容来自: 《从Paxos到ZooKeeper分布式一致性原理与实践》 电子工业出版社 Apache ZooKeeper是由Apache Hadoop的子项目发展而来,于2010年11月正式成为了Apache的顶级项目。ZooKeep...

xundh ⋅ 04/27 ⋅ 0

Zookeeper笔记3——原理及其安装使用

Zookeeper到底能干什么? 1.配置管理:这个好理解。分布式系统都有好多机器,Zookeeper提供了这样的一种服务:一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴...

狂小白 ⋅ 01/25 ⋅ 0

ZooKeeper的原理(转)

一、ZooKeeper的角色 领导者(Leader),负责进行投票的发起和决议,更新系统状态。 学习者(Learner),包括跟随者(Follower)和观察者(Observer),Follower用于接受客户端请求并想客户端...

easonjim ⋅ 2017/09/05 ⋅ 0

三、Zookeeper的原理和详解

1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行...

xp_zyl ⋅ 04/13 ⋅ 0

阿里大数据攻城师教你怎样理解ZooKeeper(六)

Zookeeper是什么 是一个针对大型分布式系统的可靠协调系统; 提供的功能包括:配置维护、名字服务、分布式同步、组服务等; 目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效...

JAVA丶学习 ⋅ 04/13 ⋅ 0

深入理解Zookeeper系列(1):ZAB协议

1. 关于Zookeper ZooKeeper是一个集中服务,用于维护配置信息,命名,提供分布式同步和提供组服务。 所有这些类型的服务都以某种形式被分布式应用程序使用。 每次实施服务时,都会有很多工作...

maskwang520 ⋅ 05/12 ⋅ 0

zookeeper的应用和原理介绍,分享好文

来源:https://blog.csdn.net/gs80140/article/details/51496925 场景一 有这样一个场景:系统中有大约100w的用户,每个用户平 均有3个邮箱账号,每隔5分钟,每个邮箱账需要收取100封邮件,最...

xudongt ⋅ 06/13 ⋅ 0

分析Zookeeper的一致性原理

zookeeper(简称zk),顾名思义,为动物园管理员的意思,动物对应服务节点,zk是这些节点的管理者。在分布式场景中,zk的应用非常广泛,如:数据发布/订阅、命名服务、配置中心、分布式锁、集...

憬薇 ⋅ 04/13 ⋅ 0

Zookeeper笔记1-CAP/BASE理论

分布式系统八大谬论: 1.网络相当可靠 2.延迟为0 3.传输带宽是无限的 4.网络相当安全。 5.拓扑结构不会改变 6.必须要有一名管理员 7.传输成本为0 8.网络同质化。 分布式最常出现的问题: 1....

狂小白 ⋅ 01/23 ⋅ 0

ZooKeeper可以用来做什么(转)

在ZooKeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing grou......

easonjim ⋅ 2017/09/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android JNI 读写Bitmap的方法

Java层创建Bitmap,通过JNI将Bitmap传到C/C++进行处理 Java部分 public static native boolean greenBitmap(Bitmap bitmap); C/C++部分 JNIEXPORT jboolean JNICALL Java_com_test_Test_gree......

国仔饼 ⋅ 12分钟前 ⋅ 0

一次性让你懂async/await,解决回调地狱

什么是async? 欢迎留言讨论 async 函数是 Generator 函数的语法糖。使用 关键字 async 来表示,在函数内部使用 await 来表示异步。相较于 Generator,async 函数的改进在于下面四点: 内置执...

阿K1225 ⋅ 12分钟前 ⋅ 0

angular常用命令

.下载更新操作 1.利用npm下载angular的命令行工具AngularCLI: npm install -g @angular/cli 2.下载jquery: npm install --save jquery 3.更新npm: npm i -g npm 4.更新angular: ng update ......

消散了的诗意 ⋅ 14分钟前 ⋅ 0

window.print 页面打印

定义和用法 print() 方法用于打印当前窗口的内容。 语法 window.print(); window.print() 实际上,是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型...

初学者的优化 ⋅ 15分钟前 ⋅ 0

魔兽世界 7.0版本上 PVE装备全攻略

  T套 因为大家应该都会打穿副本的所以具体是哪个boss我就不说了。   T1: 所有套装都在【熔火之心】出   T2: 头原来是在【奥妮克希亚的巢穴】改到黑翼之巢的奈法利安了,腿是在【熔火之...

wangchen1999 ⋅ 15分钟前 ⋅ 0

java.math.BigDecimal使用小结

原文地址 java.math.BigDecimal使用小结 divide方法 使用BigDecimal.divide方法时一定要考虑: 除数是否为0 商是否是无限小数 正确的使用方式 判断除数是否为0,是0做另外的处理逻辑 调用除法...

666B ⋅ 18分钟前 ⋅ 0

关于qstring转char乱码问题。

if (OpenClipboard(NULL)) { HGLOBAL hgClip; EmptyClipboard(); QByteArray byay = FValue.toLocal8Bit(); //转latin编码 char *bochsrc_line = byay.data(); hgClip = GlobalAlloc(GMEM_DD......

backtrackx ⋅ 18分钟前 ⋅ 0

了解SSH加密和连接过程

介绍 SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,对彼此进行身份验证,以及来回传递命令和...

吴伟祥 ⋅ 25分钟前 ⋅ 0

微信小程序

小程序的基础配置:导航栏和tabbar 在app.json文件中配置导航栏和tabrbar 导航栏的设置 设置导航,背景黑色,文字白色,文字内容 { "pages":[ "pages/index/index", "pages/logs/l...

上官清偌 ⋅ 28分钟前 ⋅ 0

【转】百度坐标坐标系之间的转换(JS版代码)

/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 *///定义一些常量var x_PI = 3.1415926535897932...

HAVENT ⋅ 30分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部