5 Matching Annotations
  1. Dec 2022
  2. Jul 2022
    1. 假设S2和S3之间的差距足够大,先超时的那个节点(也就是S2)能够在另一个节点(也就是S3)超时之前,发起一轮选举,并获得过半的选票,那么那个节点(也就是S2)就可以成为新的Leader。
      1. 如果S2和S3的时间间隔很小,S2在收到超过半数选票成为Leader之前,S3也发出RequestVote请求并之后也收到超半数选票呢?比如说S2的网络延迟比S3大,或者S2服务器性能比S3性能低非常多等等
      2. 随机数算法是什么样的呢?如果是简单的随机算法,那么可能会导致两个节点随机出来的election time一样。如果节点数量更多,那么多台机器election time随机值一样的可能性更大
    2. 一个导致选举失败的更有趣的场景是,所有环节都在正常工作,没有故障,没有丢包,但是候选人们几乎是同时参加竞选,它们分割了选票(Split Vote)。假设我们有一个3节点的多副本系统,3个节点的选举定时器几乎同超时,进而期触发选举。首先,每个节点都会为自己投票。之后,每个节点都会收到其他节点的RequestVote消息,因为该节点已经投票给自己了,所以它会返回反对投票。这意味着,3个节点中的每个节点都只能收到一张投票(来自于自己)。没有一个节点获得了过半投票,所以也就没有人能被选上。接下来它们的选举定时器会重新计时,因为选举定时器只会在收到了AppendEntries消息时重置,但是由于没有Leader,所有也就没有AppendEntries消息。所有的选举定时器重新开始计时,如果我们不够幸运的话,所有的定时器又会在同一时间到期,所有节点又会投票给自己,又没有人获得了过半投票,这个状态可能会一直持续下去。

      当election timer timeout后: 1. candidate投票给自己 2. 如果自己是candidate状态时收到其他节点的RequestVote,则投反对票

  3. May 2022