当前位置: 首页 / 技术分享 / 正文
ZooKeeper的选举制度

2023-01-12

集群    leader  ○

  选举制度的说明

  ZooKeeper是一个分布式协调服务组件,但它本身也是一个集群,并且是一个主从架构的集群。与HDFS类似的是,这个集群中也是需要一个主节点和若干个从节点的。但是与HDFS不同,HDFS的主节点NameNode是需要我们在配置文件中指定的,而ZooKeeper集群的主节点并不是我们手动指定的,而是所有的节点启动之后自己选举出来的!因此,我们就需要了解一下ZooKeeper集群中的选举制度到底是什么?主节点为什么可以当选老大!

  ZooKeeper集群中,节点的角色大体有两种:Leader 和 Follower。其中Leader为主节点,Follower为从节点。

  选举中的几个概念

  Leader

  Leader是ZooKeeper集群工作的核心,是ZooKeeper集群的主节点。也是事物请求(写操作)的唯一调度和处理者,保证集群事物处理的顺序性;集群内部各个服务器的调度者。对于 create 、 setData 、 delete 等有写操作的请求,需要统一转发给Leader处理。Leader需要决定编号、执行操作,这个过程称为一个事物。

  Follower

  Follower是ZooKeeper集群中的从节点,有以下的功能:

  1、处理客户端非事物请求(读操作),转发事物请求给Leader(写操作)。

  2、参与集群Leader选举投票

  投票相关

  ●myid

  ○我们在搭建ZooKeeper集群的时候需要设置服务器的ID值,这个值在选举的投票中有一定的权重占比。

  ●zxid

  ○事物ID,ZooKeeper会为每一个更新的操作分配一个事物ID。

  ○事物ID是一个64位的数字,且是全局单调递增的。

  ○在一个节点的状态信息中会看到这个值。

  ●epoch

  ○逻辑时钟。

  在进行选举的时候,epoch > zxid > myid

  状态相关

  ●LOOKING:竞选状态

  ●FOLLOWING:随从状态,同步leader状态,参与投票

  ●OBSERVING:观察状态,同步leader状态,不参与投票

  ●LEADING:领导状态

  选举发生的时机

  ●启动ZooKeeper集群的时候

  ●ZooKeeper集群运行中,Leader失联

  选举过程

  启动集群选举

  我们以3个节点的ZooKeeper集群为例,启动的顺序是qianfeng01, qianfeng02, qianfeng03

  1qianfeng01启动,投自己一票。由于未满足过半的条件,进入到LOOKING状态。

  2qianfeng02启动,投自己一票。现在活跃的节点已经过半,归票:

  ○优先比较Epoch,谁的大,谁当选Leader

  ○如果Epoch相同,比较zxid,谁的大,谁当选Leader

  ○如果zxid也相同,比较myid,谁的大,谁当选Leader

  3qianfeng03启动,由于集群中已经出现了Leader,因此qianfeng03直接进入FOLLOWING状态,成为Follower。

  集群运行中,Leader失联后的选举

  集群在运行的过程中,Leader失联了。例如: 集群启动之后,qianfeng02当选为Leader,现在已经失联...

  ●qianfeng01、qianfeng03会进入到LOOKING状态,开始投票,并每人都给自己投了一票。

  ●归票:

  ○优先比较Epoch,谁的大,谁当选Leader

  ○如果Epoch相同,比较zxid,谁的大,谁当选Leader

  ○如果zxid也相同,比较myid,谁的大,谁当选Leader

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
在线咨询
试听
入学教程
立即报名

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号