假设我有 5 个节点副本集。
其中 3 人死亡,2 人活着。
如何计算多数票? 5 个节点多数是 5/2+1=3,但是如果 3 个节点死了,它还会寻找 3 票吗?只有 2 人活着,所以只有 2 票……或者多数票将是 2/2+1=2,这仍然令人困惑,因为选举中会发生什么,以及读/写问题是否会对其中任何一个产生影响……
基本上,n/2+1 中的数字 n 到多数表示整个副本集成员长度(可以投票死亡或存活的成员的长度)或仅存活节点的长度?
我尝试手动杀死 5 节点副本集中的 3 个节点(4 个加上仲裁器,也杀死了仲裁器),剩下的 2 个节点都成为辅助节点,我无法访问数据库。
我在 3 节点副本集中尝试了同样的操作(没有仲裁器)并杀死了 1 个节点,所以它与第一个测试相同,其中只有 2 个数据节点处于事件状态,并且它确实选择了一个主节点并且数据库工作了.
我试图了解它们之间的区别。
最佳答案
假设您不更改节点配置中的优先级、隐藏或投票(例如,您使用默认的副本集设置)并且您没有 ARBITER ,则会发生以下情况:
1)replicaSet允许多少个成员同时宕机?
3x 成员的replicaSet 只允许3 个成员中的1 个同时关闭,并且replicaSet 仍可写(例如PRIMARY 将被选举)
5x 成员replicaSet 只允许5 个成员中的2 个同时关闭,并且replicaSet 仍可写(例如,PRIMARY 将被选举)
7x 成员的副本集仅允许 7 个成员中的 3 个同时关闭,并且副本集仍可写(例如,将选举 PRIMARY)
2) 如果出现故障的成员数量超过允许的数量会怎样?
如果在 3x 成员的副本集中有 2x 成员宕机,则会触发选举,并且仍然活着的成员将不会获得大多数成员的投票,因此如果是 PRIMARY 将切换到 SECONDARY,如果是 SECONDARY 将保留次要的。 ReplicaSet 仍然可读,但无法写入,当少数成员可用时,任何其他副本集也会发生同样的情况。
关于database - 当某些节点死亡时,mongo 副本集选举如何表现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76017320/