raft - 在 raft 领导人选举中,现场领导人如何响应候选人的 RequestVote rpc?

标签 raft leader

我正在读草稿纸。

到请求投票 rpc,

Receiver implementation: 1. Reply false if term < currentTerm (§5.1) 2. If votedFor is null or candidateId, and candidate’s log is at least as up-to-date as receiver’s log, grant vote (§5.2, §5.4)

在某些情况下,候选人的任期等于领导者的当前任期,那么领导者如何响应候选人的RequestVote rpc?

最佳答案

让我们用更人性化的术语来区分这一点:

  1. 如果投票来自较旧的术语 ( term < currentTerm ),请忽略它。
  2. 如果我们没有在本学期投票 ( votedFor is null ),或者投票给了我们上次在本学期投票的同一候选人 ( votedFor == candidateId ),则只要该候选人投票日志是最新的。

请记住,领导者在特定任期内为自己投票。

这意味着 term == currentTerm ,领导者将有 votedFor等于自身。这不为空,因此授予此投票的唯一方式是 if candidateId是它自己 - 即,它在当前任期内为自己投票。在所有其他情况下,它不会授予投票权。

要记住的重要一点(事实上,这是所有这一切中的关键不变量)是服务器永远不会在同一任期内投票多次。一旦它对一个任期进行了投票,它就是最终的。而且由于领导者会为自己投票,因此当它收到其他对同一任期的请求时,它不会批准该请求。

关于raft - 在 raft 领导人选举中,现场领导人如何响应候选人的 RequestVote rpc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47827379/

相关文章:

networking - Raft 如何处理长时间的网络分区?

kubernetes - 如果没有 kubernetes API,kubernetes 副本集中的 pod 如何发现彼此并相互通信?

docker - Docker swarm节点以Leader身份运行和Manager身份之间的区别

algorithm - 有向图中的领导人选举算法

algorithm - 服务器中 volatile 状态的 raft 协议(protocol)中的 lastApplied 和 matchIndex 是什么?

hyperledger-fabric - 如何将新的订购者组织添加到现有的 Hyperledger Fabric 网络

etcd - 如何使用 etcd 进行原子更新

algorithm - 这种场景下raft是怎么处理log的呢?