FastLeader选主算法:

看网上关于 zookeeper选主节点fast算法的描述,虽然有几篇写的非常不错,但是总感觉描述的差一些,因此打算写一个我认为的较为详细的版本让大家提点意见。当然如果有Paxos基础那自然看起来非常很简单。

具体的FAST算法流程如下所示:

下面详细解释一下这个流程:

首先给出几个名词定义:

(1)Serverid:在配置server时,给定的服务器的标示id。

(2)Zxid:服务器在运行时产生的数据id,zxid越大,表示数据越新。

(3)Epoch:选举的轮数,即逻辑时钟。随着选举的轮数++

(4)Server状态:LOOKING,FOLLOWING,OBSERVING,LEADING

步骤:

一、  Server刚启动(宕机恢复或者刚启动)准备加入集群,此时读取自身的zxid等信息。

二、  所有Server加入集群时都会推荐自己为leader,然后将(leader id 、 zixd 、 epoch)作为广播信息,广播到集群中所有的服务器(Server)。然后等待集群中的服务器返回信息。

三、  收到集群中其他服务器返回的信息,此时要分为两类:该服务器处于looking状态,或者其他状态。

(1)    服务器处于looking状态

首先判断逻辑时钟 Epoch:

a)     如果接收到Epoch大于自己目前的逻辑时钟(说明自己所保存的逻辑时钟落伍了)。更新本机逻辑时钟Epoch,同时 Clear其他服务发送来的选举数据(这些数据已经OUT了)。然后判断是否需要更新当前自己的选举情况(一开始选择的leader id 是自己)

判断规则rules judging:保存的zxid最大值和leader Serverid来进行判断的。先看数据zxid,数据zxid大者胜出;其次再判断leaderServerid, leader Serverid大者胜出;然后再将自身最新的选举结果(也就是上面提到的三种数据(leader Serverid,Zxid,Epoch)广播给其他server)

b)     如果接收到的Epoch小于目前的逻辑时钟。说明对方处于一个比较OUT的选举轮数,这时只需要将自己的 (leader Serverid,Zxid,Epoch)发送给他即可。

c)     如果接收到的Epoch等于目前的逻辑时钟。再根据a)中的判断规则,将自身的最新选举结果广播给其他 server。

同时Server还要处理2种情况:

a)    如果Server接收到了其他所有服务器的选举信息,那么则根据这些选举信息确定自己的状态(Following,Leading),结束Looking,退出选举。

b)   即使没有收到所有服务器的选举信息,也可以判断一下根据以上过程之后最新的选举leader是不是得到了超过半数以上服务器的支持,如果是则尝试接受最新数据,倘若没有最新的数据到来,说明大家都已经默认了这个结果,同样也设置角色退出选举过程。

(2)    服务器处于其他状态(Following, Leading)

a)     如果逻辑时钟Epoch相同,将该数据保存到recvset,如果所接收服务器宣称自己是leader,那么将判断是不是有半数以上的服务器选举它,如果是则设置选举状态退出选举过程

b)     否则这是一条与当前逻辑时钟不符合的消息,那么说明在另一个选举过程中已经有了选举结果,于是将该选举结果加入到outofelection集合中,再根据outofelection来判断是否可以结束选举,如果可以也是保存逻辑时钟,设置选举状态,退出选举过程。

以上就是FAST选举过程。

Zookeeper具体的启动日志如下图所示:

以上就是我自己配置的Zookeeper选主日志,从一开始LOOKING,然后new election, my id = 1, proposedzxid=0x0  也就是选自己为Leader,之后广播选举并重复之前Fast选主算法,最终确定Leader。

参考:    http://blog.csdn.net/xhh198781/article/details/6619203

http://blog.itpub.net/30109892/viewspace-2089610/

http://www.open-open.com/lib/view/open1413796647528.html

Zookeeper选举算法( FastLeader选主)相关推荐

  1. Zookeeper选举算法原理

    Zookeeper选举算法原理 Leader选举 Leader选举是保证分布式数据一致性的关键所在.当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举. (1) 服 ...

  2. 如此火爆的ZooKeeper,到底如何选主?

    前言 前面一篇文章我们已经给大家讲解了ZooKeeper的核心的原理,这一篇我们重点分析ZooKeeper的Leader选举算法.Leader的选举是ZooKeeper的最重要技术之一,也是保证分布式 ...

  3. Kazoo Python Zookeeper 选主

    本文讲述基于zookeeper选主与故障切换的方法.我们的例子使用的是python. 使用的库是kazoo,安装方式 pip install kazoo 应用场景: 多个实例部署,但不是"去 ...

  4. elasticjob选主分析

    选主分析 选主入口调用栈 1.1 通过调用栈分析,发现elasticjob为每个任务都创建一个JobSchuduler作业调度对象,而在JobScheduler对象的初始化会为每个Job选举一个主节点 ...

  5. Zookeeper——选举机制原理与Leader和Follower作用

    摘要 本博文主要介绍Zookeeper的选举机制的原理与Zookeeper事务请求处理的原理. 一.zookeeper选举算法原理 Leader 服务器的作用是管理 ZooKeeper 集群中的其他服 ...

  6. zookeeper选举机制及相关概念

    一.zookeeper的一些概念 server和client: server 指集群的每一台机器 client 指每一个向server请求服务的机器 zookeeper角色: leader:为客户端提 ...

  7. CAP原理,分布式一致性算法,两阶段提交,三阶段提交,Paxos,Raft,zookeeper的选主过程,zab协议,顺序一致性,数据写入流程,节点状态,节点的角色

    我们知道,一般在分布式应用都有CAP准则: C Consistency, 一致性,分布式中的各个节点数据保持一致 A availability 可用性,任何时刻,分布式集群总是能够提供服务 P par ...

  8. Raft算法实现 - Sofa-JRaft,选主,数据写入,日志复制

    关于raft算法相关细节,可以全看之前的文章 分布式一致性算法,两阶段提交,三阶段提交,Paxos,Raft,zookeeper的选主过程,zab协议,顺序一致性,数据写入流程,节点状态,节点的角色 ...

  9. Raft 为什么是更易理解的分布式一致性算法——(1)Leader在时,由Leader向Follower同步日志 (2)Leader挂掉了,选一个新Leader,Leader选举算法。...

    转自:http://www.cnblogs.com/mindwind/p/5231986.html Raft 协议的易理解性描述 虽然 Raft 的论文比 Paxos 简单版论文还容易读了,但论文依然 ...

最新文章

  1. 多模态人物识别技术及其在爱奇艺视频场景中的应用 | 公开课笔记
  2. RetinaFace Mxnet转TensorRT
  3. 【设计干货】Facebook设计APP时的14个必考题
  4. java测试spring cloud_java – 从Spring引导单元测试中排除Spring Cloud Config Server
  5. 干得最多最累,工资还不如新人
  6. word排版教程-----------技巧
  7. 一个计算机爱好者的不完整回忆(三十一)我的拼音输入法
  8. 滕振宇谈如何进行单元测试
  9. python 获取股市数据 baostock + 画K线图 mpl_finance
  10. lucene使用IndexWriter时遇到LockObtainFailedException: Lock obtain timed out 异常原因及解决办法
  11. 1-图像增强(Part1)
  12. 像李云迪那样爱 IT界那些“情”
  13. HTML进阶(2)- 在页面中使用flash
  14. Java 面试题大全(整理版)1000+ 面试题附答案详解
  15. 低格硬盘用什么软件_越南人用的什么聊天软件,和越南人交流用什么软件翻译...
  16. 【重点解析】美国签证系统故障背后相关的数据库问题
  17. 异常:Parameter 0 of constructor in com.ylz.supervise.childmodule.sys.log.strategy.StrategyContext req记
  18. 香港科大(广州)8位创校教授获评2020南沙高端领军人才
  19. 计算机专业术语对照表_艾孜尔江编
  20. 铸钢节点是什么?有哪些优点?

热门文章

  1. 进程间通信 - 命名管道实现
  2. 高级数据结构与算法 | LFU缓存机制(Least Frequently Used)
  3. 【爬虫】爬取百度贴吧数据
  4. 消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局
  5. 空降进阿里的 P10 都是什么人
  6. Kafka解惑之Old Producer(4)——Case Analysis
  7. 大话ion系列(二)
  8. CABR:Beamer的内容自适应速率控制算法
  9. Demuxed:编解码器和压缩的未来
  10. socket编程TCP通信