Mongodb 如果多数服务器关闭,如何访问mongo副本集?

Mongodb 如果多数服务器关闭,如何访问mongo副本集?,mongodb,mongojs,Mongodb,Mongojs,我将3台mongo服务器配置为副本集,如下所示: MY-PC:27017--主-关闭 MY-PC:26017--辅助-激活 MY-PC:25017——二级停机 如果27017和25017出现故障,您如何访问唯一幸存者26017中的数据?我发现mongo不会自动将26017设置为主服务器,因此无法访问整个副本 我想要一个能够容忍这种情况的副本配置,当27017和25017再次运行时,副本集能够同步 Thx,这是正确的行为。大多数副本集必须建立并相互通信,然后进行选择,以便拥有主副本并接受任何写

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

  • MY-PC:27017--主-关闭
  • MY-PC:26017--辅助-激活
  • MY-PC:25017——二级停机
如果
27017
25017
出现故障,您如何访问唯一幸存者
26017
中的数据?我发现mongo不会自动将
26017
设置为主服务器,因此无法访问整个副本

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


Thx,

这是正确的行为。大多数副本集必须建立并相互通信,然后进行选择,以便拥有主副本并接受任何写入操作。您无法配置副本集,以便在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可以再次相互通信。我们应该如何处理
任务控制
收集?放下它,然后试着发射导弹,然后试着参与世界和平?发射导弹,然后放下它,然后尝试与世界和平接触?也许,最卑鄙的是,我们应该参与世界和平,然后,一旦每个人都放松警惕,发射导弹,然后通过丢弃收集物销毁证据。MongoDB应该如何知道在这种情况下该怎么做


因此,如果没有多数,就不能有主节点(接受写操作的节点)。但是,当没有主设备时,您仍然可以从辅助设备读取数据。你只需要设置一个。

谢谢,它把事情弄清楚了,但通过这个类比,我还有两个问题。因此,如果我需要监控我的数据(我认为是只读的),而我只能访问
rs0/serverA
。在不操纵副本集配置的情况下,我如何做到这一点?如果我有2个数据中心:A(有3个mongo节点)和B(有2个mongo节点)。有一天,A-B之间的连接被切断。这不意味着两个数据中心都有自己的主节点吗?