zookeeper的leader选举机制个人总结
- 第一步:每个服务器都首先投自己,格式为<sid,zxid>;
- 第二步:然后将自己的投票以
<sid,zxid>形式发送给其他服务器,这样每个服务器除了自己的投票,还有集群中除了自己之外的所有服务器的投票信息; - 第三步:自己跟其他服务器的投票信息作对比,然后每个服务器再次选出一个leader。对比规则如下:
1)优先对比zxid,谁的zxid最高就投给谁(因为zxid越大,代表该服务器的数据越新,越全);
2)如果zxid相同,则谁的sid大就投谁。 - 最后:统计票数,被支持票数超过一半的服务器成为新的leader。
- 举例如下:
共有5台zookeeper服务器,分别为s1,s2,s3,s4,s5,对应的<sid,zxid>分别为s1<1,8> s2<2,8> s3<3,9> s4<4,9> s5<5,8>
a.则第一轮投票,每个服务器都投自己;
b.第二轮投票,每个服务器接受到的票数分别如下:
s1:<1,8>,<2,8>,<3,9>,<4,9>,<5,8>,根据对比规则:zxid为9的先被推举为leader,则s3,s4被选;其次,zxid相同下,sid大者胜出,所以最终s4为leader;
s2:<2,8>,<1,8>,<3,9>,<4,9>,<5,8>,同理,s4被选为leader;
s3:<3,9>,<1,8>,<2,8>,<4,9>,<5,8>,同理,s4被选为leader;
到目前为止,已经有3个服务器,超过半数推举s4为leader,所以结束本次选举,最终leader为s4;
zookeeper的leader选举机制个人总结的更多相关文章
- 面试官:说一说Zookeeper中Leader选举机制
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 今天又是一个阳光明媚的一天,我又 ...
- zookeeper leader选举机制
最近看了下zookeeper的源码,先整理下leader选举机制 先看几个关键数据结构和函数 服务可能处于的状态,从名字应该很好理解 public enum ServerState { LOOKING ...
- Zookeeper中的watcher监听和leader选举机制
watcher监听 什么是watcher接口 同一个事件类型在不同的通知状态中代表的含义有所不同,下图列举了常见的通知状态和事件类型. Watcher通知状态与事件类型一览 上图列举了ZooKeepe ...
- 简单理解Zookeeper的Leader选举【转】
Leader选举是保证分布式数据一致性的关键所在.Leader选举分为Zookeeper集群初始化启动时选举和Zookeeper集群运行期间Leader重新选举两种情况.在讲解Leader选举前先了解 ...
- 温故知新-快速理解zookeeper功能&应用&选举机制
文章目录 zookeeper简介 什么是zookeeper zookeeper应用场景 zookeeper特点 zookeeper的角色 zookeeper的数据模型 节点数据结构 节点类型 zook ...
- 简单理解Zookeeper的Leader选举
Leader选举是保证分布式数据一致性的关键所在.Leader选举分为Zookeeper集群初始化启动时选举和Zookeeper集群运行期间Leader重新选举两种情况.在讲解Leader选举前先了解 ...
- 【分布式】Zookeeper的Leader选举
一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概 ...
- zookeeper应用 - leader选举 锁
模拟leader选举: 1.zookeeper服务器上有一个/leader节点 2.在/leader节点下创建短暂顺序节点/leader/lock-xxxxxxx 3.获取/leader的所有子节点并 ...
- Zookeeper系列(十一)zookeeper的Leader选举详解(核心之一)
作者:leesf 掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6107600.html尊重原创,奇文共欣赏: 一.前言 前 ...
随机推荐
- 《深入理解 Java 内存模型》读书笔记
 { List L; L = (List)malloc(sizeof(struct LNode)); L->Last = -1; ...
- WebGL中深度碰撞方法总结
z-fighting问题是三维渲染中常见的问题,本文根据实际工作中遇到的一些场景,进行了系统的总结 一个实际工作中的问题 当两个面离得太近就会发生深度碰撞问题,比如: 遇到深度检测问题,最重要的是先搞 ...
- spark 源码分析之三 -- LiveListenerBus介绍
LiveListenerBus 官方说明如下: Asynchronously passes SparkListenerEvents to registered SparkListeners. 即它的功 ...
- 【iOS】判断苹果的设备是哪种
有时候需要判断苹果的设备是 iPhone 还是 iPad 等其他设备,示例代码如下: if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUs ...
- hdoj 4706 Children's Day
题目意思就是用a-z组成一个N,然后到z后又跳回a,输出宽从3到10的N. #include <stdio.h> #include <string.h> char s[14][ ...
- Python实现批量处理扫描特定目录
## 简述在渗透测试中遇到相同CMS站点时,搞定一个站点,相当于拿了一个站群的通用漏洞,所以我们首先需要标注站点的CMS类型,根据要求编写如下脚本 ## 要求1.访问特定目录,如:站点特定 /cmsa ...
- redis分布式锁&队列应用
分布式锁 setnx(set if not exists) 如果设值成功则证明上锁成功,然后再调用del指令释放. // 这里的冒号:就是一个普通的字符,没特别含义,它可以是任意其它字符,不要误解 & ...
- 深入理解JVM-java字节码文件结构剖析(1)
public class MyTest1 { private int a = 1; public int getA() { return a; } public void setA(int a) { ...