• 请不要在回答技术问题时复制粘贴 AI 生成的内容
linbingqinag
V2EX  ›  程序员

raft 算法投票的截止条件?

  •  
  •   linbingqinag · Aug 9, 2018 · 1950 views
    This topic created in 2886 days ago, the information mentioned may be changed or developed.

    我想问下就是: 如果一个集群开始的时候 node 数量是 3 , 终端 leader 挂了,此时要进行投票重新选择 leader,那每个节点在得到的票数满足什么情况下停止接受头票会变成 leader。 我看一些开源库的实现是: ( 3/2)+1 ,3 代表 node 的数量, 我有点不理解的是其中一个已经挂了应该是 2 啊,怎么还是 3 呢?

    4 replies    2018-08-10 09:42:46 +08:00
    smilekung
        1
    smilekung  
       Aug 9, 2018
    3 节点集群允许挂一台 因为 2 台还能满足 (3/2)+1=2 的投票数 如果挂两台集群就没有意义了。
    计算数肯定以集群总数算的。
    wqlin
        2
    wqlin  
       Aug 9, 2018 via Android
    3/2 等于 1 吧。。int 计算的话。实际上就是计算 majority 的数量 = 集群总服务器 /2 + 1。+1 为了处理偶数个服务器
    ryd994
        3
    ryd994  
       Aug 10, 2018 via Android
    因为你不能假设你看到挂了的节点是真的挂了
    不可以随便把节点排除在投票外,否则可能会造成 partition 问题
    考虑以下情况:
    9 节点,挂了 4 台,剩下 5 台商量后把 4 台剔除
    又挂了 2 台,剩下 3 台把 2 台剔除
    其实那 6 台没死,他们暂时连接到了另一个网络
    现在你有一个 3 节点集群,和一个 6 节点集群,他们都以为自己有决定权

    所以不要随便踢人

    一般来说,集群的大小不能改。如果有节点永久下线,你应该用另一台节点来代替它
    如果要移除节点,可以实现某种特殊表决,在节点*在线*的时候移除
    linbingqinag
        4
    linbingqinag  
    OP
       Aug 10, 2018 via Android
    @ryd994 有道理,
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2780 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 14:58 · PVG 22:58 · LAX 07:58 · JFK 10:58
    ♥ Do have faith in what you're doing.