MongoDb 复制和故障转移

MongoDb Replication and failover

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

案例 1:

对于复制,我们将 Server1 设置为主要服务器,将 server2 设置为辅助服务器...一切正常。

预期:当服务器 1 出现故障时,辅助服务器 2 不会自动成为主要服务器。它仍然是辅助服务器。那么 server2 是否有可能自动成为主要服务器。

情况 2:MongoDB 复制是否需要 3 个强制性服务器,以便当服务器 1 出现故障时,服务器 2 将自动成为主服务器,而服务器 3 将保持辅助状态。 (这很好用)

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

如果有 2 个服务器,您也可以通过设置

来解决问题

Priority of the secondary as 0

https://docs.mongodb.com/manual/core/replica-set-priority-0-member/#replica-set-secondary-only-members。在这种情况下,如果主服务器宕机,您将没有可用性。因为我认为您不希望可用性,因为您不希望您的辅助设备成为主要设备。我的解决方案应该适合您。

when server1 goes down, server2, which is secondary not become primary automatically..it remains secondary. so Is there possibility that server2 will automatically become primary.

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

will I need 3 servers compulsory for MongoDB replication so that when server1 goes down, server2 will automatically become primary and server3 will remain secondary.

是的。

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

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

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

进行此设计是为了防止由于网络分区而导致的所谓 "split brain" 情况,在这种情况下,您有两个主节点,并且两个应用程序同时写入两个主节点。一旦分区被清除,就无法判断哪个主节点包含正确的数据。为防止这种情况,MongoDB 将不允许写入以保护数据的一致性。

如果您只有 2 个数据承载节点,您可能能够使用 Arbiter 节点。但是,请记住,使用 Arbiter 有一些注意事项,例如使用 w:majority 进行写入(这是本次讨论的主题,但请随时就此创建一个新问题)。