首页 > 其他分享 >3、zookeeper的选举----经验证符合事实,网上很多都是错误的

3、zookeeper的选举----经验证符合事实,网上很多都是错误的

时间:2023-05-15 19:04:20浏览次数:33  
标签:选举 zookeeper server1 server2 ---- 投票 服务器 Leader 符合事实




目录

  • Zookeeper系列文章目录
  • 一、概念
  • 1、Zookeeper节点状态
  • 2、事务ID
  • 二、集群初始化选举
  • 1、每个Server发出一个投票
  • 2、 接受来自各个服务器的投票
  • 3、处理投票
  • 4、统计投票
  • 5、改变服务器状态
  • 三、集群重新选举
  • 1、变更状态
  • 2、每个Server会发出一个投票
  • 3、接收来自各个服务器的投票
  • 4、处理投票
  • 5、统计投票
  • 6、改变服务器的状态



Leader 选举是保证分布式数据一致性的关键所在。
Leader 选举分为 Zookeeper 集群初始化启动时选举和 Zookeeper 集群运行期间 Leader 重新选举两种情况。
在讲解 Leader 选举前先了解一下 Zookeeper 节点 4 种可能状态和事务ID概念。
本文是在zookeeper的部署与验证的基础上进行的,有些机器名称使用的是该篇文章的名称。

一、概念

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 之前发生。

二、集群初始化选举

前提:server1、server2、server3三台服务器是顺序启动zookeeper的,即先启动server1,再启动server2,最后启动server3。

若进行 Leader 选举,则至少需要两台机器,这里选取 3 台机器(server1、server2、server3)组成的服务器集群为例。初始化启动期间 Leader 选举流程如下图所示。

3、zookeeper的选举----经验证符合事实,网上很多都是错误的_hbase


在集群初始化阶段,当有一台服务器 server1 启动时,其单独无法进行和完成 Leader 选举,当第二台服务器 server2 启动时,此时两台机器可以相互通信,每台机器都试图找到 Leader,于是进入 Leader 选举过程。选举过程开始,过程如下:

1、每个Server发出一个投票

由于是初始情况,server1 和server 都会将自己作为 Leader 服务器来进行投票,每次投票会包含所推举的服务器的 myid 和 ZXID,使用(myid, ZXID)来表示,此时 server1 的投票为(1, 0),server2 的投票为(2, 0),然后各自将这个投票发给集群中其他机器。

2、 接受来自各个服务器的投票

集群的每个服务器收到投票后,首先判断该投票的有效性,如检查是否是本轮投票、是否来自 LOOKING 状态的服务器。

3、处理投票

针对每一个投票,服务器都需要将别人的投票和自己的投票进行比较,规则如下:

  • 优先检查 ZXID。ZXID 比较大的服务器优先作为 Leader。
  • 如果 ZXID 相同,那么就比较 myid。myid 较大的服务器作为Leader服务器。
    对于 server1 而言,它的投票是(1, 0),接收 server2 的投票为(2, 0),首先会比较两者的 ZXID,均为 0,再比较 myid,此时 server2 的 myid 最大,于是 server2 胜。server1 更新自己的投票为(2, 0),并将投票重新发送给 server2。

4、统计投票

每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于 server1、server2 而言,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时便认为已经选出 server2 作为Leader

[alanchan@server2 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/bigdata/apache-zookeeper-3.7.1/bin/../conf/zoo.cfg
Client port found: 2118. Client address: localhost. Client SSL: false.
Mode: leader

[alanchan@server1 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/bigdata/apache-zookeeper-3.7.1/bin/../conf/zoo.cfg
Client port found: 2118. Client address: localhost. Client SSL: false.
Mode: follower

[alanchan@server3 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/bigdata/apache-zookeeper-3.7.1/bin/../conf/zoo.cfg
Client port found: 2118. Client address: localhost. Client SSL: false.
Mode: follower

5、改变服务器状态

一旦确定了 Leader,每个服务器就会更新自己的状态,如果是Follower,那么就变更为 FOLLOWING,如果是 Leader,就变更为 LEADING。当新的 Zookeeper 节点 server3 启动时,发现已经有 Leader 了,不再选举,直接将直接的状态从 LOOKING 改为 FOLLOWING。

三、集群重新选举

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

3、zookeeper的选举----经验证符合事实,网上很多都是错误的_zookeeper_02

1、变更状态

Leader 挂后,余下的非 Observer 服务器都会讲自己的服务器状态变更为 LOOKING,然后开始进入 Leader 选举过程。

2、每个Server会发出一个投票

在运行期间,每个服务器上的 ZXID 可能不同,此时假定 server1 的 ZXID 为 124, server3 的 ZXID 为 123;在第一轮投票中, server1 和 server3 都会投自己,产生投票(1, 124),(3, 123),然后各自将投票发送给集群中所有机器。

3、接收来自各个服务器的投票

与启动时过程相同。

4、处理投票

与启动时过程相同,由于 server1 事务 ID 大, server1 将会成为 Leader。(如果zxid一样, server3将是leader。)

5、统计投票

与启动时过程相同。

6、改变服务器的状态

与启动时过程相同。

以上就是zookeeper的选举过程,该过程可以通过实际的操作进行验证。


标签:选举,zookeeper,server1,server2,----,投票,服务器,Leader,符合事实
From: https://blog.51cto.com/alanchan2win/6280458

相关文章

  • 4、zookeeper的java三种客户端介绍-Curator(crud、事务操作、监听、分布式计数器、分布
    目录Zookeeper系列文章目录一、zookeeper原生JavaAPI二、ZkClient三、Apachecurator1、pom.xml2、定义常量类3、连接实例化4、事务操作示例5、CRUD示例6、监听示例7、计数器示例1)、单机原子自增性实现1、Synchronized示例2、Lock示例3、AtomicInteger示例2)、分布式线程安全原子......
  • 2、HDFS操作 - shell客户端
    目录Hadoop系列文章目录一、语法格式二、具体命令示例1、mkdir命令2、ls命令3、put命令4、rm命令5、moveFromLocal命令6、-get7、cat命令8、head命令9、tail命令10、cp拷贝命令11、appendToFile命令12、df命令13、du命令14、mv命令15、setrep命令16、checksum17、co......
  • chmod :设置文件或者目录的权限
    语法chmod[必要参数][选择参数][<权限范围>+/-/=<权限设置>][文件或目录]功能chmod命令:依据权限设置给定文件的权限。权限既可以是一个符号,也可以是一个代表性的数。符号的模式可以是[ugoa][+-=][rwxXstugo],可以给定多个符号,它们之间逗号隔开类似命令:chown chgrp umask......
  • 【换模型更简单】如何用 Serverless 一键部署 Stable Diffusion?
    作者:寒斜本篇章是阿里云函数计算部署StableDiffusion系列的第三篇,如果说第一篇是尝试使用云服务来解决用户本地部署Stable Diffusion的问题(显卡成本,部署技术复杂),第二篇是面向技术同学解决云服务Stable Diffusion的实用性问题(自定义模型,扩展),那么本篇则是以更大众的方式实现......
  • 小白学剪辑从哪里开始 小白学剪辑用什么软件好
    小白如果要学剪辑,最好先确定学习的目的以及用途,然后在进一步决定学什么。如果是要学习专业剪辑的话,选择的内容会更专业;而如果只是满足日常娱乐需求的话,选择的内容就会简单一些。接下来,一起来了解下小白学剪辑从哪里开始,小白学剪辑用什么软件好的相关内容吧。一、小白学剪辑从哪里开......
  • MySQL配置免密登录及密码修改
    内容要点一、问题描述二、解决方案一、问题描述1、mysql忘记密码无法登录。报错:#mysql-uroot-pEnterpassword:ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:YES)2、配置免密登录后修改密码失败UPDATEuserSETpassword=PASSWORD('r......
  • 校园跑腿小程序源码跑腿表白代取代买小程序二开维护
    功能详情1.快递代收:校园跑服可以为学生和周边居民提供快递代收服务,充分利用校园跑服可以“地节约大家的时间,只需要在家中打开移动端的应用,"可以轻松预约校园跑腿的服务,让代收的快递可以在学校或家中安全及时的收到。2.跑腿代购:校园跑腿可以为学生提供跑腿代购服务,客户可以选择需......
  • 基于显扬科技3D视觉相机的医疗试管分拣系统
    Part.1 行业现状医疗试管分拣是医疗行业中的一个重要环节,指将医疗实验室或生物技术研究中的试管按照一定的规则进行分拣,并对试管的类型、位置、数量等信息进行识别和管理。随着医疗技术的不断发展和诊断治疗的精细化,医疗试管分拣的需求也不断增加。传统的试管分拣是由人工操作来完......
  • 校园圈子源码快递跑腿圈子小程序二开源码定制开发设计
    功能介绍多校版本,校园切换,每个学校都有单独后台跑腿,代取快递,寄存快递,发布贴子,外卖服务添加商品,可以添加商品商户,网上购物认证成为骑手,接取任务赚钱。后台管理:处理各种订单,审核骑手资质,添加优惠卷,用户提现管理,用户管理演示地址;https://www.mjwl.cc/?pic_16/92.html......
  • 随堂+变换字典格式
    #反选a='ACXDSFDVCDVFFB'[::-1]#a=a.replace('C','ni')b='ACXDSFDVCDVFFB'[::-2]print(a)print(b)#频繁修改字符串,可以这样做。importios='axscgvmkoi'sio=io.StringIO(s)print(sio)print(sio.getvalue())sio.getvalue()s......