zookeeper选举原理

一、选举流程

通过看了源码,了解到,zookeeper为了提升并发性能,使用了多级队列架构,提高了服务的并发;大概原理如下图:
多级队列

二、处理选票核心逻辑

选票核心参数:
id:推荐机器的id
zxid:事务id
Epoch选举周期;
开始选举时,选举周期加一,每个机器,都会投自己机器的选票,则id为档期机器的id,myid,事务id为当前机器最大事务号,获取当前选举周期;
获取到选票后,比较选票的逻辑:
1.先判断选举周期,如果获取到的选举周期大于当前机器的选举周期,则,获取到的选票直接胜出,并且修改当前周期为选票中的周期;
2.如果周期相等,再比较事务id,事务id大的机器胜出,并且修改当选的选票,且广播出去;
3.获取到的选票比当前小,则打印警告日志,直接忽略
每台机器会有一个选票桶,桶的结构,结构为Map<机器id,选票>,所以当有机器重复投票时,会覆盖原来的选票;
当选票桶中,某台机器当选的选票数量超过了机器数量的一半,则该台机器被选举为leader,并且广播出去

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容