MongoDb复制和故障转移

时间:2018-02-08 13:58:29

标签: mongodb replication high-availability

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

案例1:

对于复制,我们将Server1设置为primary,将server2设置为secondary ...一切正常。

期望:当server1关闭时,server2(辅助服务器)不会自动成为主服务器..它仍然是辅助服务器。那么server2是否有可能自动成为主服务器。

案例2:MongoDB复制是否必须使用3台服务器,这样当server1关闭时,server2将自动成为主服务器,server3将保持为辅助服务器。 (这很好)

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

2 个答案:

答案 0 :(得分:3)

  

当server1关闭时,server2(辅助服务器)不会自动成为主服务器..它仍然是辅助服务器。那么server2是否有可能自动成为主服务器。

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

  

我需要3台服务器才能进行MongoDB复制,这样当server1关闭时,server2将自动成为主服务器,而server3将保持辅助服务器。

MongoDB副本集旨在提供高可用性和冗余。为实现此目的,副本集将具有单个主节点(写入将进入)和辅助节点(如果主节点发生某些事件,则可以接管)。

为实现这一目标,MongoDB使用投票机制,节点必须接收多数投票才能成为主要投票。离线节点将不投票。

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

这个设计是为了防止所谓的“分裂大脑”而进行的。由于网络分区,你有两个Primaries,两个应用程序同时写入两个Primaries的场景。分区清除后,无法确定哪个主节点包含正确的数据。为了防止这种情况,MongoDB不允许写入来保护数据的一致性。

如果您只有2个数据承载节点,可能能够使用Arbiter节点。但是,请记住,与仲裁者合作有一些警告,例如使用w:majority进行写操作(这是讨论的偏离内容,但请随时创建一个有关此问题的新问题。)

答案 1 :(得分:0)

使用2台服务器,您也可以通过设置

来解决问题
  

次要优先级为0

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