https://blog.csdn.net/chengyuqiang/article/details/79190061

https://www.cnblogs.com/leesf456/p/6107600.html

Leader选举是保证分布式数据一致性的关键所在。Leader选举分为Zookeeper集群初始化启动时选举Zookeeper集群运行期间Leader重新选举两种情况。在讲解Leader选举前先了解一下Zookeeper节点4种可能状态事务ID概念。

1、Zookeeper节点状态

LOOKING:寻找Leader状态,处于该状态需要进入选举流程
LEADING:领导者状态,处于该状态的节点说明是角色已经是Leader
FOLLOWING:跟随者状态,表示Leader已经选举出来,当前节点角色是follower
OBSERVER:观察者状态,表明当前节点角色是observer

2、事务ID

ZooKeeper状态的每次变化都接收一个ZXID(ZooKeeper事务id)形式的标记。ZXID是一个64位的数字,由Leader统一分配,全局唯一,不断递增
ZXID展示了所有的ZooKeeper的变更顺序。每次变更会有一个唯一的zxid,如果zxid1小于zxid2说明zxid1在zxid2之前发生。

3、Zookeeper集群初始化启动时Leader选举

若进行Leader选举,则至少需要两台机器,这里选取3台机器组成的服务器集群为例。
初始化启动期间Leader选举流程如下图所示。
在集群初始化阶段,当有一台服务器ZK1启动时,其单独无法进行和完成Leader选举,当第二台服务器ZK2启动时,此时两台机器可以相互通信,每台机器都试图找到Leader,于是进入Leader选举过程。选举过程开始,过程如下:
  (1) 每个Server发出一个投票。由于是初始情况,ZK1和ZK2都会将自己作为Leader服务器来进行投票, 每次投票会包含所推举的服务器的myid和ZXID,使用(myid, ZXID)来表示,此时ZK1的投票为(1, 0),ZK2的投票为(2, 0),(这里(1,0),(2,0)各代表一次投票,此时XZK1和ZK2的票数比是1:1)然后各自将这个投票发给集群中其他机器。
  (2) 接受来自各个服务器的投票。集群的每个服务器收到投票后,首先判断该投票的有效性,如检查是否是本轮投票、是否来自LOOKING状态的服务器。
  (3) 处理投票。针对每一个投票,服务器都需要将别人的投票和自己的投票进行比较,规则如下
   · 优先检查ZXID。ZXID比较大的服务器优先作为Leader。          · 如果ZXID相同,那么就比较myid。myid较大的服务器作为Leader服务器。
  对于ZK1而言,它的投票是(1, 0),ZK2的投票为(2, 0),首先会比较两者的ZXID,均为0,再比较myid,此时ZK2的myid最大,于是ZK2胜。
  (4) 统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于ZK1、ZK2而言,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时便认为已经选出ZK2作为Leader。
  (5) 改变服务器状态。一旦确定了Leader,每个服务器就会更新自己的状态,如果是Follower,那么就变更为FOLLOWING,如果是Leader,就变更为LEADING。当新的Zookeeper节点ZK3启动时,发现已经有Leader了,不再选举,直接将直接的状态从LOOKING改为FOLLOWING。

4、Zookeeper集群运行期间Leader重新选

在Zookeeper运行期间,如果Leader节点挂了,那么整个Zookeeper集群将暂停对外服务,进入新一轮Leader选举。
假设正在运行的有ZK1、ZK2、ZK3三台服务器,当前Leader是ZK2,若某一时刻Leader挂了,此时便开始Leader选举。选举过程如下图所示。

(1) 变更状态。Leader挂后,余下的非Observer服务器都会讲自己的服务器状态变更为LOOKING,然后开始进入Leader选举过程。
  (2) 每个Server会发出一个投票。在运行期间,每个服务器上的ZXID可能不同,此时假定ZK1的ZXID为124,ZK3的ZXID为123;在第一轮投票中,ZK1和ZK3都会投自己,产生投票(1, 124),(3, 123),然后各自将投票发送给集群中所有机器。
  (3) 接收来自各个服务器的投票。与启动时过程相同。
  (4) 处理投票。与启动时过程相同,由于ZK1事务ID大,ZK1将会成为Leader。
  (5) 统计投票。与启动时过程相同。
  (6) 改变服务器的状态。与启动时过程相同。

简单理解Zookeeper的Leader选举相关推荐

  1. Zookeeper的Leader选举

    简单理解Zookeeper的Leader选举 原文链接:简单理解Zookeeper的Leader选举_程裕强的博客-CSDN博客_zk的leader选举 Leader选举是保证分布式数据一致性的关键所 ...

  2. 分布式开发必须了解的Zookeeper的Leader选举机制(源码解析)

    分布式开发必须知道的Zookeeper知识及其的Leader选举机制(ZAB原子广播协议)   ZooKeeper是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括 ...

  3. zookeeper的Leader选举机制详解

    转载自:https://www.toutiao.com/i6701570306445672963/?tt_from=copy_link&utm_campaign=client_share&am ...

  4. 面试官:说一说Zookeeper中Leader选举机制

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,可以微信搜索[小奇JAVA面试]第一时间阅 ...

  5. Zookeeper之Leader选举源码分析

    Zookeeper源码下载地址:https://github.com/apache/zookeeper 1.选举流程 Zookeeeper的Leader选举会分两个过程. 服务启动时的leader选举 ...

  6. Zookeeper的Leader选举-选举过程介绍比较清晰

    http://www.cnblogs.com/leesf456/p/6107600.html 一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leade ...

  7. Zookeeper里Leader选举算法

    ZooKeepe集群中的三种服务器角色:Leader.Follower.Observer,本文主要概述Leader选举算法相关的知识. 一.Zookeeper里三种角色 1.Leader:Leader ...

  8. zookeeper的leader选举机制

    什么是zxid和myid? zxid: zookeeper为了保证数据的有序性,会给每一个写操作的数据,编写一个全局唯一的zxid. zxid是一个64位的数字:前32位会是由当前节点参与的选举次数决 ...

  9. 使用Zookeeper实现leader选举-Leader Latch

    参与选举的所有节点,会创建一个顺序节点,其中最小的节点会设置为master节点, 没抢到Leader的节点都监听前一个节点的删除事件,在前一个节点删除后进行重新抢主,当master节点手动调用clos ...

  10. 使用Zookeeper实现leader选举

    在分布式计算中,leader election是很重要的一个功能,这个选举过程是这样子的:指派一个进程作为组织者,将任务分发给各节点.在任务开始前,哪个节点都不知道谁是leader或者coordina ...

最新文章

  1. Cesar竞赛平台项目中期总结
  2. Apache与Tomcat 区别联系​
  3. 使用coding、daocloud和docker打造markdown纯静态博客
  4. ASP.NET中App_Code,App_Data等文件夹的作用
  5. OpenGL绘制二个不同颜色的三角形的实例
  6. asp中正则表达式应用
  7. mysql 隔离级别 知乎_TiDB 事务隔离级别
  8. SVG PATH d参数的 ace
  9. 1024到了,默默给自己点个赞!
  10. C#如何[添加][删除][修改]XML中的记录
  11. tf.app.flags的使用教程
  12. openbsd下实现双网卡负载均衡
  13. Git(7):git撤销已经push到远端的commit
  14. springboot实现任务调度的第三种方式------使用第三方quartz插件调度(springBoot+quartz+cronTrigger进行任务调度)
  15. 华为路由器配置OSPF实例
  16. 提高非参数检验功效的潜在方法
  17. Mac(M1)安装VMware虚拟机及Linux系统
  18. 计算机维修的介绍,电脑故障维修大全介绍
  19. openFOAM C++代码的一些特性
  20. Elasticsearch 6.4 ingest-attachment对office文件IK分词器全文检索(1) HttpAPI使用

热门文章

  1. Infopath 2013 通过UserProfileService读取AD用户信息
  2. 一个容易失误的字符串转字符问题
  3. 架构-LAMP特级学习(网站加速解决方案)
  4. 【数据分享】滤泡性淋巴瘤研究数据集
  5. 拓端tecdat|在R语言中使用概率分布:dnorm,pnorm,qnorm和rnorm
  6. 拓端tecdat|R语言Gibbs抽样的贝叶斯简单线性回归仿真分析
  7. Java分词处理测试
  8. php怎样注释代码块,vscode怎样注释方法代码块
  9. python绘制密度图
  10. TensorFlow介绍_中英文对照