2021-03-02

Zookeeper内部原理

半数机制:集群中半数以上的机器存活就认为该集群可用。所以zookeeper适合安装在奇数台的机器上。
zookeeper虽然在配置文件中没有指出master和slave。但是在工作时是有一个节点为leader,其他的则为follower,leader是通过内部选举机制临时产生的,选举机制也分为两种:1是启动新集群时的选举机制,另一种是leaderd挂掉之后的选举机制。

启动新集群的选举机制

在这里插入图片描述server12345五台服务器组成的集群,他们的id从1到5,并且都是全新的没有数据,依次启动的话哪台服务器将会为leader?
1、服务器1启动,此时只有这一台服务器,他发出去的报没有回应,此时的状态为LOOKING状态,
2、服务器二启动,此时有两台服务器可以互相通信,也就是1和2,在没有历史数据的情况下,比较的是id值,所以是2胜出,但是由于没有达到半数的服务器所以两者仍是LOOKING的状态。
3、服务器3启动,与2一样的过程,server3的id比较大所以server3就是1、2、3的leader,但是与二不同的是,此时共有三台服务器达成了共识,也就是半数,这时server3就直接成为了leader(也就是少数服从多数,超过一半的票就可以选出获胜者)。
4、服务器4启动,此时虽然他的id最大但是server3已经是leader,server4只能是follower。
5、服务器5启动,恭喜server3再加一个小弟。
每个人都想当老大,其他的服务器也想做leader怎么办,那只能等server3挂掉之后才有机会做老大。同样的这个老大也必须通过选举才能上任。

非全新集群的选举机制

初始化的时候,是按照上述的说明进行选举的,但是当zookeeper运行了一段时间之后,有机器down掉,重新选举时,选举过程就相对复杂了。
需要加入数据id、leader id和逻辑时钟。
数据id:数据新的id就大,数据每次更新都会更新id。
Leader id:就是我们配置的myid中的值,每个机器一个。
逻辑时钟:这个值从0开始递增,每次选举对应一个值,也就是说: 如果在同一次选举中,那么这个值应该是一致的 ; 逻辑时钟值越大,说明这一次选举leader的进程更新.
选举的标准就变成:
1、逻辑时钟小的选举结果被忽略,重新投票
2、统一逻辑时钟后,数据id大的胜出
3、数据id相同的情况下,leader id大的胜出
根据这个规则选出leader。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值