文档章节

zookeeper Leader Elections

robin-yao
 robin-yao
发布于 2015/04/17 22:31
字数 966
阅读 138
收藏 1
点赞 1
评论 0

     本文主要介绍zookeeper leader选举机制。

     zookeeper中leader主要处理来至客户端的写请求,包括create、setData、delete等改变数据的状态的写请求。在zookeeper集群中,每一个zookeeper Server节点开始的状态都是LOOKING,它必须选择一个新的Leader,或者找到已经存在的Leader。

     如果此时,集群中存在 Leader,其他集群的中节点将通知新进入的Server节点哪个是Leader节点,新节点将连接到Leader上,并且同步Leader的状态,使之一致。

      如果此时集群不存在Leader,都是LOOKING状态,它们将选举出新的Leader。节点通过相互发送消息,选举出Leader。选举出的节点将进入LEADING状态,其他的节点将进入FOLLOWING状态。

    leader选举消息又被叫作leader选举通知。当一个节点进入LOOKING状态时,它将发送给其他每一个节点通知。通知包含它当前的选举(vote),由sid (Server Id) 和 zxid(zookeeper事务id,最新的事务id)组成。比如(1,5)通知代表被server id为1,最新事务id为5的节点放送的。

    当收到一个vote通知,节点将根据如下规则改变自己的vote:

    1设定 voteId 和 voteZxid 代表当前节点受到的vote标识,myZxid和mySid代表receiver自己本身的值。

    2 如果 voteZxid > myZxid 或者 (voteZxid==myZxid and voteId > mySid),receiver将保持当前的vote,也就是赞同当前的选举。

    3否者,receiver将改变自己的vote, 该vote 为(mySid,myZxid),也就是说我不赞同当前收到的vote,我要自己当领         导。

简而言之,就是最近发起的vote将会获胜,谁的zxid大,谁获胜,如果zxid相同,就只能比较节点标示id的大小了(同一辈子,嫡长子继承了,哈哈)。紧接着,如果receiver赞同收到的选举,它将向其他节点发送该通知。一旦有一个节点 收到  来至半数  以上的节点 同样的vote(sid,zxid),该节点就声明LEADER选举出来了。如果LEADER是该节点本身,它将承担起Leader角色的功能。如果不是,它将变为一个Follower,并且连接LEADER,同步leader的状态,然后处理来至客户端的请求。

  通过如下图详解上述过程,假设集群中有三个节点:

         第一步:3个节点都将向其他节点 发送各自的选举vote ;

         第二步:通过我们刚才讲的规则,S2 和 S3的zxid比较小,所以它们的vote都变为(1,6),并且通知其他节点;

         第三步:三个节点 都收到半数以上的对(1,6)选举。所以S1被选为Leader。

并不是所有的选举过程都像上面的过程那么顺利,往往由于网络delay,会造成不同上述的过程。如下:

     第一步:由于S1 到 S2 网络delay,当S2受到S3的vote(3,5),并赞同该(3,5),发出通知,选举S3。

     第二步:S3受到(1,6),但是由于网络delay,它发出的通知到S1比较慢,而此时,S3已经有半数的投票了。所以S3被选为Leader。

    第三步:S1接到S3的投票,S1也有半数以上的投票,S1也被选为Leader。

这样会怎么办呢??  在第二步的时候S3不响应S2提出选自己作为Leader,因为自己vote已经变为(1,6)了,所以S3不会相应S2提出自己作为Leader的要求。所有S2会等待超时,最终S1成为Leader。 

  这只是一种延时的例子,还有很多其他例子,就不一一列举了。

 该文章内容参照:ZooKeeper: Distributed Process Coordination 这本书。

 转发请标注来源:http://my.oschina.net/robinyao/blog/403215

END----------------------------------------------------------------------


 

     

© 著作权归作者所有

共有 人打赏支持
robin-yao
粉丝 150
博文 54
码字总数 61496
作品 0
杭州
详解分布式应用程序协调服务Zookeeper

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 主从结构:HDFS、Yarn、HBa...

李金泽
03/09
0
0
zookeeper的安装与部署-集群

环境:centos7 、JDK8 一、Zookeeper原理简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。 ...

binhu
2017/11/07
0
0
zookeeper3.3学习笔记4:zookeeper的三种角色

zookeeper的每个节点可以有如下三种角色: 1.leader和follower ZooKeeper需要在所有的服务(可以理解为服务器)中选举出一个Leader,然后让这个Leader来负责管理集群。此时,集群中的其它服务...

涩女郎
2015/06/20
0
0
分布式锁服务ZooKeeper

ZooKeeper的安装和配置: 下载ZooKeeper 解压:tar -xzvf zookeeper-3.4.3.tar.gz 在conf目录下创建一个配置文件zoo.cfg,tickTime=2000 dataDir=/opt/zookeeper/data dataLogDir=/opt/zooke......

Stefan555
2014/01/24
0
1
Apache Zookeeper入门1

作者: H.E. | 您可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://www.javabloger.com/article/apache-zookeeper-hadoop.html 口水:Zookeeper是我目前接触过...

风林火山
2010/12/18
0
3
2018-07-11期 Zookeeper集群安装部署【本人亲自反复验证通过分享】

简介: ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能...

JackmaSong
07/11
0
0
zookeeper集群搭建设置

zookeeper 官网:http://zookeeper.apache.org/ 现在最新版本是 3.4.6 ,但是这个版本我没有运行起来,可能是那配置出现问题了,现在我用的是3.4.5 http://apache.fayea.com/apache-mirror/z...

dev_zh
2014/08/01
0
2
zookeeper 安装配置,部署

从Apache网站上(zookeeper.apache.org)下载ZooKeeper软件包 2.解压到指定目录 . /home/zookeeper-1 /home/zookeeper-2 /home/zookeeper-3 3.创建每个目录下conf/zoo.cfg配置文件内容如下 ...

菩提_
2017/10/28
0
0
zookeeper、dubbo、kafka随笔

1 zookeeper如何实现高可用 1 zookeeper 多台构成集群实现高可用,有三种角色群首(leader),追随者(follower),观察者(observer)。 Leader作为整个ZooKeeper集群的主节点,负责响应所有...

独一无二zz
06/28
0
0
solrcloud&zookeeper集群搭建

solrcloud&zookeeper集群搭建 zookeeper的配置 解压 tar –zxvf zookeeper.XXX.tar.gz 配置 dataDir :zookeeper的管理的节点信息需要记录在该路径下的data目录下 默认启动端口2181 上述截图为...

Abel-ymg
2013/08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JAVA 三种WebService 规范

JAVA 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。 1. Jaxws(掌握) JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务...

onedotdot
16分钟前
0
0
将博客搬至CSDN

将博客搬至CSDN

xpbob
17分钟前
0
0
TensorFlow 拟合异或 one-hot方式

增加隐含层数目 之前是按照计算出的数值按照0.5分为0和1,现在是算出向量,用维度较大的作为结果 import tensorflow as tfimport numpy as np# 网络结构:2维输入 --> 2维隐藏层 --> ...

阿豪boy
20分钟前
0
0
Aidl进程间通信详细介绍

目录介绍 1.问题答疑 2.Aidl相关属性介绍 2.1 AIDL所支持的数据类型 2.2 服务端和客户端 2.3 AIDL的基本概念 3.实际开发中案例操作 3.1 aidl通信业务需求 3.2 操作步骤伪代码 3.3 服务端操作...

潇湘剑雨
35分钟前
0
0
python爬虫日志(3)下载图片

import urlliburl='https://xxx.jpg'#图片地址res=urllib.request.urlopen(url)#此函数用于对url的访问data=res.read() #字节流with open(r'D:\1.jpg',"wb") as code: c...

茫羽行
52分钟前
0
0
vue中$emit的用法

1、父组件可以使用 props 把数据传给子组件。 2、子组件可以使用 $emit 触发父组件的自定义事件。 vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( event, fn );//监听event事件后运...

JamesView
今天
0
0
bash审计系统搭建

step1:使用saltstack工具bash部署>>>>>> # salt -N clienta state.sls audit step2:安装elasticsearch>>>>>> 注意: 1.不能以root用户进行启动,需要创建用户,并对解压的elasticsearch目录赋......

硅谷课堂
今天
0
0
Linux sar性能分析

Linux使用sar进行性能分析 sar简介 sar命令常用格式 sar常用性能数据分析 整体CPU使用统计-u 各个CPU使用统计-P 内存使用情况统计-r 整体IO情况-b 各个IO设备情况-d 网络统计-n sar日志保存-...

易野
今天
0
0
用 Python 实现打飞机,让子弹飞吧!

所用技术和软件 python 2.7 pygame 1.9.3 pyCharm 准备工作 安装好 pygame 在第一次使用 pygame 的时候,pyCharm 会自动 install pygame。 下载好使用的素材。 技术实现 初始化 pygame 首先要...

猫咪编程
今天
0
0
MySQL的行锁和表锁

简单总结一下行锁和表锁。 行锁 每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 表锁 每次操作锁住整张表。开销小,加锁快;不会出...

to_ln
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部