Zookeeper集群角色分配原理
ZK内部存在Leader和Follower两个角色,那么这两种角色是怎样划分呢?或者说是怎么样被选举出来呢?以下将详细介绍ZK内部的选举机制。
ZK是通过内部的选举算法来选出Leader。(服务器需要配置对应的ID和文件)如下图所示:
第一种情况:集群是全新的集群。
以一个简单的例子来说明整个选举的过程.
假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的.假设这些服务器依序启动,来看看会发生什么:
1) 服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态
2) 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.
3) 服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.
4) 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.
5) 服务器5启动,同4一样,当小弟.
第二种情况:非全新集群的选举机制(数据恢复)
那么,初始化的时候,是按照上述的说明进行选举的,但是当zookeeper运行了一段时间之后,有机器down掉,重新选举时,选举过程就相对复杂了。
需要加入数据id、leader id和逻辑时钟。
数据id:数据新的id就大,数据每次更新都会更新id。
Leader id:就是我们配置的myid中的值,每个机器一个。
逻辑时钟:这个值从0开始递增,每次选举对应一个值,也就是说: 如果在同一次选举中,那么这个值应该是一致的 ; 逻辑时钟值越大,说明这一次选举leader的进程更新.
选举的标准就变成:
1、逻辑时钟小的选举结果被忽略,重新投票
2、统一逻辑时钟后,数据id大的胜出
3、数据id相同的情况下,leader id大的胜出
根据这个规则选出leader。
Zookeeper集群角色分配原理相关推荐
- ZooKeeper学习笔记(八):ZooKeeper集群写数据原理
写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...
- zookeeper专题:zookeeper集群搭建和客户端连接
文章目录 1. Zookeeper 集群模式介绍 2. zookeeper 集群搭建 3. 使用curate客户端连接zookeeper集群 1. Zookeeper 集群模式介绍 Zookeeper ...
- Zookeeper集群详解
Zookeeper集群角色 Leader:领导者,一个Zookeeper集群同一时间只能有一个Leader,,Leader服务器是整个Zookeeper集群工作制中的核心,其主要工作有以下: 事务请求 ...
- Zookeeper 集群模式搭建
Zookeeper 集群模式搭建 前言 文件下载 Zookeeper集群角色 安装配置Zookeeper集群 前言 前面有单机模式zookeeper的搭建 .这里记录下自己搭建简单集群的步骤. 因为是 ...
- Zookeeper命令操作(初始Zookeeper、JavaAPI操作、分布式锁实现、模拟12306售票分布式锁、Zookeeper集群搭建、选举投票)
Zookeeper命令操作(初始Zookeeper.JavaAPI操作.分布式锁实现.模拟12306售票分布式锁.Zookeeper集群搭建.选举投票) 1.初始Zookeeper Zookeeper ...
- ZooKeeper 集群
为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么 ZooKeeper 本身仍然是可用的.通常 3 台服务器就可以构成一个 Z ...
- Zookeeper在Dubbo中的作用及Zk集群的选举原理
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan Zk在Dubbo中的作用 zk在dubbo中是服务注册与发现的注册中心,dubbo的调用过程是c ...
- zookeeper集群部署监控与选举同步流程等工作原理
部署一个zookeeper集群,要多简单就能有多简单(下载压缩包,解压,修改配置文件zoo.cfg,执行启动脚本),但是想要真的把这套东西玩好了,还是需要费些功夫研究一番的.就跟自己搭建一个lnmp的 ...
- Zookeeper集群一致性原理(强一致性)
@T- CZookeeper集群一致性原理(强一致性) 强一致性,弱一致性,最终一致性概念 强一致性概念 步骤1修改了userName为beid- uxing,步骤2读到的结果也一定是为beid- u ...
最新文章
- PHP serialize JSON 解析
- 抢红包神器上线,再也不怕抢不到红包了!
- 万事开头难 - 介绍IMX6ULL启动方式
- xtrabackup部署以及使用
- 手机网站按住放大图片_如何用PPT制作放大镜效果?ppt怎样实现放大镜效果?PPT放大镜效果教学?...
- ros_tools.prompt 断点调试
- 17-正交矩阵和Gram-Schmidt正交化
- python报表自动化系列 - 译码:与Excel单元格索引对应的十进制数坐标
- 如何使用EditPlus3编写汇编语言
- 计算机组装小游戏,电脑组装店游戏
- O3-开源框架使用之Butterknife 8.8.1及源码浅析
- mysql最大整数类型_MySQL教程19-整数类型
- GoogLeNet网络结构学习
- 在TeXstuidio中如何设置XeLaTeX编译
- C语言解一元高次方程代码,拜求大佬,这代码里面是什么意思,这是一个求一元高次方程的代码...
- win10自动修复处理方法
- 35岁开始学编程,单片机编程解了我的“近忧”加重了我的“远虑”
- Python案例学习—yuC
- Rabin Karp 算法详解及Python实现
- 破解基础----背的滚瓜烂熟差不多就会破解