Zookeeper是怎么进行选举的?

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: ZK基础
节点的状态

looking 正在参与竞选状态,会参与投票 leading 选举结束,主节点的状态 following 选举结束,从节点的状态 一开始所有节点都是looking状态,进行选举,选举出主节点后, 主节点的状态是leading,其他节点状态是following,主节点挂了之后,需要进行新一轮的选举,所有节点又变成looking。

所有节点都有两个属性,SID:节点ID,zoo.cfg中配置的myid,ZXID:节点当前的最大事务ID 选举的目的就是选目前所有节点中拥有最大ZXID的节点作为Leader,如果拥有的ZXID相同,就选取SID最大的节点作为Leader。

全新的集群leader选举

启动时,当集群没有leader时,每个机器会将票投给SID最大的机器(越晚加入的机器SID越大) 有leader时会将票投给leader。 假设有五个节点,一开始A启动时之会将票投给自己,B启动时之后将票投给B,A也投给B,C启动时,A,B,C都投个C C得票超过半数,C成为leader,之后加入的D,E也只会投给C。


非全新的集群leader选举

基本原则是

1.选epoch值大的,epoch值小的投票结果会被忽略掉。 2.epoch值相同时,把票投给ZXID大的节点。 3.ZXID相同时,把票投给SID(server id)大的节点。 得票超过半数的节点会成为leader。 通常是数据越新的节点越有可能成为主节点。

投票阶段
1.初始化选票

将逻辑时钟+1,初始化选票, 每个节点都会投给自己,然后选票发给其他节点

2.处理选票信息

从其他节点B收到投票信息后,进行处理

2.1 如果本节点的逻辑时钟小于接受这条投票的逻辑时钟,

说明本节点之前错过了上一轮的投票,将当前存储的选票信息清空,

2.2 如果本节点的逻辑时钟大于接受的这条投票的逻辑时钟,那么忽略掉这条投票信息。

2.3 本节点的逻辑时钟等于接受的这条投票的逻辑时钟,那么进行处理,与本节点当前投票的结果进行比较 先比较ZXID(数据ID,越大代表数据越新),ZXID越大的应该当leader,ZXID相同比较SID,SID越大的当leader。

2.4如果比较的结果跟当前节点的投票结果不一致,那么需要更改选票,将更改后的选票结果发送给其他节点。

2.5 将其他节点B的投票结果记录下来

3.统计选票

对当前收到的所有投票信息进行统计,看是否有节点获得半数以上的选票,有的话就将它设置为leader,然后终止投票,否则继续投票,继续步骤2。

4.发现阶段

所有follower会向leader发送epoch和ZXID(最大事务ID),然后leader选取最大的事务ID作为当前最新的ID

5.同步阶段

通知其他follower节点进行同步,将数据更新到最大的事务ID。

原子广播阶段

这时正式向客户端提供服务,leader接受客户端的写请求后,会将请求通过队列发送个每个节点,每个节点收到消息后将记录写到磁盘, 并且返回ACK给leader,当半数以上的从节点返回ACK后,leader才commit这条更新。

https://www.ymq.io/2018/05/23/zookeeper-election/

https://blog.csdn.net/MuErHuoXu/article/details/85864535

https://blog.csdn.net/hotchange/article/details/81192122

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6月前
|
存储 负载均衡 算法
深入浅出Zookeeper源码(七):Leader选举
对于一个分布式集群来说,保证数据写入一致性最简单的方式就是依靠一个节点来调度和管理其他节点。在分布式系统中我们一般称其为Leader。
204 6
|
6月前
|
消息中间件 分布式计算 算法
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析(上)
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析
544 0
|
存储 算法 Java
准备跳槽必看的这道【Java面试题】:谈谈你对Zookeeper 选举原理的理解
一位工作了 7 年的程序员,最近在面试时被问到一个关于Zookeeper的问题。因为平时很少研究,所以面试的时候只能一直说:不知道,不知道,不知道。当时,他感觉很尴尬,面试还没结束,就已经知道应该被Pass了。于是又来问我,希望我能分享一期这样的视频。
100 2
|
数据安全/隐私保护
Zookeeper快速入门(Zookeeper概述、安装、集群安装、选举机制、命令行操作、节点类型、监听器原理)(二)
Zookeeper快速入门(Zookeeper概述、安装、集群安装、选举机制、命令行操作、节点类型、监听器原理)(二)
|
1月前
|
分布式计算 负载均衡 算法
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
28 1
|
2月前
|
存储 负载均衡 算法
分布式-Zookeeper-Master选举
分布式-Zookeeper-Master选举
|
4月前
|
存储 数据库
zookeeper 集群环境搭建及集群选举及数据同步机制
zookeeper 集群环境搭建及集群选举及数据同步机制
72 2
|
算法 Linux
分布式系列教程(14) -分布式协调工具Zookeeper(集群选举策略)
分布式系列教程(14) -分布式协调工具Zookeeper(集群选举策略)
82 0
|
Java 开发工具 Maven
分布式系列教程(12) -分布式协调工具Zookeeper(选举与哨兵机制)
分布式系列教程(12) -分布式协调工具Zookeeper(选举与哨兵机制)
84 0
|
存储
zookeeper的leader选举原理和底层源码实现超级详解 2
zookeeper的leader选举原理和底层源码实现超级详解
80 1