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

标签 database mongodb replicaset mongodb-replica-set mongodb-arbiter

假设我有 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/

相关文章:

php - 结果从数据库中可用的确切行返回减去 1(负 1)的值

mysql - 从数据库恢复后 MD5 密码哈希不匹配

database - 为 PostgreSQL 表中的(非 ID 列)自动生成唯一编号

node.js - 在 Atlas 上使用 ReplicaSet 的 Mongoose

android - 更新数据库后如何更新ListView?

mongodb - noSQL 和规范化数据

java - Spring mongodb 异常 HTTP Status 500 - 过滤器执行抛出异常

ajax - 使用mongodb在保存()之后获取laravel中最后插入的文档的ID

MongoDB "Starting new replica set monitor for"消息含义

mongodb - pymongo 无法连接到主节点