zookeeper原理篇-Zookeeper选举过程分析,计算机专业必看

本文详细分析了Zookeeper的选举过程,包括服务端启动时和运行期间的选举,以及选举算法,特别是Leader选举的细节,如消息队列处理、连接建立、消息发送等,并重点探讨了FastLeaderElection算法的工作原理。
摘要由CSDN通过智能技术生成

选举过程概述

经过前面的zookeeper相关的文章,我们也对zookeeper有一定的了解,知道在zookeeper中存在三种服务器角色,分别是Leader,Follower以及Observer,其中Observer仅仅作为一个监控协调者的作用,并不参与zookeeper对外提供服务以及zookeeper的选举,而zookeeper的选举我们从前面的内容也知道,总共可以分为两种,第一种是当整个zookeeper的集群启动后,进行的选举过程,第二种则是在zookeeper运行期间,当出现Leader崩溃的过程时,zookeeper进行的选举操作。接下来我们先从启动的时候触发的选举开始学习

服务端启动时选举过程

我们在搭建zookeeper的时候往往会有一个配置文件,里面存放一个myid,用来标示集群内不同客户端的机器编号,当至少两台含有myid的机器启动后,就开始进入了zookeeper的集群选举流程

1.每个server发起一个投票

由于当前是刚启动状态,因此每一个服务实例都会默认把自己作为Leader服务器来发起投票,而每一个投票中包含了最基本的选举所需要的元素,例如myid和ZXID,我们将这两个按照选票的方式表示,例如myid为1,ZXID为0,我们将会表示为(1,0),由于每台服务端实例优先都是按照自己是Leader发起投票,那么server1默认生成的选票就是(1,0),server2的选票则是(2,0),以此类推

2.接受到其他服务端实例发来的选票

没台服务端实例都会收到其他服务端实例发来的选票信息,当收到选票后,就会开始校验处理选票的流程

3.校验处理选票

其他服务实例发来的选票,要经过一系列验证,比如是不是本轮投票的选票,是否来自于Looking状态的实例发来的选票,经过校验后,就会和当前实例的选票信息进行pk比较,比较的规则大致如下:

①优先比较ZXID,ZXID不一样的时候,较大的那个选票所在的服务实例作为Leader

②如果两个选票的ZXID相同的话,那么就会比较myid,默认为myid较大的服务实例作为Leader

根据这个规则,我们来看看当server1收到server2的选票后,比较的流程是怎样的,首先两个选票都是第一轮投票选举,所以zxid都是0,接着就要开始比较myid了,server1的myid是1,而server2的myid是2,大于自身的myid,那么server2就应该是Leader,因此server1会更新自己的选票为(2,0),然后下次发送的时候就是发送新的选票信息出去

4.统计每一次选票

每一次投票以后,都会统计所有的投票,判断是否有过半的实例接受到了相同的选票信息,对与当前server1和server2来说,必须这两个实例的选票都一样才可以算是完成了选举流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值