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相同再优先选服务器 ...
随机推荐
- 安卓adb在拨号键盘上输入井号(#)
安卓系统下由于#号是属于内定字符,需要转义为%23第一种方式:adb shell service call phone 1 s16 "%23"第二种方式:adb shell am ...
- JS动态添加元素的事件动态绑定
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Hash冲突的几种解决方法
1. 开放定值法: 也叫再散列法,当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突 ...
- js多维数组扁平化
数组扁平化,就是将多维数组碾平为一维数组,方便使用. 一:例如,一个二维数组 var arr = ['a', ['b', 2], ['c', 3, 'x']],将其扁平化: 1. 通过 apply ...
- The Coco-Cola Store
UVA11877 The Coco-Cola Store Once upon a time, there is a special coco-cola store. If you return thr ...
- CTSC1998 选课(背包类树形Dp)
题意: 给出 n 节课的先修课号以及学分(先修课号指的是在学习某节课时先需要学习的课程),求学 m 节课的最大学分. 细节: 1.对于课程 a 其先修课号为 b ,对于课程 b 其先修课号为 c ,则 ...
- JavaScript验证密码强度
JavaScript的方法: <script type="text/javascript"> window.onload = function () { documen ...
- 大数据学习——hadoop安装
上传centOS6.7-hadoop-2.6.4.tar.gz 解压 tar -zxvf centOS6.7-hadoop-2.6.4.tar.gz hadoop相关修改配置 1 修改 /root/a ...
- 调用hcm接口同步员工数据更新员工信息没有同步到bdm
原来是更新的时候,baseEmployeeEntity的id为空,这时候需要把原先的baseEmployeeEntity1的id赋值给baseEmployeeEntity,问题解决
- POJ1450:Gridland 【杂题】
题目大意:先给出了TSP的背景,然后给出一个n*m的单位格点的图,图中除边缘上的点与八个方向的点有边连接,距离为欧拉距离,求从左上角出发的TSP 思路:从水题列表中看到的题,但看一开始给出的backg ...