当一些节点死亡时,mongo 副本集选举如何表现?

问题描述 投票:0回答:2

假设我有 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 个数据节点处于活动状态并且它确实选择了一个主节点并且 Db 工作了。

我想了解他们两者之间的区别。

database mongodb replicaset mongodb-replica-set mongodb-arbiter
2个回答
1
投票

当您的副本集有 5 个成员(即 5 个有投票权的成员)时,多数为 3,这意味着至少有 3 个节点必须启动且可达才能选出 PRIMARY。否则,节点将保持在 SECONDARY 状态。

看看 MongoClient 连接到多个主机来处理故障转移?


0
投票

假设您没有更改节点配置中的优先级、隐藏或投票(例如,您使用默认的 replicaSet 设置)并且您没有 ARBITER,这就是发生的情况:

1) replicaSet允许多少个成员同时宕机?

3x members replicaSet 只允许 3 个成员中的 1 个同时关闭并且 replicaSet 仍然是可写的(例如 PRIMARY 将被选举)

5x members replicaSet 只允许 5 个成员中的 2 个同时关闭并且 replicaSet 仍然是可写的(例如 PRIMARY 将被选举)

7x 成员 replicaSet 只允许 7 个成员中的 3 个同时关闭并且 replicaSet 仍然是可写的(例如 PRIMARY 将被选举)

2)如果允许的更多成员失败会怎样?

如果在 3x members replicaSet 中有 2x members down ,选举将被触发,仍然活着的成员将不会获得大多数成员的投票,所以如果它是 PRIMARY 将切换到 SECONDARY ,如果它是 SECONDARY 它将保持 SECONDARY 。 ReplicaSet 仍将是可读的,但无法写入,当大多数成员可用时,任何其他 replicaSet 都会发生同样的情况。

© www.soinside.com 2019 - 2024. All rights reserved.