其他分享
首页 > 其他分享> > zooKeeper篇-zk的选举机制

zooKeeper篇-zk的选举机制

作者:互联网

点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人。

文章不定期同步公众号,还有各种一线大厂面试原题、我的学习系列笔记。

说说zk的选举机制

基础概念
启动阶段的leader选举

zk集群至少要有3个节点,假如有5个节点1、2、3、4、5先后启动,它们启动时的zxid都是一样的(设为0):

->节点1进入looking选举状态,给自己投票,发出(0,1),此时当选节点票数=1<节点总数的一半=2.5,故节点1仍保持looking状态继续等待选举

->节点2进入looking选举状态,给自己投票,发出(0,2),myid为2最大,2当选,但此时当选节点票数=2<节点总数的一半=2.5,故节点2仍保持looking状态继续等待选举

->节点3进入looking选举状态,给自己投票,发出(0,3),myid为3最大,3当选,且此时当选节点票数=3>节点总数的一半=2.5,故节点3当选leader

->节点4进入looking选举状态,给自己投票,发出(0,4),但此时集群leader已选出,所以节点4仍成为follwer

->节点5进入looking选举状态,给自己投票,发出(0,5),但此时集群leader已选出,所以节点5仍成为follwer

->选举完成后,leader的状态由looking变为leading,follower的状态由looking变为following

总的来说,启动阶段的选举当选的必然为位于中间的节点

运行阶段的选举

运行阶段每个节点的zxid都可能不同,但选举原则与启动阶段一样,都是先比较zxid,再比较myid,假如主节点3运行中挂掉了,其他所有从节点全部进入looking状态,节点1、2、4、5的zxid为121、122、124、125,且各从节点都推举自己为下一个leader,节点1发出(121,1),节点2发出(122,2),节点4发出(124,4),由于节点4的zxid比1、2的大,故4当选,且当选节点票数=3>总节点数/2=5/2=2.5,所以4当选新一代leader,节点5发出(125,5),但此时已经选举出leader,所以5成为follwer,最后leader变更状态为leading,follower变更为following

OK,如果文章哪里有错误或不足,欢迎各位留言。

创作不易,各位的「三连」是二少创作的最大动力!我们下期见!

标签:zxid,选举,zooKeeper,leader,当选,集群,zk,节点
来源: https://www.cnblogs.com/mofes/p/15143166.html