zookeeper 选举
选举概述:
1、启动时期的选举
所有的服务器状态为 LOOKING。
1.1、每个Server 会投出一票(投票规则为:SID、ZXID ,即 服务器ID 和 最大事务ID)。
1.2、处理选票 (A、优先选ZXID最大的。B、再优先SID最大的),根据处理结果再投一次。
1.3、统计投票。
1.4、通知投票结果,更改集群机器状态。
2、运行期的选举
Leader 挂了后,Follower 将变更状态为 LOOKING , 进入新一轮的Leader 选举。
剩余步骤同上。
选举算法:FastLeaderElection
1、术语
SID:服务器ID,ZXID:事务ID,Vote:投票,Quorum:过半机器数(机器数为n,那么 Quorum = n/2+1 )
2、处理选票规则(A、优先选ZXID最大的。B、再优先SID最大的),根据选票规则跟自身进行对比,如果找到比自己大的,则投票给大的,否则坚持自己的投票。
实现细节:
1、服务器的四种状态
1.1、LOOKING:无领导状态,进入选举流程。
1.2、FOLLOWING 随从
1.3、LEADING 领导
1.4、OBSERVING 观察者
2、票据数据结构
SID //
ZXID //
electionEpoch // 逻辑时钟,用来判断投票是否在同一轮选举周期中,自增序列,每一轮投票自增1。
peerEpoch // 被选举的 Leader 的 epoch
state // 当前服务器的状态。
3、消息队列会根据SID进行分组
4、根据 electionEpoch 的值进行判断(ee)
4.1、接收到的 ee , 大于自身的ee,则清空已经收到的选票将自身ee修改为接收到的ee值,并根据PK规则,进行新一轮的选票投递。
4.2、如果收到的ee小于自身的ee,则抛弃不处理该选票。
4.3、ee相等,先PK再发送新的选票。
zookeeper 选举的更多相关文章
- 学习笔记:Zookeeper选举机制
1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定master和slave 但是,zookeeper工作时,是有一个节点为leader,其他则为follower Leader ...
- Zookeeper选举算法原理
Zookeeper选举算法原理 Leader选举 Leader选举是保证分布式数据一致性的关键所在.当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举. (1) 服 ...
- Zookeeper 选举过程
Zookeeper 选举过程 问题 选举过程 服务器之间是怎么通信的? 答:QuorumCnxManager使用TCP-socket实现选举过程中的连接通信 Leader的选举过程在什么时候实现? L ...
- Zookeeper选举机制(转)
源:http://blog.csdn.net/tototuzuoquan/article/details/54426684 1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定 ...
- zookeeper选举原理
zookeeper的领导者选举和原子广播 目录: 1.工作原理概述 2.Fast Leader选举算法(领导者选举) 3.Leader与Follower同步数据(原子广播) ...
- zookeeper选举代码分析
本文将以zookeeper的3.4.6版本作为源码分析版本.主要的代码类包括QuorumPeerMain.QuorumPeer.FastLeaderElection.QuorumMaj等. 假设有a, ...
- 理解zookeeper选举机制
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- zookeeper选举流程
如何在zookeeper集群中选举出一个leader,zookeeper使用了三种算法,具体使用哪种算法,在配置文件中是可以配置的,对应的配置项是”electionAlg”,其中1对应的是Leader ...
- zookeeper 选举和同步
节点状态: // org.apache.zookeeper.server.quorum.QuorumPeer.ServerState public enum ServerState { LOOKING ...
- zookeeper选举状态介绍 摘自https://cloud.tencent.com/developer/news/303891
zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服 ...
随机推荐
- 698. Partition to K Equal Sum Subsets
Given an array of integers nums and a positive integer k, find whether it's possible to divide this ...
- jzoj3363
JYY 来到了一个新的城市,为了和大家保持联系,第一件事就是办理新的手机号.JYY 对号码的要求很高,希望大家都能够顺畅地阅读手机号,因此 JYY 特别研究了地球人的电话号码阅读习惯,有如下重大发现 ...
- express form/ajax 后端获取前端数据
-------------------2017/12/02补充:缺了一个重要条件... var bodyParser = require('body-parser');var app = expres ...
- 这几天bug多,自我检讨一下
这段时间(主要指4月底到5月初)写的bug超过以往总和,觉得很有必要停一下,找找原因.所谓前车之鉴后车之师,不能也不应该在同一地方跌倒N次吧: 为什么bug频出? 深究原因,并不是代码量大.功能多,反 ...
- Linux中MySQLl单实例源码编译安装
MySQL5.5以后源码安装要用cmake 1.3 安装相关包(cmake) 1.3.1 cmake软件 cd /home/Public/tools/ tar xf cmake-2.8.8.tar.g ...
- 位域(bit fields)简介
使用位域或位操作移动一个字节中的位 Java中EnumSet代替位域代码详解 关于位域的一些东西 深入理解Java枚举类型(enum) 位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个 ...
- JDK源码学习之 集合实现类
一.HashMap (1) 简介:java1.8版本之前HashMap的结构图如下: 数组的每个元素都是一个单链表的头节点,链表是用来解决冲突的,如果不同的key映射到了数组的同一位置处,就将其放入单 ...
- selenium+java iframe定位
关于 driver.switchTo().frame(参数).这中间的参数表达有以下几种方式. driver.switchTo().frame(0):用<iframe>标签的位置数量来 ...
- IOC容器02
获取xml文件路径,使用IO读取xml文件,使用Document对象解析xml文件,将xml中的bean的信息注册到BeanDefinition类,将BeanDefinition保存到一个map中:该 ...
- 再学Java 之 解决No enclosing instance of type * is accessible
深夜,临睡前写了个小程序,出了点小问题 public class Test_drive { public static void main(String[] args){ A a = new A(); ...