十、Zookeeper (leader)选举机制

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 十、Zookeeper (leader)选举机制

zookeeper选举第一次启动:


一、选举一般分为两种情况:


第一种:初始化集群时进行leader选举。


第二种:原来选出的leader挂掉,出现障碍,需要重新选举时。


二、zookeeper节点的4种状态:


 (1)LEADING:说明此节点已经是leader节点,处于领导者地位的状态,差不多就是一般集群中的master。但在zookeeper中,只有leader才有写的权限,其他节点(FOLLOWING)是没有写权限的,只可以读。


(2)LOOKING:选举中,正在寻找leader,即将进入leader选举流程中(等待)。


(3)FOLLOWING:跟随者,表示当前集群中的leader已经选举出来了。


(4)OBSERVING:OBSERVING和FOLLOWING差不多,但不参加投票和选举,接受leader选举后的结果。


三、选举时的具体过程:(如图)



29.png

投票开始:首先每个server都有属于自己的一张票。在初始化或者server崩溃数过半的时候,每个server都有一个自身的myid(zookeeper配置文件)。


(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING;


(2)服务器2启动,发起一次选举。服务器1和服务器2分别投自己一票并交换投票信息;此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改投票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2保持LOOKING;


(3)服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改为LEADING;


(4)服务器4启动,发起一次选举。此时1,2,3已经不是LOOKING状态;不会更改选票信息。交换选票结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING;


(5)服务器5启动,同4一样当小弟。


四、三个概念(SID,ZXID,Epoch):


SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。


ZXID:事物ID。ZXID是一个事物ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”’的处理逻辑有关。


Epoch:每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加。


Zookeeper选举非第一次启动:

当一台机器进入Leader选举流程时,当前集群也可能会处于以下两种状态:


(1)集群中本来就已经存在一个Leader。


对于第一种已经存在Leader的情况,机器试图去选举 Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。


(2)集群中确实不存在Leader。


假设Zookeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为8、8、8、7、7,并且此时SID为3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举。


                               (EPOCH,ZXID,SID)(EPOCH,ZXID,SID)(EPOCH,ZXID,SID)


SID为1,2,4 的机器投票情况:(1,8,1)                       (1,8,2)                        (1,7,4)


选举Leader规则:   1、EPOCH大的直接胜出


                            2、EPOCH相同,事物id大的胜出


                            3、事物id相同,服务器id大的胜出


其他环境搭建可以参考我的其他博客(链接):


Hadoop伪分布式的搭建详情


Hadoop完全分布式的搭建详情


Zookeeper集群的搭建(单机、伪分布式、集群)


Spark的安装与部署详情(Local模式,Standalone模式,Spank on YARN模式)


HadoopHA工作机制(高可用)


HadoopHA环境搭建(保姆篇,手把手搭建)


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
5月前
|
存储 负载均衡 算法
深入浅出Zookeeper源码(七):Leader选举
对于一个分布式集群来说,保证数据写入一致性最简单的方式就是依靠一个节点来调度和管理其他节点。在分布式系统中我们一般称其为Leader。
170 6
|
4月前
|
消息中间件 分布式计算 算法
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析(上)
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析
61 0
|
8月前
|
存储 算法 Java
准备跳槽必看的这道【Java面试题】:谈谈你对Zookeeper 选举原理的理解
一位工作了 7 年的程序员,最近在面试时被问到一个关于Zookeeper的问题。因为平时很少研究,所以面试的时候只能一直说:不知道,不知道,不知道。当时,他感觉很尴尬,面试还没结束,就已经知道应该被Pass了。于是又来问我,希望我能分享一期这样的视频。
68 2
|
6月前
|
算法 Linux
分布式系列教程(14) -分布式协调工具Zookeeper(集群选举策略)
分布式系列教程(14) -分布式协调工具Zookeeper(集群选举策略)
58 0
|
6月前
|
Java 开发工具 Maven
分布式系列教程(12) -分布式协调工具Zookeeper(选举与哨兵机制)
分布式系列教程(12) -分布式协调工具Zookeeper(选举与哨兵机制)
47 0
|
9月前
|
存储
zookeeper的leader选举原理和底层源码实现超级详解 2
zookeeper的leader选举原理和底层源码实现超级详解
51 1
|
4月前
|
监控 算法 网络协议
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析(下)
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析
38 1
|
5月前
Zookeeper的选举机制原理(图文深度讲解)——过半选举
Zookeeper的选举机制原理(图文深度讲解)——过半选举
84 0
|
9月前
|
存储 负载均衡 算法
|
1月前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
123 2