V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linbingqinag
V2EX  ›  程序员

raft 算法投票的截止条件?

  •  
  •   linbingqinag · 2018-08-09 16:02:27 +08:00 · 1555 次点击
    这是一个创建于 2283 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    所以不要随便踢人

    一般来说,集群的大小不能改。如果有节点永久下线,你应该用另一台节点来代替它
    如果要移除节点,可以实现某种特殊表决,在节点*在线*的时候移除
    linbingqinag
        4
    linbingqinag  
    OP
       2018-08-10 09:42:46 +08:00 via Android
    @ryd994 有道理,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:20 · PVG 06:20 · LAX 14:20 · JFK 17:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.