繁体   English   中英

RAFT领导人选举算法一票代表?

[英]Raft leader election algorithm one vote for term?

我对理解 Raft 算法的领导者选举算法有疑问。 在论文中,我读到每个节点 con 每个任期只投一票。 我的疑惑是因为每个节点里面的term可以不一样,指的是请求投票的节点term还是给节点的节点term? 谢谢

在 raft 集群中,让我们有一个想要成为领导者的节点并将其称为候选者。 所有其他节点,包括当前领导者,我们将简称为对等节点。

让我们看看当一个节点从候选人那里收到RequestVoteRPC时会发生什么。

如果对等方的任期大于请求中收到的任期(候选人任期),则投票将被拒绝。 响应将包含对等方的任期,因此候选人将转换为关注者 state 并在收到响应后立即更新其任期。 这将确保请求投票的节点的任期与投票的节点的任期相同。

否则对等点需要决定做什么。

如果对等方的任期小于请求中收到的任期(候选人任期),则该对等方将转换为追随者,并将其当前任期更新为从候选人那里收到的任期,然后再继续做出决定。 这将确保请求投票的节点的任期与投票的节点的任期相同。

有可能多个节点转换为候选人 state,而我们正在观察的节点已经投票给候选人。 在那种情况下, votedFor变量将不是null ,我们不能将投票授予第二个(或任何其他)候选人。 但我们在这里也需要小心,因为我们可能会收到重复的RequestVoteRPC请求(来自同一候选人),因此我们需要检查votedFor是否等于我们正在观察其请求的候选人 ID。 如果votedFor等于当前候选人 ID,我们将授予投票权。

总而言之,如果votedFor变量为null或等于候选人 ID,我们将授予投票。

我故意排除了示例中的条件,即为了授予投票,候选人日志至少需要是最新的,但不要忘记这也很重要。

每个节点在一个任期内可以投一票,并且由于条款将在通信期间同步,因此投票的节点的任期将与要求投票的任期相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM