Zookeeper集群选举机制

Zookeeper使用FastLeaderElection算法进行集群选举,基于服务器ID、数据ID和逻辑时钟来决定权重。全新集群选举中,编号较大的服务器更容易胜出。非全新集群选举时,会考虑数据ID和逻辑时钟,确保数据最新且服务器权重最高的节点成为领导者。

Zookeeper默认的算法是FastLeaderElection, 采用投票数大于半数则胜出的逻辑。

选举依据:

服务器ID:

比如有3台服务器, 编号分别为 1, 2, 3。

编号越大,在选举算法中的权重越大。

选举状态:

LOOKING,竞选状态。

FOLLOWING,随从状态。同步leader状态,参与投票。

OBSERVING,观察状态,同步leader状态,不参与任何投票。

LEADING,领导者状态。

数据ID:

服务器中存放的最新数据的version,值越大说明数据版本越新,在选举算法中的权重越大。

逻辑时钟:

也可以叫投票的次数,同一轮投票过程中的逻辑时钟是相同的,每投完一次票这个数值都会增加,

然后与接收到的其他服务器返回的投票信息中的数值相比,根据值不同做出不同的判断。

集群选举类型:全新集群选举与非全新集群选举。

全新集群选举:假设现在有5台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动。过程如下:

1. 服务器 1 启动,给自己投票,然后发投票信息给其他服务器,由于其他服务器没有启动,所以它收不到反馈信息,但是由于投票还没有到达半数(服务器 1 怎么知道一共有多少台服务器参与选举呢, 那是因为在zk配置文件中配置了集群信息,所有配置了3888端口的服务器均会参与投票,假设这5台都参与投票,则超过半数应为至少3台服务器参与投票。),所以服务器 1 的状态一直处于 LOOKING。

2. 服务器 2 启动, 给自己投票,然后与其他服务投票信息交换结果, 由于服务器 2 的编号大于服务器 1, 所以服务器 2 胜出,但是由于投票仍未到达半数,所以服务器 2 同样处于 LOOKING 状态。

3. 服务器 3 启动, 给自己投票,然后与其他服务投票信息交换结果, 由于服务器 3 的编号大于服务器 2,1,所以服务器 3胜出, 并且此时投票数正好大于半数, 所以选举结束,服务器 3 处于LEADING 状态, 服务器 1,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值