(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
运行期选举与初始状态投票过程基本类似,大致可以分为以下几个步骤:
(1)状态变更。leader 故障后,余下的非 observer 服务器都会将自己的服务器状态变更为looking,然后开始进入leader选举过程。
(2)每个server会发出投票。
(3)接收来自各个服务器的投票,如果其他服务器的数据比自己的新会改投票。
(4)处理和统计投票,每一轮投票结束后都会统计投票,超过半数即可当选。
(5)改变服务器的状态,宣布当选。
话不多说先来一张图:
(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 代表数据越新,权值也就越大。
(4)在运行期选举还可能会遇到脑裂的情况,大家可以自行学习。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。
深知大多数初中级java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面v无偿领取!(备注java)
总结
本文从基础到高级再到实战,由浅入深,把mysql讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关mysql的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!
mysql50道高频面试题整理:
笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!
mysql50道高频面试题整理:
[外链图片转存中…(img-8gqjrerc-1710426121909)]
发表评论