Zookeeper中的FastLeaderElection选举算法简述
Zookeeper是一个开源的分布式应用协调项目, 当中为了保证各节点的协同工作,Zookeeper在工作时须要有一个Leader。 而Leader是怎样被选举出来的?Zookeep中使用的缺省算法称为FastLeaderElection。
Zookeeper的基本前提是多个节点都具备全局其他全部节点的基本信息(IP/port/SID),而SID是节点的唯一编号。
正常工作时”从节点“会从“主节点”(Leader)同步版本号信息,称为zxid。
一旦整个系统重新启动或某部分节点(特殊是Leader)重新启动时。就须要又一次选举Leader。
Leader选举算法的核心就是不论什么节点都与其他节点交换信息(通过tcp连接)。通过一系列迭代,终于确定某一个受到大多数(>N/2)节点推荐的Leader。
所谓推荐是依据zxid(优先)和sid值更大则推荐之。
节点启动时,先是推荐自己,然后与其他全部节点尝试建立连接。Zookeeper保证两个节点仅仅保持一个tcp连接,由于tcp连接是双工的,全部一个连接足矣。全部的节点间通信能够理解成为异步方式。节点在发送信息给其他节点时无需等待对方处理结果,这与类似http的request/response模式是不同的。
本节点在选举阶段(Looking状态)维持有一个推荐Leader节点(初始值是自己)。之后便是进入循环,就是接收全部不论什么其他节点的信息(如: SID/zxid/推荐Leader节点)。然后依据这些信息调整本节点保持的”推荐Leader节点“,一旦该值发生变化。即发送该信息给全部其他节点(广播),该循环会持续到自己或其他节点确定出Leader,即上面提到的受到大多数节点推荐的即为Leader。
进一步思考:感觉这样的算法在节点数非常多的情况下会有非常多的消息交互, 如果是N个节点,最坏的情况下,一个节点要经过N-1次迭代(推荐Leader节点有变化),每次迭次要发N-1个消息, 所以发送消息达N-1的平方。
不知我的理解是否正确。希望有高手指正。
Zookeeper中的FastLeaderElection选举算法简述的更多相关文章
- 【原创】大数据基础之Zookeeper(3)选举算法
提到zookeeper选举算法,就不得不提Paxos算法,因为zookeeper选举算法是Paxos算法的一个变种: Paxos要解决的问题是:在一个分布式网络环境中有众多的参与者,但是每个参与者都不 ...
- zookeeper系列之五—Leader选举算法
leader选举算法 zookeeper server内部原理 zookeeper client
- Zookeeper选举算法原理
Zookeeper选举算法原理 Leader选举 Leader选举是保证分布式数据一致性的关键所在.当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举. (1) 服 ...
- 转载:深入浅出Zookeeper(一) Zookeeper架构及FastLeaderElection机制
转载至 http://www.jasongj.com/zookeeper/fastleaderelection/: 原创文章,转载请务必将下面这段话置于文章开头处.本文转发自技术世界,原文链接 htt ...
- ZK的选举算法
一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概 ...
- hadoop系列:zookeeper(2)——zookeeper核心原理(选举)
1.前述 上篇文章<hadoop系列:zookeeper(1)--zookeeper单点和集群安装>(http://blog.csdn.net/yinwenjie/article/deta ...
- Zookeeper架构及FastLeaderElection机制
原文链接:http://www.jasongj.com/zookeeper/fastleaderelection/ Zookeeper是什么 Zookeeper是一个分布式协调服务,可用于服务发现,分 ...
- Leader Election 选举算法
今天讲一讲分布式系统中必不可少的选举算法. leader 就是一堆服务器中的协调者,某一个时刻只能有一个leader且所有服务器都承认这个leader. leader election就是在一组进程中 ...
- 学习Leader选举算法
读书笔记:<从Paxos到Zookeeper 分布式一致性原理与实践> 选举的前提约定 观察者不参与选举,只有跟随者才参与选举. 优先选事务ID(ZXID)大的,事务Id相同再优先选服务器 ...
随机推荐
- C++派生类继承父类修饰符
公式: 继承成员对外的访问属性 = Max{继承方式,父类成员访问级别}: 1.如果子类从父类继承时使用的继承限定符是public,那么(1)父类的public成员成为子类的public成员,允许类以 ...
- HTML习题附答案
第一章 1.HTML指的是( A ). A超文本标记语言(Hyper Text Markup Language) B家庭工具标记语言(Home Tool Markup Language) C超 ...
- 连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
MySQL新版默认使用caching_sha2_password作为身份验证插件,而旧版是使用mysql_native_password.当连接MySQL时报错“plugin caching_sha2 ...
- ajax从入门到深入精通
前言 ajax全称Asynchronous Javascript and XML.其中Asynchronous代表异步.同步于异步是描述通信模式的概念,同步机制:发送方发生请求后,需要等待接收到接收方 ...
- 纯css实现同一页面下选择之后更换内容效果
实现效果为如下:在同一页面下,当我选中输入手机号时,出现手机号输入框,当我选中输入验证码时,出现验证码输入框,当我选中设置密码时,出现密码框 在这里有一个小技巧,就是 1.对下面的输入框设置同样的样 ...
- centos7.x设置静态IP
本教程以centOs7.4为例: 1.点击虚拟机的[编辑]选项,选择[虚拟网络编辑器] 2.选择[VMnet8],然后点击[NAT设置] 3.记录[子网掩码]和[网关IP],后面会用到 4.进入终端, ...
- RPM Package Manager
本文大部分内容来自鸟哥的Linux私房菜,并且由作者根据自己的学习情况做了一些更改,鸟哥原文链接 1. 程序的安装方式 源代码安装:利用厂商释出的Tarball 来进行软件的安装,每次安装程序都需要检 ...
- 几个非常实用的JQuery代码片段
jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多).jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用). ...
- 第四天,for循环,格式化输出,占位符,pycharm安装.列表处理
字符格式化输出 占位符 %s s = string %d d = digit 整数 %f f = float 浮点数,约等于小数 列表,元组 查 索引(下标) ,都是从0开始 切片 .count 查某 ...
- Python 模块学习(一)
一.时间模块 import time # 模块调用语句 注意:模块级导入一般放在文件顶部 import datetime print(time.time()) # 1550411181.441547: ...