博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Zookeeper leader选举
阅读量:4959 次
发布时间:2019-06-12

本文共 972 字,大约阅读时间需要 3 分钟。

Leader选举概述

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

​ (1) 服务器初始化启动。
​ (2) 服务器运行期间无法和Leader保持连接。

1.服务初始化期间

​ 若进行Leader选举,则至少需要两台机器,这里选取3台机器组成的服务器集群为例。

​ 在集群初始化阶段,当有一台服务器Server1启动时,其单独无法进行和完成Leader选举,当第二台服务器Server2启动时,此时两台机器可以相互通信,每台机器都试图找到Leader,于是进入Leader选举过程。选举过程如下:

(1) 每个Server发出一个投票

​ 使用(myid, ZXID)来表示,每个server的投票数。

(2) 接受来自各个服务器的投票

​ 首先判断该投票的有效性,如检查是否是本轮投票、是否来自LOOKING状态的服务器。

(3) 处理投票

​ 优先检查ZXID,如果ZXID相同,那么就比较myid。

(4) 统计投票

​ 判断是否已经有过半机器接受到相同的投票信息.

(5) 改变服务器状态

​ 服务器具有四种状态,分别是LOOKING(寻找Leader状态)、OBSERVING(观察者状态)、FOLLOWING(跟随者状态)、LEADING(领导者状态)。

​ 如果是Follower,那么就变更为FOLLOWING,如果是Leader,就变更为LEADING。

2.服务器运行期间无法和Leader保持连接

​ 在Zookeeper运行期间,Leader与非Leader服务器各司其职,即便当有非Leader服务器宕机或新加入,此时也不会影响Leader,但是一旦Leader服务器挂了,那么整个集群将暂停对外服务,进入新一轮Leader选举,其过程和启动时期的Leader选举过程基本一致。

(1) 变更状态

​ Leader挂后,余下的非Observer服务器都会讲自己的服务器状态变更为LOOKING,然后开始进入Leader选举过程。

(2) 每个Server会发出一个投票

(3) 接收来自各个服务器的投票

(4) 处理投票

(5) 统计投票

(6) 改变服务器的状态

转载于:https://www.cnblogs.com/aric2016/p/11375496.html

你可能感兴趣的文章
java语法之final
查看>>
python 多进程和多线程的区别
查看>>
hdu1398
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
Setting up a Passive FTP Server in Windows Azure VM(ReplyCode: 227, Entering Passive Mode )
查看>>
Python模块调用
查看>>
委托的调用
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
错误org/aopalliance/intercept/MethodInterceptor解决方法
查看>>
Pylint在项目中的使用
查看>>