【分布式】Zookeeper的Leader选举-选举过程介绍

【分布式】Zookeeper的Leader选举-选举过程介绍

选举开始,服务器会各自为自己投票,在投票完成后,会将投票信息发送给集群中的所有服务器(观察者服务器不参与选举)。

选票由两部分组成:服务器唯一标识myid和事务编号zxid,即(myid,xzid)。

zxid越大说明数据越新,在选择算法中的权重越大。
myid越大,在选择算法中的权重越大。

比较选票时会先比较zxid,zxid大的获胜,zxid相同时比较myid,myid大的获胜,胜利方选票不变,失败方选票将变成与胜利方一样,并再次将该投票发送出去。

当有过半机器收到相同的投票信息,则选出Leader,选举结束。

例如:
有A,B,C三台服务器参与竞选,myid分别为1,2,3,zxid分别为9,9,8。
选举过程为:
A收到的选票为(2,9),(3,8),与自己的(1,9)比较,选票变为(2,9),投出。
B收到的选票为(1,9),(3,8),与自己的(2,9)比较,结果不变。
C收到的选票为(1,9),(2,9),与自己的(3,8)比较,选票变为(2,9),投出。

此时B机器拥有过半选票,当选为Leader。

由上面规则可知,通常那台服务器上的数据越新(ZXID会越大),其成为Leader的可能性越大,也就越能够保证数据的恢复。如果ZXID相同,则myid越大机会越大。

参考资料:

http://www.cnblogs.com/leesf456/p/6107600.html
https://www.cnblogs.com/yuyijq/p/4116365.html
http://www.cnblogs.com/ASPNET2008/p/6421571.html

原文地址:http://blog.51cto.com/12434484/2323781

时间: 2024-09-30 16:11:38

【分布式】Zookeeper的Leader选举-选举过程介绍的相关文章

【分布式】Zookeeper的Leader选举

一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概述 Leader选举是保证分布式数据一致性的关键所在.当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举. (1) 服务器初始化启动. (2) 服务器运行期间无法和Leader保持连接. 下面就两种情况进行分析讲解. 1. 服务器启动时期的Leader选举 若进行

zookeeper应用 - leader选举 锁

模拟leader选举: 1.zookeeper服务器上有一个/leader节点 2.在/leader节点下创建短暂顺序节点/leader/lock-xxxxxxx 3.获取/leader的所有子节点并注册监听 4.拿自己的顺序号跟其他子节点的顺序号比较,如果自己的是最小的则获得leader 5.监听到/leader子节点发生变化则执行步骤3. 4尝试获取leader Client .java package leader; import java.util.List; import java.u

搞了个基于zookeeper的Leader/Follower切换Demo

基于zookeeper写了个Leader选举类库demo,场景如下: 上图中的Program1..4可以部署在1台server上,也可以部署在多台server上,也可以是一个进程中的多个线程. 运行效果: 初始化时(4个全开) 把第四个(也就是此时的Leader) 关闭后 把某个Follower角色的进程关闭后 此时再把Leader角色的进程关闭 代码下载 LeaderElectionLibrary的使用: class Program : IElectionChangedNotify { sta

2.EVE-NG安装过程介绍

文章列表(关注微信公众号EmulatedLab,及时获取文章以及下载链接) 1.EVE-NG介绍(EVE-NG最好用的模拟器,仿真环境时代来临!) 2.EVE-NG安装过程介绍 3.EVE-NG导入Dynamips和IOL 4.EVE-NG导入QEMU镜像 5.EVE-NG关联SecureCRT,VNC,Wireshark 6.EVE-NG网卡桥接,带您走进更高级的实验 7.EVE-NG硬盘扩容,存储海量镜像 8.EVE-NG定制个人镜像,脚本快速导入 9.EVE-NG容纳H3C.Huawei,

linux下的APK反编译软件及过程介绍

需要工具: 1.apktool apk打包工具 下载地址:http://android-apktool.googlecode.com/files/apktool1.5.2.tar.bz2 安装:直接解压即可,是一个apktool.jar文件,通过 $java -jar apktool.jar 来运行,依赖于java运行环境 2.dex2jar dex转化jar工具 下载地址:http://dex2jar.googlecode.com/files/dex2jar-0.0.9.15.zip 安装:直

Spark 的 Shuffle过程介绍`

Spark的Shuffle过程介绍 Shuffle Writer Spark丰富了任务类型,有些任务之间数据流转不需要通过Shuffle,但是有些任务之间还是需要通过Shuffle来传递数据,比如wide dependency的group by key. Spark中需要Shuffle输出的Map任务会为每个Reduce创建对应的bucket,Map产生的结果会根据设置的partitioner得到对应的bucketId,然后填充到相应的bucket中去.每个Map的输出结果可能包含所有的Redu

Spark的Shuffle过程介绍

Spark的Shuffle过程介绍 Shuffle Writer Spark丰富了任务类型,有些任务之间数据流转不需要通过Shuffle,但是有些任务之间还是需要通过Shuffle来传递数据,比如wide dependency的group by key. Spark中需要Shuffle输出的Map任务会为每个Reduce创建对应的bucket,Map产生的结果会根据设置的partitioner得到对应的bucketId,然后填充到相应的bucket中去.每个Map的输出结果可能包含所有的Redu

MapReduce的Shuffle过程介绍

MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一组无规则的数据尽量转换成一组具有一定规则的数据. 为什么MapReduce计算模型需要Shuffle过程?我们都知道MapReduce计算模型一般包括两个重要的阶段:Map是映射,负责数据的过滤分发:Reduce是规约,负责数据的计算归并.Reduce的数据来源于Map,Map的输出即是Reduce

分布式数据库中间件–(1) Cobar初始化过程

Cobar-Server的源代码地址:GitHub 欢迎Fork. 官方文档描写叙述Cobar的网络通信模块见下图. Cobar使用了Java的NIO进行处理读写.NIO是Java中的IO复用.而不须要对每一个连接都建立一个处理线程. 具体请看 非堵塞I/O–Java NIO教程 Cobar的初始化流程图例如以下: 在Cobar实例化过程中三个XML配置文件的载入类图关系例如以下(具体的成员没有标明): 这样Cobar系统就在执行了: 每一个Processor都启动反应堆的两个线程R和W来处理N