gpt4 book ai didi

mongodb - 如果大多数服务器宕机,如何访问 mongo 副本集?

转载 作者:行者123 更新时间:2023-12-02 21:08:48 26 4
gpt4 key购买 nike

我有 3 个 mongo 服务器配置为副本集,如下所示:

  • MY-PC:27017 -- 主要 - 向下
  • MY-PC:26017 -- 次要 - 事件
  • MY-PC:25017 -- 次要 - 向下

如果 2701725017 发生故障,您如何访问唯一幸存者 26017 中的数据?我发现 mongo 不会自动将 26017 设置为 PRIMARY 服务器,因此整个副本变得无法访问。

我想要一个能够容忍这种情况的副本配置,并且当 2701725017 再次运行时,副本集能够同步

谢谢,

最佳答案

这是正确的行为。大多数副本集必须启动并相互通信,然后进行选举,以便拥有主副本并接受任何写入操作。您无法配置副本集,以便当 1/3 成员启动时(从某些角度来看),该集可以接受写入。为什么?假设我们有一个 3 成员副本集,每个成员位于不同的数据中心,并且允许单独的副本集成员将自己设为主副本集

DC1: rs0/serverA
DC2: rs0/serverB
DC3: rs0/serverC

叛逆的侏儒切断了数据中心之间的所有电线;服务器 A、B 和 C 无法再相互通信。服务器 A 将这种情况视为“我还活着,但 B 和 C 都死了。我必须成为主服务器!”服务器 B 和 C 对自己说了同样的话。三个客户端 X、Y、Z 连接,一个连接到 A,一个连接到 B,一个连接到 C。它们发送以下涉及写入的操作:

X: db.mission_control.drop()
Y: db.mission_control.update({ }, { "fire_all_missiles" : true }, { "multi" : true })
Z: db.mission_control.update({ }, { "world_peace_mode" : "engage" }, { "multi" : true })

现在数据中心之间的线路已恢复,A、B、C 可以再次相互通信。我们应该如何处理 mission_control 集合?扔掉它,然后尝试发射导弹,然后尝试参与世界和平?发射导弹,然后扔掉它,然后尝试参与世界和平?也许,最卑鄙的是,我们应该致力于世界和平,然后,一旦每个人都放松警惕,发射导弹,然后通过丢弃收集来销毁证据。在这种情况下 MongoDB 应该如何知道该怎么做?

因此,如果没有多数票,就无法拥有主节点(接受写入的节点)。不过,当没有主数据库时,您仍然可以从辅助数据库中读取数据。你只需要设置一个 secondary read preference .

关于mongodb - 如果大多数服务器宕机,如何访问 mongo 副本集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29403311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com