raft 算法投票的截止条件?

2018-08-09 16:02:27 +08:00
 linbingqinag

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

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

所以不要随便踢人

一般来说,集群的大小不能改。如果有节点永久下线,你应该用另一台节点来代替它
如果要移除节点,可以实现某种特殊表决,在节点*在线*的时候移除
linbingqinag
2018-08-10 09:42:46 +08:00
@ryd994 有道理,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/478304

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX