Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

Apache Zookeeper面试题 PDF 下载


分享到:
时间:2024-03-18 10:05来源:http://www.java1234.com 作者:转载  侵权举报
Apache Zookeeper面试题
失效链接处理
Apache Zookeeper面试题  PDF 下载

 
 
相关截图:

 

主要内容:

1. ZooKeeper是什么,有什么功能
Zookeeper 是 ⼀个典型的分布式数据⼀致性的解决⽅案.
Zookeeper的典型应⽤场景:
数据发布/订阅
负载均衡
命名服务
分布式协调/通知
集群管理
Master
分布式锁
分布式队列
2. 讲⼀下leader 选举过程
这⾥选取3台机器组成的服务器集群为例。在集群初始化阶段,当有⼀台服务器Server1启动时,其单独⽆法进⾏和
完成Leader选举,当第⼆台服务器Server2启动时,此时两台机器可以相互通信,每台机器都试图找到Leader,于
是进⼊Leader选举过程。选举过程如下:
(1) 每个Server发出⼀个投票。由于是初始情况,Server1和Server2都会将⾃⼰作为Leader服务器来进⾏投票,每
次投票会包含所推举的服务器的myid和ZXID,使⽤(myid, ZXID)来表示,此时Server1的投票为(1, 0),Server2的
投票为(2, 0),然后各⾃将这个投票发给集群中其他机器。
(2) 接受来⾃各个服务器的投票。集群的每个服务器收到投票后,⾸先判断该投票的有效性,如检查是否是本轮投
票、是否来⾃LOOKING状态的服务器。
(3) 处理投票。针对每⼀个投票,服务器都需要将别⼈的投票和⾃⼰的投票进⾏PK,PK规则如下
· 优先检查ZXID。ZXID⽐较⼤的服务器优先作为Leader。
· 如果ZXID相同,那么就⽐较myid。myid较⼤的服务器作为Leader服务器。
对于Server1⽽⾔,它的投票是(1, 0),接收Server2的投票为(2, 0),⾸先会⽐较两者的ZXID,均为0,再⽐较
myid,此时Server2的myid最⼤,于是更新⾃⼰的投票为(2, 0),然后重新投票,对于Server2⽽⾔,其⽆须更新⾃
⼰的投票,只是再次向集群中所有机器发出上⼀次投票信息即可。
(4) 统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于
Server1、Server2⽽⾔,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时便认为已经选出了
Leader。
(5) 改变服务器状态。⼀旦确定了Leader,每个服务器就会更新⾃⼰的状态,如果是Follower,那么就变更为
FOLLOWING,如果是Leader,就变更为LEADING。Leader 选取算法分析
在3.4.0后的Zookeeper的版本只保留了TCP版本的FastLeaderElection选举算法。当⼀台机器进⼊Leader选举时,
当前集群可能会处于以下两种状态
· 集群中已经存在Leader。
· 集群中不存在Leader。
  对于集群中已经存在Leader⽽⾔,此种情况⼀般都是某台机器启动得较晚,在其启动之前,集群已经在正常
⼯作,对这种情况,该机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器⽽⾔,仅仅需
要和Leader机器建⽴起连接,并进⾏状态同步即可。⽽在集群中不存在Leader情况下则会相对复杂,其步骤如
下:
  (1) 第⼀次投票。⽆论哪种导致进⾏Leader选举,集群的所有机器都处于试图选举出⼀个Leader的状态,即
LOOKING状态,LOOKING机器会向所有其他机器发送消息,该消息称为投票。投票中包含了SID(服务器的唯⼀
标识)和ZXID(事务ID),(SID, ZXID)形式来标识⼀次投票信息。假定Zookeeper由5台机器组成,SID分别为1、
2、3、4、5,ZXID分别为9、9、9、8、8,并且此时SID为2的机器是Leader机器,某⼀时刻,1、2所在机器出现
故障,因此集群开始进⾏Leader选举。在第⼀次投票时,每台机器都会将⾃⼰作为投票对象,于是SID为3、4、5
的机器投票情况分别为(3, 9),(4, 8), (5, 8)。
  (2) 变更投票。每台机器发出投票后,也会收到其他机器的投票,每台机器会根据⼀定规则来处理收到的其他
机器的投票,并以此来决定是否需要变更⾃⼰的投票,这个规则也是整个Leader选举算法的核⼼所在,其中术语
描述如下
· vote_sid:接收到的投票中所推举Leader服务器的SID。
· vote_zxid:接收到的投票中所推举Leader服务器的ZXID。
· self_sid:当前服务器⾃⼰的SID。
· self_zxid:当前服务器⾃⼰的ZXID。
每次对收到的投票的处理,都是对(vote_sid, vote_zxid)和(self_sid, self_zxid)对⽐的过程。
规则⼀:如果vote_zxid⼤于self_zxid,就认可当前收到的投票,并再次将该投票发送出去。
规则⼆:如果vote_zxid⼩于self_zxid,那么坚持⾃⼰的投票,不做任何变更。
规则三:如果vote_zxid等于self_zxid,那么就对⽐两者的SID,如果vote_sid⼤于self_sid,那么就认可当前收到的
投票,并再次将该投票发送出去。
规则四:如果vote_zxid等于self_zxid,并且vote_sid⼩于self_sid,那么坚持⾃⼰的投票,不做任何变更。
结合上⾯规则,给出下⾯的集群变更过程。



 
 
------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐