本篇博客小菌为大家带来的是ZooKeeper在面试中最容易被问到的问题,也就是ZooKeeper的选举机制!
zookeeper默认的算法是FastLeaderElection,采用投票数大于半数则胜出的逻辑。
服务器ID
比如有三台服务器,编号分别是1,2,3。 编号越大在选择算法中的权重越大。
选举状态
LOOKING,竞选状态。 FOLLOWING,随从状态,同步leader状态,参与投票。 OBSERVING,观察状态,同步leader状态,不参与投票。 LEADING,领导者状态。
数据ID
服务器中存放的最新数据version。 值越大说明数据越新,在选举算法中数据越新权重越大。
逻辑时钟
也叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加,然后与接收到的其它服务器返回的投票信息中的数值相比,根据不同的值做出不同的判断。
假设目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选举过程如下:
对于运行正常的zookeeper集群,中途有机器down掉,需要重新选举时,选举过程就需要加入数据ID、服务器ID和逻辑时钟。
其中:
这样选举的标准就变成:
本次的分享就到这里了,受益的小伙伴们或对大数据技术感兴趣的朋友记得关注小菌哟(^U^)ノ~YO后续我会为大家带来大数据生态系统中其他"成员"的介绍,敬请期待!!!