`

zookeeper leader选举

 
阅读更多

主要参照 https://www.cnblogs.com/leesf456/p/6107600.html

有时间还可以看下源码确认下

 

选举主要有两种

1. 服务启动时选举

2. 运行期选举

 

1. 服务启动时选举

 

    因为服务启动时,初始状态一致(epoch)相同,所以启动阶段选举比较简单

    1)各个服务器节点,广播自己的优先级标识 (sid,zxid)

    2)服务器节点收到其他广播消息后,跟自己的优先级对比,自己优先级低,则变更当前节点投票的优先级(sid,zxid) ,并广播变更后的结果

    3)当任意一个服务器节点收到的投票数,超过了法定数量(quorum),则,升级为 Leader,并广播结果。

 

 

2. 运行期选举

        总结下:增轮次->先选自己(自己的sid,自己的zxid)->收集投票后revote->决定leader并变更状态

         epoch用来标记任期或者称为轮次,保证选举在最高的同一个轮次,实际就是用来保证一致性的

 

      每个投票中包含了两个最基本的信息,所推举服务器的SID和ZXID,投票(Vote)在Zookeeper中包含字段如下

  id:被推举的Leader的SID。

  zxid:被推举的Leader事务ID。

  electionEpoch:逻辑时钟,用来判断多个投票是否在同一轮选举周期中,该值在服务端是一个自增序列,每次进入新一轮的投票后,都会对该值进行加1操作。

  peerEpoch:被推举的Leader的epoch。

  state:当前服务器的状态。

 

      1. 自增选举轮次。Zookeeper规定所有有效的投票都必须在同一轮次中,在开始新一轮投票时,会首先对logicalclock(其实就是epoch,选举轮次,是zxid的高32位的值)进行自增操作。

  2. 初始化选票。在开始进行新一轮投票之前,每个服务器都会初始化自身的选票,并且在初始化阶段,每台服务器都会将自己推举为Leader。

  3. 发送初始化选票。完成选票的初始化后,服务器就会发起第一次投票。Zookeeper会将刚刚初始化好的选票放入sendqueue中,由发送器WorkerSender负责发送出去。

  4. 接收外部投票。每台服务器会不断地从recvqueue队列中获取外部选票。如果服务器发现无法获取到任何外部投票,那么就会立即确认自己是否和集群中其他服务器保持着有效的连接,如果没有连接,则马上建立连接,如果已经建立了连接,则再次发送自己当前的内部投票。

  5. 判断选举轮次。在发送完初始化选票之后,接着开始处理外部投票。在处理外部投票时,会根据选举轮次来进行不同的处理。

    · 外部投票的选举轮次大于内部投票。若服务器自身的选举轮次落后于该外部投票对应服务器的选举轮次,那么就会立即更新自己的选举轮次(logicalclock),并且清空所有已经收到的投票,然后使用初始化的投票来进行PK以确定是否变更内部投票。最终再将内部投票发送出去。

    · 外部投票的选举轮次小于内部投。若服务器接收的外选票的选举轮次落后于自身的选举轮次,那么Zookeeper就会直接忽略该外部投票,不做任何处理,并返回步骤4。

    · 外部投票的选举轮次等于内部投票。此时可以开始进行选票PK。

  6. 选票PK。在进行选票PK时,符合任意一个条件就需要变更投票。

    · 若外部投票中推举的Leader服务器的选举轮次大于内部投票,那么需要变更投票。

    · 若选举轮次一致,那么就对比两者的ZXID,若外部投票的ZXID大,那么需要变更投票。

    · 若两者的ZXID一致,那么就对比两者的SID,若外部投票的SID大,那么就需要变更投票。

  7. 变更投票。经过PK后,若确定了外部投票优于内部投票,那么就变更投票,即使用外部投票的选票信息来覆盖内部投票,变更完成后,再次将这个变更后的内部投票发送出去。

  8. 选票归档。无论是否变更了投票,都会将刚刚收到的那份外部投票放入选票集合recvset中进行归档。recvset用于记录当前服务器在本轮次的Leader选举中收到的所有外部投票(按照服务队的SID区别,如{(1, vote1), (2, vote2)...})。

  9. 统计投票。完成选票归档后,就可以开始统计投票,统计投票是为了统计集群中是否已经有过半的服务器认可了当前的内部投票,如果确定已经有过半服务器认可了该投票,则终止投票。否则返回步骤4。

  10. 更新服务器状态。若已经确定可以终止投票,那么就开始更新服务器状态,服务器首选判断当前被过半服务器认可的投票所对应的Leader服务器是否是自己,若是自己,则将自己的服务器状态更新为LEADING,若不是,则根据具体情况来确定自己是FOLLOWING或是OBSERVING。

  以上10个步骤就是FastLeaderElection的核心,其中步骤4-9会经过几轮循环,直到有Leader选举产生。

分享到:
评论

相关推荐

    fast paxos算法与zookeeper leader选举源代码分析.doc

    fast paxos算法与zookeeper leader选举源代码分析.doc

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

    Zookeeper 中 Leader 选举机制 在分布式系统中,Leader 选举机制是非常重要的一环,Zookeeper 作为一个广泛应用于分布式系统的协调服务,自然也有自己的 Leader 选举机制。下面,我们将通过一个有趣的面试对话来...

    C# 关于zookeeper主从选举的源码

    - 理解选举过程中的状态转换,比如从follower到candidate再到leader的转变,以及这些状态如何在代码中体现。 6. **应用与实践**: - 这段C#源码对于学习分布式系统、Zookeeper工作原理和C#网络编程都有很大帮助。...

    zookeeperMaster选举以及数据同步代码

    在分布式系统中,Zookeeper是一个至关重要的组件,它主要用于实现分布式服务管理,提供诸如配置管理、命名服务、集群同步、 leader选举等核心功能。在这个"zookeeperMaster选举以及数据同步代码"项目中,我们将深入...

    3、zookeeper的选举

    Leader选举是Zookeeper集群中的重要环节,它分为集群初始化启动时的选举和运行期间的Leader重新选举两种情况。在深入理解选举机制之前,我们需要先了解Zookeeper节点的四种状态以及事务ID的概念。 1. 节点状态: -...

    Zookeeper源码剖析:深入理解Leader选举机制

    **Zookeeper源码剖析:深入理解Leader选举机制** 在分布式协调服务Zookeeper中,Leader选举是其核心功能之一,确保了服务的高可用性和一致性。本文将深入Zookeeper的源码,探讨Leader选举的实现机制。 **为什么要...

    zookeeper选举机制图

    zookeeper选举机制图,内讲述了zookeeper是如何选举出leader、fllower的

    03-05-07-zookeeper原理之Leader选举源码分析1

    Zookeeper 是一个分布式协调服务,源自 Google 的 Chubby,它主要解决了在分布式环境中如何选举主节点(Master Server)的问题,确保一致性。为了实现这一目标,Zookeeper 采用了基于 Paxos 算法的 ZAB(Zookeeper ...

    Zookeeper双机房容灾方案.pdf

    模拟场景1:模拟目的场景概述是指模拟Zookeeper集群的leader选举过程。操作步骤包括:1. 每个server发出一个投票;2. 接受来自各个服务器的投票;3. 处理投票;4. 统计投票;5. 改变服务器状态。 模拟场景2:模拟...

    1、zookeeper3.7.1安装与验证

    其中,`2888`是follower与leader通信的端口,`3888`是选举时使用的端口。 6. **启动Zookeeper**: 在每台服务器上,以`alanchan`用户启动Zookeeper服务。使用`bin/zkServer.sh start`命令启动服务,通过`bin/zk...

    使用Zookeeper来为你的程序加上Leader Election的功能。

    如果 Leader 节点宕机,ZooKeeper 会自动触发新一轮的选举,选择新的 Leader。 在实际应用中,你需要按照以下步骤来使用 ZooKeeper 实现 Leader Election: 1. **初始化连接**:首先,每个节点需要连接到 ...

    leader-selector-demo.rar

    《分布式系统中的Leader选举:基于Zookeeper的Demo详解》 在分布式系统中,一致性是至关重要的,而实现一致性的一种常见机制就是通过Leader选举。在这个过程中,集群中的节点通过一定的算法来确定一个领导节点,这...

    apache zookeeper使用方法实例详解

    ZooKeeper 的主要特点是提供了一个简洁的接口,开发人员可以使用 ZooKeeper 提供的现成服务来实现分布式系统的配置管理、组管理、Leader 选举等功能。 ZooKeeper 的使用方法实例详解可以分为四个基本要求:(1)...

    zookeeper配置.docx

    当 Leader 服务器挂掉时,Follower 服务器将会选举出一个新的 Leader 服务器,以确保集群的可用性。 结论 Zookeeper 配置和集群操作是非常重要的,它们是 Zookeeper 的核心组件。通过对 Zookeeper 配置和集群操作...

    ZooKeeper 原理及其在 Hadoop 和 HBase 中的应用

    1. **Leader选举**:当ZooKeeper集群启动时,所有Follower节点会发起选举过程来选出一个Leader。选举算法基于ZAB协议,确保集群能够在短时间内选举出Leader,即使在网络分区或节点故障的情况下也能保持一致性。 2. ...

    zookeeper linux集群搭建流程

    在选举模式下,ZooKeeper 节点之间不能相互通信,需要选举出一个 leader 节点来恢复集群。 ZooKeeper 应用场景 ZooKeeper 广泛应用于分布式系统中,例如分布式配置管理、分布式锁、分布式队列等。ZooKeeper 的高...

    zookeeper 系列整理总结

    ZooKeeper通过 zab(ZooKeeper Atomic Broadcast)协议保证了强一致性,而Leader选举则是ZooKeeper集群中实现高可用性的关键过程,确保即使有服务器故障,服务仍能继续运行。 总的来说,ZooKeeper是一个强大的工具...

    zookeeper源码

    Zookeeper集群由多个服务器节点组成,每个节点都是对等的,通过选举机制选出一个Leader,其余节点作为Follower。当客户端发起请求时,请求首先发送到Leader,由Leader负责协调整个集群的一致性操作。 二、数据模型 ...

    zookeeper-3.4.12--.rar

    当新的 Leader 选举发生时,Zookeeper 使用 zab 协议来确保选举过程的原子性和最终一致性。 6. **配置管理** ZooKeeper 能够作为配置中心,集中存储和管理分布式应用的配置信息。应用程序可以动态地获取和更新配置...

Global site tag (gtag.js) - Google Analytics