leader选举

在leader 选举过程中:
1)heartbeat time interval 和 election time out 之间是如何抉择的?
2)为啥heartbeat time interval 一定小于 min(election time out)?

首先 这两个参数都在raftpaper里提到过, 与之相匹配的还有两个参数, 他们是成对出现的:

  • heartbeat_timeout heartbeat_elapsed
  • election_timeout election_elapsed

这2对参数在角色不一样时逻辑有点不一样, 先说leader:

leader 在每一个logic tick下, 如果:

  1. electionElapsed >= r.electionTimeout, 会发送localmsg pb.MsgCheckQuorum提醒自己检查下还是不是leader, 并且重置 electionElapsed, 如果检查不符合条件会把自己变为follower, 就没有 下面的逻辑了
  2. r.heartbeatElapsed >= r.heartbeatTimeout 发送心跳, 维持leader

follower , 在每一个logic tick下, 如果:

    1. electionElapsed >= r.electionTimeout, 重置 electionElapsed 将自己变为candidate
    1. 收到了消息, 重置自己的electionElapsed, 保持自己时follower.

candidate 相似.

2赞

是不是如下情况
1)只有leader 才发送heartbeat 心跳来检查,flower 不需要发送heartbeat?
2)为啥heartbeat time interval 一定小于 min(election time out)?
3)当heartbeatElapsed >= r.heartbeatTimeout ,心跳已经超时了,为啥还是维持leader?这种情况应该处理处理?我的理解是当leader超过heartbeatTimeout,就要进行election_time,当超过electionTimeout后其他flower 就看谁先把自己的term+1,谁就就是leader

请求支持,点对点应答