我想问下就是: 如果一个集群开始的时候 node 数量是 3 , 终端 leader 挂了,此时要进行投票重新选择 leader,那每个节点在得到的票数满足什么情况下停止接受头票会变成 leader。 我看一些开源库的实现是: ( 3/2)+1 ,3 代表 node 的数量, 我有点不理解的是其中一个已经挂了应该是 2 啊,怎么还是 3 呢?
1
smilekung 2018-08-09 16:08:09 +08:00
3 节点集群允许挂一台 因为 2 台还能满足 (3/2)+1=2 的投票数 如果挂两台集群就没有意义了。
计算数肯定以集群总数算的。 |
2
wqlin 2018-08-09 18:27:30 +08:00 via Android
3/2 等于 1 吧。。int 计算的话。实际上就是计算 majority 的数量 = 集群总服务器 /2 + 1。+1 为了处理偶数个服务器
|
3
ryd994 2018-08-10 00:52:13 +08:00 via Android
因为你不能假设你看到挂了的节点是真的挂了
不可以随便把节点排除在投票外,否则可能会造成 partition 问题 考虑以下情况: 9 节点,挂了 4 台,剩下 5 台商量后把 4 台剔除 又挂了 2 台,剩下 3 台把 2 台剔除 其实那 6 台没死,他们暂时连接到了另一个网络 现在你有一个 3 节点集群,和一个 6 节点集群,他们都以为自己有决定权 所以不要随便踢人 一般来说,集群的大小不能改。如果有节点永久下线,你应该用另一台节点来代替它 如果要移除节点,可以实现某种特殊表决,在节点*在线*的时候移除 |
4
linbingqinag OP @ryd994 有道理,
|