什么时候开始进行选举

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. http协议重点

    https://www.cnblogs.com/ranyonsue/p/5984001.html HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议) ...

  2. 从一个实例学习----FLASK-WTF

    本案例通过实现一个注册页面的编写,来带你了解FLASK-WTF的运用. 主要功能为表单基础的功能--手机号码必须为11位数,且通过数据库查找不能有已经注册的了,密码要求输入两遍且必须一样,且所有内容不 ...

  3. zookeeper 内部机制学习

    zookeeper 内部机制学习 1. zk的设计目标 最终一致性:client不论连接到那个Server,展示给它的都是同一个视图. 可靠性:具有简单.健壮.良好的性能.如果消息m被到一台服务器接收 ...

  4. CentOS 7 安装Java 1.8

    携程的Apollo配置中心服务端[https://github.com/ctripcorp/apollo/wiki]推荐的Java版本是:1.8+, 本文介绍如何在CentOS上安装java 1.8. ...

  5. FTP主动模式和被动模式

    FTP主动模式和被动模式 FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这两个端口是21(命令端口)和20(数据端口 ...

  6. js分页功能实现

    实现一个js的分页并在弹出框中显示 1.分页插件使用:bootstarp-paginator.js,需要先引入bootstarp.js和jquery.js等: !function($){"u ...

  7. CentOS利用Nginx+Docker部署.netcore应用

    安装docker 官方文档https://docs.docker.com/engine/installation/linux/docker-ce/centos/ [root@sn ~]# yum re ...

  8. python 列表去重(数组)的几种方法(转)

    一.方法1  代码如下 复制代码 ids = [1,2,3,3,4,2,3,4,5,6,1] news_ids = [] for id in ids:     if id not in news_id ...

  9. 二、Item Pipeline和Spider-----基于scrapy取校花网的信息

    Item Pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline ...

  10. datatables行编辑中,某个字段用户显示和用于行编辑名称不同时的处理。

    比如tag这个字段,对应服务端bean的tag,但是在页面显示时需要为String类型的tagName,那么在行编辑时可以用以下的方式处理.