用大白话给你讲明Zookeeper的选举机制
发布时间:2021-06-04 15:08:17 所属栏目:大数据 来源:互联网
导读:人类选举的基本原理 讲解 Zookeeper 选举过程前先来介绍一下人类的选举。 我们每个人或多或少都经历过几次选举,在投票的过程中可能会遇到这样几种情况: 情况1:自己与几个候选人都比较熟,你会将票投给你认为能力比较强的人; 熟人选举 情况2:自己也是候选
|
人类选举的基本原理
讲解 Zookeeper 选举过程前先来介绍一下人类的选举。
我们每个人或多或少都经历过几次选举,在投票的过程中可能会遇到这样几种情况:
情况1:自己与几个候选人都比较熟,你会将票投给你认为能力比较强的人;
熟人选举
情况2:自己也是候选人,并且与其他几个候选人都不熟,这个时候你肯定想着要去拉票,因为觉得自己才是最厉害的人呀,所有人都应该把票投给我。但是遗憾的是在拉票的过程中,你发现别人比你强,你开始自卑了,最终还是把票投给了自己认为最强的人。
自己参与选举
所有人都投完票之后,最后从投票箱中进行统计,获得票数最多的人当选。
思维导图
在整个投票过程中我们可以提炼出四个最核心的概念:
候选人能力:投票的基本原则是选最强的人。
遇强改投:如果后面发现更强的人可以改投票。
投票箱:所有人的票都会放在投票箱。
领导者:得票最多的人即为领导者。
从人类选举的原理我们来简单推导一下Zookeeper的选举原理。
Zookeeper选举的基本原理
注意如果 Zookeeper 是单机部署是不需要选举的,集群模式下才需要选举。
Zookeeper 的选举原理和人类选举的逻辑类似,套用一下人类选举的四个基本概念详细解释一下Zookeeper。
个人能力
如何衡量 Zookeeper 节点个人能力?答案是靠数据是否够新,如果节点的数据越新就代表这个节点的个人能力越强,是不是感觉很奇怪,就是这么定的!
在 Zookeeper 中通常是以事务id(后面简称zxid)来标识数据的新旧程度(版本),节点最新的zxid越大代表这个节点的数据越新,也就代表这个节点能力越强。
zxid 的全称是 ZooKeeper Transaction Id,即 Zookeeper 事务id。
遇强改投
在集群选举开始时,节点首先认为自己是最强的(即数据是最新的),然后在选票上写上自己的名字(包括zxid和sid),zxid 是事务id,sid 唯一标识自己。
紧接着会将选票传递给其他节点,同时自己也会接收其他节点传过来的选票。每个节点接收到选票后会做比较,这个人是不是比我强(zxid比我大),如果比较强,那我就需要改票,明明别人比我强,我也不能厚着脸皮对吧。
投票箱
与人类选举投票箱稍微有点不一样,Zookeeper 集群会在每个节点的内存中维护一个投票箱。节点会将自己的选票以及其他节点的选票都放在这个投票箱中。由于选票是互相传阅的,所以最终每个节点投票箱中的选票会是一样的。
领导者
在投票的过程中会去统计是否有超过一半的选票和自己选择的是同一个节点,即都认为某个节点是最强的。一旦集群中有超过半数的节点都认为某个节点最强,那该节点就是领导者了,投票也宣告结束。
什么场景下 Zookeeper 需要选举?
当 Zookeeper 集群中的一台服务器出现以下两种情况之一时,需要进入 Leader 选举。
(1)服务器初始化启动。
(2)服务器运行期间 Leader 故障。
![]() (编辑:上饶站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


