zookeeper选举机制有什么作用(zookeeper在什么情况下选举)

技术Zookeeper的选举机制是什么样的Zookeeper的选举机制是什么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Zookeep

动物园管理员的选举机制是什么?很多新手对此不是很清楚。为了帮助大家解决这个问题,下面小编就为大家详细讲解一下。需要的人可以从中学习,希望你能有所收获。

Zookeeper是一个分布式服务框架,主要用于解决分布式应用中遇到的一些数据管理问题,如统一命名服务、状态同步服务、集群管理、分布式应用配置项管理等。

我们可以简单地把Zookeeper理解为分布式家庭的管家,那么管家团队是如何选择Leader的呢?好奇?让我们来看看。

人类选举的基本原理

在解释动物园管理员的选举过程之前,我们先介绍一下人类选举。

我们每个人或多或少都经历过几次选举,在投票过程中可能会遇到以下情况:

情况一:你熟悉几个候选人,你会投给你认为更有能力的人;

Zookeeper的选举机制是什么样的

熟人选举

情况二:我也是考生,对其他几个考生不熟悉。这个时候你肯定在考虑拉票,因为你觉得自己是最好的人,大家都应该投我一票。可惜在拉票的过程中,你发现别人比你优秀,你开始自卑。最后,你把票投给了你认为最强的人。

Zookeeper的选举机制是什么样的

自己参加选举

每个人投完票后,最后会从投票箱中清点,得票最多的人当选。

Zookeeper的选举机制是什么样的

思维导图

在整个投票过程中,我们可以提炼出四个核心概念:

候选人能力:投票的基本原则是选择最强的人。

如果是强票:如果后来发现更强的人,他可以改变投票。

投票箱:所有人的票都会放在投票箱里。

领袖:领袖是得票最多的人。

从人类的选举原则出发,我们简单地推导一下动物园管理员的选举原则。

Zookeeper选举的基本原理

请注意,如果Zookeeper部署在单台机器上,则不需要选举,而只需要集群模式。

动物园管理员的选举原则类似于人类选举的逻辑。应用人类选举的四个基本概念详细解释动物园管理员。

个人能力

如何衡量动物园管理员节点的个人能力?答案取决于数据是否足够新。如果一个节点的数据比较新,说明这个节点的个人能力比较强。感觉奇怪吗?就这样!

在Zookeeper中,事务id(以下简称zxid)通常用于标识数据的新度(版本)。一个节点的最新zxid越大,这个节点的数据就越新,这个节点的能力就越强。

zxid的全称是Zookeeper事务id,也就是ZooKeeper事务Id。

遇强改投

在集群选举开始时,节点首先认为自己最强(即数据最新),然后在选票上写上自己的名字(包括zxid和sid),其中zxid是交易id,sid唯一标识自己。

然后,它将投票传递给其他节点,同时,它还将接收来自其他节点的投票。收到选票后,每个节点都会比较这个人是不是比我强(zxid比我大)。如果是的话,那么我需要换票。别人比我强的时候我也不能厚脸皮吧?

投票箱

与人类选举投票箱略有不同,Zookeeper集群在每个节点的内存中维护一个投票箱。节点会把自己的选票和其他节点的选票放在这个投票箱里。由于选票是相互分发的,每个节点的投票箱中的选票最终将是相同的。

领导者

在投票的过程中,我们会统计是否有超过一半的选票和我们的选择在同一个节点,也就是我们都认为某个节点最强。一旦集群中超过一半的节点认为某个节点最强,那个节点就是领头羊,投票就结束了。

什么场景下 Zookeeper 需要选举?

当Zookeeper集群中的服务器出现以下两种情况之一时,需要进入Leader选举。

(1)服务器被初始化和启动。

(2)在服务器运行期间,Leader失败。

启动时期的 Leader 选举

假设动物园管理员集群中有五个服务。

器,id从1到5编号,并且它们都是最新启动的,没有历史数据。

Zookeeper的选举机制是什么样的

集群刚启动选举过程

假设服务器依次启动,我们来分析一下选举过程:

(1)服务器1启动

发起一次选举,服务器1投自己一票,此时服务器1票数一票,不够半数以上(3票),选举无法完成。

投票结果:服务器1为1票。

服务器1状态保持为LOOKING。

(2)服务器2启动

发起一次选举,服务器1和2分别投自己一票,此时服务器1发现服务器2的id比自己大,更改选票投给服务器2。

投票结果:服务器1为0票,服务器2为2票。

服务器1,2状态保持LOOKING

(3)服务器3启动

发起一次选举,服务器1、2、3先投自己一票,然后因为服务器3的id最大,两者更改选票投给为服务器3;

投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数(3票),服务器3当选Leader。

服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING。

(4)服务器4启动

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

服务器4并更改状态为FOLLOWING。

(5)服务器5启动

与服务器4一样投票给3,此时服务器3一共5票,服务器5为0票。

服务器5并更改状态为FOLLOWING。

最终的结果:

服务器3是 Leader,状态为 LEADING;其余服务器是 Follower,状态为 FOLLOWING。

运行时期的Leader选举

在 Zookeeper运行期间 Leader 和 非 Leader 各司其职,当有非 Leader 服务器宕机或加入不会影响 Leader,但是一旦  Leader 服务器挂了,那么整个 Zookeeper 集群将暂停对外服务,会触发新一轮的选举。

初始状态下服务器3当选为Leader,假设现在服务器3故障宕机了,此时每个服务器上zxid可能都不一样,server1为99,server2为102,server4为100,server5为101

Zookeeper的选举机制是什么样的

集群 Leader 节点故障

运行期选举与初始状态投票过程基本类似,大致可以分为以下几个步骤:

(1)状态变更。Leader 故障后,余下的非 Observer  服务器都会将自己的服务器状态变更为LOOKING,然后开始进入Leader选举过程。

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

(3)接收来自各个服务器的投票,如果其他服务器的数据比自己的新会改投票。

(4)处理和统计投票,每一轮投票结束后都会统计投票,超过半数即可当选。

(5)改变服务器的状态,宣布当选。

话不多说先来一张图:

Zookeeper的选举机制是什么样的

运行器 Leader 故障后选举流程

(1)第一次投票,每台机器都会将票投给自己。

(2)接着每台机器都会将自己的投票发给其他机器,如果发现其他机器的zxid比自己大,那么就需要改投票重新投一次。比如server1  收到了三张票,发现server2的xzid为102,pk一下发现自己输了,后面果断改投票选server2为老大。

选举机制中涉及到的核心概念

敲黑板了,这些概念是面试必考的。

(1)Server id(或sid):服务器ID

比如有三台服务器,编号分别是1,2,3。编号越大在选择算法中的权重越大,比如初始化启动时就是根据服务器ID进行比较。

(2)Zxid:事务ID

服务器中存放的数据的事务ID,值越大说明数据越新,在选举算法中数据越新权重越大。

(3)Epoch:逻辑时钟

也叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的,每投完一次票这个数据就会增加。

(4)Server状态:选举状态

LOOKING,竞选状态。

FOLLOWING,随从状态,同步leader状态,参与投票。

OBSERVING,观察状态,同步leader状态,不参与投票。

LEADING,领导者状态。

总结

(1)Zookeeper 选举会发生在服务器初始状态和运行状态下。

(2)初始状态下会根据服务器sid的编号对比,编号越大权值越大,投票过半数即可选出Leader。

(3)Leader 故障会触发新一轮选举,zxid 代表数据越新,权值也就越大。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/157338.html

(0)

相关推荐

  • Maven编译打包时如何忽略测试用例

    技术Maven编译打包时如何忽略测试用例本篇文章给大家分享的是有关Maven编译打包时如何忽略测试用例,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。跳过测试

    攻略 2021年10月29日
  • SQL Server配置管理器无法连接到WMI提供程序该怎么办

    技术SQL Server配置管理器无法连接到WMI提供程序该怎么办SQL Server配置管理器无法连接到WMI提供程序该怎么办,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的

    攻略 2021年11月30日
  • 学Python要避免哪些坑

    技术学Python要避免哪些坑学Python要避免哪些坑,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。学Python要避免哪些坑?零基础怎么入门Pyth

    攻略 2021年12月4日
  • 华为手机什么型号好,现在华为哪款手机值得购买

    技术华为手机什么型号好,现在华为哪款手机值得购买华为手机比较好的型号当然推荐华为mate 系列和P系列了华为手机什么型号好。华为手机现在型号系列不断拓展,型号分布也十分丰富了,最为顶尖的华为手机型号先推荐华为mate 系

    生活 2021年10月28日
  • 高锰酸钾制取氧气化学式,高锰酸钾制取氧气怎么念

    技术高锰酸钾制取氧气化学式,高锰酸钾制取氧气怎么念高锰酸钾制取氧气化学方程式高锰酸钾制取氧气化学式:
    2KMnO4
    加热==K2MnO4+MnO2+O2↑
    高锰酸钾制取氧气步骤:
    1,装配实验装置(试管内的导管稍伸出胶塞

    生活 2021年10月26日
  • Hibernate配置文件的示例分析

    技术Hibernate配置文件的示例分析小编给大家分享一下Hibernate配置文件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!有

    攻略 2021年11月17日