zookeeper选举机制

我就是我 2022-06-06 12:28 362阅读 0赞

什么是zookeeper?

  1. zookeeper是一个分布式应用程序协调服务、开源的组件,有分布式服务的基本都可以用zookeeper
  2. zookeeper有三种角色的节点,分别是Leader(领导者)、Follower(跟随者)、Observer(观察者)。
  3. Leader 负责更新系统状态,进行投票(选举leader)的发起和决议。
  4. Follower 用于接收客户端请求并向客户端返回处理请求的结果,在选举过程中参与投票
  5. Observer 可以接收客户端的连接,将写请求转发给Leader系诶的那,但Observer不参加投票过程,只同步Leader的状态。Observer的目的是为了扩展系统,提高读取速度。
  6. zookeeper节点有四种状态,LookingFollowingLeadingObserving
  7. Looking:寻找Leader状态,当Server处于该状态时,此Server会认为当前集群中没有Leader,需要进入Leader选举状态。
  8. Following 跟随者状态,表明该Server角色为Follower
  9. Leading 领导者状态,表明当前服务器角色是Leader
  10. Observing 观察者状态,表明当前服务器角色是Observer

zookeeper的选举机制

  1. 为什么要进行Leader选举?
  2. Leader主要作用是保证分布式数据一致性,即每个节点的存储的数据同步。遇到以下两种情况需要进行Leader选举
  3. 1)服务器初始化启动
  4. 2)服务器运行期间无法和Leader保持连接,Leader节点崩溃,逻辑时钟崩溃。
  5. 1.服务器初始化时Leader选举
  6. zookeeper由于其自身的性质,一般建议选取奇数个节点进行搭建分布式服务器集群。以3个节点组成的服务器集群为例,说明服务器初始化时的选举过程。启动第一台安装zookeeper的节点时,无法单独进行选举,启动第二台时,两节点之间进行通信,开始选举Leader
  7. 1)每个Server投出一票。他们两都选自己为Leader,投票的内容为(SIDZXID)。SIDServerid,安装zookeeper时配置文件中所配置的myidZXID,事务id,为节点的更新程度,ZXID越大,代表ServerZnode的操作越新。由于服务器初始化,每个Sever上的Znode0,所以Server1投的票为(1,0),Server2为(2,0)。两Server将各自投票发给集群中其他机器。
  8. 2)每个Server接收来自其他Server的投票。集群中的每个Server先判断投票有效性,如检查是不是本轮的投票,是不是来Looking状态的服务器投的票。
  9. 3)对投票结果进行处理。先了解下处理规则
  10. - 首先对比ZXIDZXID大的服务器优先作为Leader
  11. - ZXID相同,比如初始化的时候,每个ServerZXID都为0,就会比较myidmyid大的选出来做Leader
  12. 对于Server而言,他接受到的投票为(2,0),因为自身的票为(1,0),所以此时它会选举Server2Leader,将自己的更新为(2,0)。而Server2收到的投票为Server1的(1,0)由于比他自己小,Server2的投票不变。Server1Server2再次将票投出,投出的票都为(2,0)。
  13. 4 统计投票。每次投票之后,服务器都会统计投票信息,如果判定某个Server有过半的票数投它,那么该Server将会作为Leader。对于Server1Server2而言,统计出已经有两台机器接收了(2,0)的投票信息,此时认为选出了Leader
  14. 5)改变服务器状态。当确定了Leader之后,每个Server更新自己的状态,Leader将状态更新为LeadingFollower将状态更新为Following
  15. 2.服务器运行期间的Leader选举
  16. zookeeper运行期间,如果有新的Server加入,或者非LeaderServer宕机,那么Leader将会同步数据到新Server或者寻找其他备用Server替代宕机的Server。若Leader宕机,此时集群暂停对外服务,开始在内部选举新的Leader。假设当前集群中有Server1Server2Server3三台服务器,Server2为当前集群的Leader,由于意外情况,Server2宕机了,便开始进入选举状态。过程如下
  17. 1 变更状态。其他的非Observer服务器将自己的状态改变为Looking,开始进入Leader选举。
  18. 2 每个Server发出一个投票(myidZXID),由于此集群已经运行过,所以每个Server上的ZXID可能不同。假设Server1ZXID145Server3的为122,第一轮投票中,Server1Server3都投自己,票分别为(1145)、(3,122),将自己的票发送给集群中所有机器。
  19. 3 每个Server接收接收来自其他Server的投票,接下来的步骤与初始化时相同。

发表评论

表情:
评论列表 (有 0 条评论,362人围观)

还没有评论,来说两句吧...

相关阅读

    相关 理解zookeeper选举机制

    一、zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和red

    相关 理解 Zookeeper 选举机制

    一、zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和red

    相关 Zookeeper选举机制

    SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。 ZXID:事务ID。ZXID是一个事务ID,用来标识一次服务器状态的变