MongoDb 复制和故障转移

Nil*_*esh 2 replication high-availability mongodb

我们有两台服务器用于我们想要复制和故障转移的 MongoDB 数据库。

情况1:

对于复制,我们将 Server1 设置为主要,将 server2 设置为次要...一切正常。

期望:当 server1 出现故障时,作为辅助的 server2 不会自动成为主要的……它仍然是次要的。那么 server2 是否有可能自动成为主服务器。

情况 2:我是否需要 3 台服务器强制进行 MongoDB 复制,以便当 server1 出现故障时,server2 将自动成为主服务器,而 server3 将保持辅助状态。(这工作正常)

那么,如果我们只有 2 台服务器,对此有何建议?

kev*_*adi 6

当 server1 出现故障时,作为辅助的 server2 不会自动成为主要的……它仍然是次要的。那么 server2 是否有可能自动成为主服务器。

在 2 节点副本集中,没有。

我是否需要 3 台服务器强制进行 MongoDB 复制,以便当 server1 出现故障时,server2 将自动成为主服务器,而 server3 将保持辅助状态。

是的。

MongoDB 副本集旨在提供高可用性和冗余。为了实现这一点,副本集将有一个主节点(写入将转到)和辅助节点(如果主节点发生某些事情,它可以接管)。

为此,MongoDB 使用投票机制,节点必须获得多数票才能成为 Primary。离线节点不会投票。

因此,在具有 3 个节点的副本集中,您可以让一个节点脱机,但仍然有一个主节点。在 5 个节点设置中,您可以有 2 个离线节点等。

完成此设计是为了防止由于网络分区而导致所谓的“脑裂”情况,在这种情况下,您有两个主要服务器,并且两个应用程序同时写入这两个主要服务器。一旦分区清除,就无法判断哪个主节点包含正确的数据。为了防止这种情况,MongoDB 将不允许写入来保护数据的一致性。

您可能能够使用一个仲裁者的节点,如果你只有2数据承载节点。但是,请记住,使用 Arbiter 时有一些注意事项,例如使用 writes w:majority(这是本次讨论的题外话,但请随意创建一个关于此的新问题)。