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是相同的,即对客户端来讲每个服 ...
随机推荐
- webpack的安装与使用(单文件)
在安装 Webpack 前,你本地环境必须已安装nodejs. 可以使用npm安装,当然由于 npm 安装速度慢,也可以使用淘宝的镜像及其命令cnpm(npm install -g cnpm --re ...
- Window History对象
History 对象属性 length 返回浏览器历史列表中的 URL 数量. History 对象方法 back() 加载 history 列表中的前一个 URL. window.history.b ...
- js02--对象、函数、switch、for、异常、表单验证
现在我们接着来继续学习有关js的一些基础. 1.undefined与null undefined:当变量声明但尚未赋值时,它的类型就是undefined null:表示一个不存在的对象,它 ...
- python3 判断大小端的一种方法
这里用到了array.array('H', [1])来测试大小端,[1]可以转化为十六进制的0x0001,占两位,00位高位, 01位低位,通过第一位就可以判断大小端. 如果是小端,则转化为bytes ...
- Spring Security构建Rest服务-0900-rememberMe记住我
Spring security记住我基本原理: 登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeS ...
- require/load/include/extend的区别
require 一般用于加载一个库,当多次使用require加载一个库时,只有第一次有效,后面的都会加载失败,也就是会返回"false",以为require会追踪文件是否被加载. ...
- ubuntu16.04上Eclipse和hadoop配置
1.安装Eclipse 1>下载Eclipse 可以以多种方式下载Eclipse,下面介绍直接从eplise官网下载和从中国镜像站点下载,下载把eclipse上传到Hadoop环境中. 第一种方 ...
- 使用.Net Core发布可从外部访问的网站
首先在https://www.microsoft.com/net 下载.Net Core SDK Visual Studio official MSI Installer NuGet Manager ...
- PlanetTogether APS安装与配置
一.PT 安装 1.PT Server与Client的下载 下载网址:https://download.planettogether.com/ 2.安装.net framework 4.6.2 安装P ...
- protocol buffers生成go代码原理
本文描述了protocol buffers使用.proto文件生成pb.go文件的过程 编译器 编译器需要插件来编译环境,使用如下方式安装插件:go get github.com/golang/pro ...