raft 有关竞选超时 vs 心跳超时的疑惑

raft协议这两个超时时间是比较重要的,看着有些疑惑,

  1. 集群刚启动的时候,心跳会超时,这时候follower是直接成为candidator么?还是还要在心跳超时的基础上等待一个竞选超时才变成 candidator?
  2. 成为candidator并且发送投票请求给follower,这个candidator这时候本身等待投票是有个超时的,这个超时也是竞选超时么?
  3. 心跳超时和竞选超时哪个大?心跳超时一般设置为多少?
  4. 集群已经正常运转leader刚挂掉的时候,我们是依靠心跳超时还是竞选超时来触发选举流程?

 

1.心跳超时后,Follower 等待自身竞选超时后成为 Candidate 身份并发起选举。raft 使用了一个叫随机选举超时(randomize election timeout)的方式,使每个 server 的超时时间不一样,这样就避免了多个 Candidate 同时发起选举的问题。
2.选举也有时限,规定时间内没有获取到足够多的票数,则当前 Leader 选举竞选失败;但这个时限不是 election timeout ,election timeout 是指心跳超时后发起竞选的时限。
3.心跳超时可以自己配置,看你自己的网络规模和拓扑;竞选超时是随机的,大概在几十到几百毫秒;通常情况下,心跳超时比竞选超时长得多,心跳是秒级,竞选是毫秒级。
4.前面已经回答了,Follower 检测到心跳超时后,等待自身竞选超时后发起选举,也就是两个时限都超了。

补充:

  • kindol: 

    感谢大佬解答,第3点心跳超时会比竞选超时长,那如果一段时间内集群持续没有操作,不会有append这种指令,由于心跳超时比竞选超时长,竞选超时没来得及刷新,这时候集群不就很容易发生竞选超时了吗?这种竞选超时是否反而是一种无用功?

      回复  7月31日

  • kindol: 

    另外关于第一点,心跳超时后follower还会等待竞选超时,这里是说心跳超时后,再开始竞选超时的计数,还是心跳超时、竞选超时是follower启动后就同时开始计数的?

      回复  7月31日

  • Lyde_Su: 

    @kindol 竞选超时并不是一段不停运行的代码,它只是一个参数,在心跳超时后系统启动一个计时器与竞选超时参数比较,超过这个参数就发起选举。

      回复  7月31日

  • Lyde_Su: 

    @kindol 心跳超时好理解,两次心跳之间间隔的时间,超过时限就叫超时;竞选超时是心跳超时后才起算的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值