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集群角色分配原理相关推荐

  1. ZooKeeper学习笔记(八):ZooKeeper集群写数据原理

    写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...

  2. zookeeper专题:zookeeper集群搭建和客户端连接

    文章目录 1. Zookeeper 集群模式介绍 2. zookeeper 集群搭建 3. 使用curate客户端连接zookeeper集群 1. Zookeeper 集群模式介绍 Zookeeper ...

  3. Zookeeper集群详解

    Zookeeper集群角色 Leader:领导者,一个Zookeeper集群同一时间只能有一个Leader,,Leader服务器是整个Zookeeper集群工作制中的核心,其主要工作有以下: 事务请求 ...

  4. Zookeeper 集群模式搭建

    Zookeeper 集群模式搭建 前言 文件下载 Zookeeper集群角色 安装配置Zookeeper集群 前言 前面有单机模式zookeeper的搭建 .这里记录下自己搭建简单集群的步骤. 因为是 ...

  5. Zookeeper命令操作(初始Zookeeper、JavaAPI操作、分布式锁实现、模拟12306售票分布式锁、Zookeeper集群搭建、选举投票)

    Zookeeper命令操作(初始Zookeeper.JavaAPI操作.分布式锁实现.模拟12306售票分布式锁.Zookeeper集群搭建.选举投票) 1.初始Zookeeper Zookeeper ...

  6. ZooKeeper 集群

    为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么 ZooKeeper 本身仍然是可用的.通常 3 台服务器就可以构成一个 Z ...

  7. Zookeeper在Dubbo中的作用及Zk集群的选举原理

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan Zk在Dubbo中的作用 zk在dubbo中是服务注册与发现的注册中心,dubbo的调用过程是c ...

  8. zookeeper集群部署监控与选举同步流程等工作原理

    部署一个zookeeper集群,要多简单就能有多简单(下载压缩包,解压,修改配置文件zoo.cfg,执行启动脚本),但是想要真的把这套东西玩好了,还是需要费些功夫研究一番的.就跟自己搭建一个lnmp的 ...

  9. Zookeeper集群一致性原理(强一致性)

    @T- CZookeeper集群一致性原理(强一致性) 强一致性,弱一致性,最终一致性概念 强一致性概念 步骤1修改了userName为beid- uxing,步骤2读到的结果也一定是为beid- u ...

最新文章

  1. PHP serialize JSON 解析
  2. 抢红包神器上线,再也不怕抢不到红包了!
  3. 万事开头难 - 介绍IMX6ULL启动方式
  4. xtrabackup部署以及使用
  5. 手机网站按住放大图片_如何用PPT制作放大镜效果?ppt怎样实现放大镜效果?PPT放大镜效果教学?...
  6. ros_tools.prompt 断点调试
  7. 17-正交矩阵和Gram-Schmidt正交化
  8. python报表自动化系列 - 译码:与Excel单元格索引对应的十进制数坐标
  9. 如何使用EditPlus3编写汇编语言
  10. 计算机组装小游戏,电脑组装店游戏
  11. O3-开源框架使用之Butterknife 8.8.1及源码浅析
  12. mysql最大整数类型_MySQL教程19-整数类型
  13. GoogLeNet网络结构学习
  14. 在TeXstuidio中如何设置XeLaTeX编译
  15. C语言解一元高次方程代码,拜求大佬,这代码里面是什么意思,这是一个求一元高次方程的代码...
  16. win10自动修复处理方法
  17. 35岁开始学编程,单片机编程解了我的“近忧”加重了我的“远虑”
  18. Python案例学习—yuC
  19. Rabin Karp 算法详解及Python实现
  20. 破解基础----背的滚瓜烂熟差不多就会破解

热门文章

  1. 前后端分离工程实现 (VUE、JAVA)、附全部源码
  2. node、npm、vue安装 -- VUE 项目 demo 实例
  3. vue打包成app后,背景图片不显示
  4. Overload重載和Override重写的区别。Overloaded的方法是否可以改变返回值的类型?
  5. SJXXX串口扩展芯片 4串口芯片 UART串口芯片
  6. OC 中 load 方法和 initialize 方法的异同
  7. echarts 柱状图 ,颜色和显示设置
  8. RxPermissions 源码解析之举一反三
  9. SpringCloud |第二篇: 服务消费者(Ribbon)
  10. Git 回滚动任意版本