什么时候开始进行选举

1.服务器初始化启动的时候
2.服务器运行期间连接不上leader的时候

初始化选举过程

进行leader选举至少需要两台服务器,我们这里举例为5台服务器(1,2,3,4,5)
1.启动服务器1,第一次投票都先投给自己[1,0]。投票内容[myid,zxid],myid为服务器的唯一标识,zxid
是事物请求的唯一标识,从0开始,选举出leader之后由leader分配,zxid由两部分组成,高32位记录事物请求所属的轮次
,低32位是请求次数。此时服务器1的支持率没有达到半数以上,保持Looking状态。
2.启动服务器2,投第一票[2,0],然后与服务器1交换投票结果。
3.服务器1收到服务器2的投票结果以后首先检查轮询次数是否一致,然后检查服务器状态是否为Looking状态。
4.检查通过开始PK,首先比较zxid,都为0,(如果不同, 大的胜出),然后比较myid,大的胜出。
5.服务器1更新投票结果为[2,0],服务2pk之后胜出,无需更新投票结果,服务器2拿到两票支持,支持率没有达到半数以上,继续Looking。
6.启动服务器3,投第一票[3,0],然后与服务器1和2交换投票结果,pk完成后,服务器1投票结果[3,0],服务器2投票结果[3,0],服务器3投票结果[3,0],此时,支持率达到半数以上,服务器3当选为leader。状态为Leading,服务器1和2分别为Following
7.启动服务器4和5,虽然myid大于3,但是由于3已经成为leader,他们就自动跟随了。

服务器运行时选举过程

1.leader挂了之后,follower更新状态为Looking,开始进行选举leader
2.开始第一轮投票,跟启动时一样,都投给自己
3.接收其他服务器的投票,检查有效性进行pk,与启动时一样。运行时服务器的zxid可能不同,还是大的胜出
4.统计投票
5.选出leader,更新状态(Leading和Following)

服务器状态

LOOKING:寻找leader的状态
LEADING:leader领导者状态
FOLLOWING:跟随着状态
OBSERVING:观察者状态

zookeeper选举的更多相关文章

  1. 学习笔记:Zookeeper选举机制

    1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定master和slave 但是,zookeeper工作时,是有一个节点为leader,其他则为follower Leader ...

  2. Zookeeper选举算法原理

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

  3. Zookeeper 选举过程

    Zookeeper 选举过程 问题 选举过程 服务器之间是怎么通信的? 答:QuorumCnxManager使用TCP-socket实现选举过程中的连接通信 Leader的选举过程在什么时候实现? L ...

  4. Zookeeper选举机制(转)

    源:http://blog.csdn.net/tototuzuoquan/article/details/54426684 1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定 ...

  5. zookeeper选举原理

    zookeeper的领导者选举和原子广播   目录:     1.工作原理概述     2.Fast Leader选举算法(领导者选举)     3.Leader与Follower同步数据(原子广播) ...

  6. zookeeper选举代码分析

    本文将以zookeeper的3.4.6版本作为源码分析版本.主要的代码类包括QuorumPeerMain.QuorumPeer.FastLeaderElection.QuorumMaj等. 假设有a, ...

  7. 理解zookeeper选举机制

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  8. zookeeper选举流程

    如何在zookeeper集群中选举出一个leader,zookeeper使用了三种算法,具体使用哪种算法,在配置文件中是可以配置的,对应的配置项是”electionAlg”,其中1对应的是Leader ...

  9. zookeeper 选举和同步

    节点状态: // org.apache.zookeeper.server.quorum.QuorumPeer.ServerState public enum ServerState { LOOKING ...

  10. zookeeper选举状态介绍 摘自https://cloud.tencent.com/developer/news/303891

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

随机推荐

  1. 51Nod 1225 余数之和 [整除分块]

    1225 余数之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 F(n) = (n % 1) + (n % 2) + (n % 3) + ... ...

  2. BZOJ 3040: 最短路(road) [Dijkstra + pb_ds]

    3040: 最短路(road) Time Limit: 60 Sec  Memory Limit: 200 MBSubmit: 2476  Solved: 814[Submit][Status][Di ...

  3. 关于.NET C#上传大文件的解决办法

    1.最近在解决问题的时候遇到如何将视频以及语音和图片上传到阿里云的服务器中.但是遇到一些大文件就导致无法进行上传. 2.在将图片进行上传到阿里云的时候先将文件转化为二进制文件,然后通过文件流 的形式进 ...

  4. Python学习-使用opencv-python提取手掌和手心及部分掌纹

    上次我们成功训练了手掌识别器http://www.cnblogs.com/take-fetter/p/8438747.html,可以成功得到识别的结果如图 接下来需要使用opencv来获取手掌,去除背 ...

  5. 嵌入式linux系统的构建

    前期工作:a.配置好tftp服务器:在嵌入式的童年中有介绍 b.开发板可以pc,linux 三者可以互相ping通 c.配置好nfs服务器:同样在嵌入式的童年中有介绍 一.嵌入式linux内核的制作( ...

  6. shell编程之SHELL基础(1)

    shell脚本基础 shell是一个命令行解释器,她为互用提供了一个想linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动.挂起.停止甚至编写一些程序. shell还是一个功 ...

  7. Swift iOS 日期操作:NSDate、NSDateFormatter

    1.日期(NSDate) // 1.初始化 // 初始化一个当前时刻对象 var now = NSDate() // 初始化一个明天当前时刻对象 var tomorrow = NSDate(timeI ...

  8. mysql sql_cache缓存使用

    有如下规则,如果数据表被更改,那么和这个数据表相关的全部Cache全部都会无效,并删除之.这里"数据表更改"包括: INSERT, UPDATE, DELETE, TRUNCATE ...

  9. [翻译]【目录】编写高性能 .NET 代码

    本篇是 Writing High-Performance .NET Code 的目录索引,翻译内容不定时更新,目录也会同步修改. 性能测量及工具 选择什么来衡量 平均数vs百分比 工具介绍 Visua ...

  10. 软AP的实现------hostapd的编译运行

    最近要给摄像头做一个软ap,让手机能够连上这个热点,从而能够与摄像头进行通信. 1.什么是hostapd : hostapd能够使得无线网卡切换为master模式,模拟AP(通常可以认为是路由器)功能 ...