ReplicaSet中的MongoDB多个主服务器

时间:2014-04-10 12:58:00

标签: mongodb replication database-replication master replicaset

我有一个关于MongoDB副本集中多个主人的问题。我有以下布局:

服务器A - >使用MongoDB&几个应用程序

服务器B - >使用MongoDB&几个应用程序

MongoDB的两个实例都组织在同一个副本集中(服务器A作为主服务器,服务器B作为辅助服务器)。但现在有问题了。两个数据库都应包含服务器上应用程序的数据。

是否可以部署具有两个主服务器的副本集,以便服务器A的数据在服务器B的MongoDB中可用,反之亦然?

非常感谢您提前

3 个答案:

答案 0 :(得分:14)

MongoDB中的副本集此时只能有一个主服务器。 (它被称为副本集的主要副本。)对于您的方案,解决方案通常是使用分片群集。在您的示例中,您将有两个分片:一个用于服务器A的数据,另一个用于服务器B的数据。两个分片都实现为副本集,因此每个分片至少有三个服务器。然后,您可以将A分片的主分区放在同一数据中心A中,并将B分片的主分区放在数据中心B中。每个分片的至少一个副本(称为辅助分片)将位于另一个数据中心。

这意味着每个数据中心都可以使用所有数据,但是写入A分片总是需要在数据中心A中进行,并写入数据中心B中的B分片。(尽管写入也可以远程完成,因此您可以从数据中心B写入分片A,它只是在这种情况下它是远程写入。)

答案 1 :(得分:1)

没有MongoDB只是单一主人。

在保持同步状态的同时创建两个单独的副本的唯一方法是手动执行,但不建议这样做。

答案 2 :(得分:0)

  

" MongoDB的两个实例都组织在同一个副本集"

中      

"是否可以部署具有两个主服务器的副本集,以便服务器A的数据在服务器B的MongoDB中可用,反之亦然?"

奇怪的是,复制确实是为了达到这个目的:在不同的服务器上冗余地存储相同的数据。

如果您已将其设置到位,那么您已经实现了目标。 Sharding几乎没有(如果不是没有)与高可用性有关。

如果您具有自动故障转移功能,则不需要多主机配置。为此,请确保您至少有3个数据承载副本成员或2 + 1个仲裁者,以便他们能够成为多数并选择新的主服务器,以防旧的主服务器脱机。

您可能希望调整 electionTimeoutMillis 参数,以便更频繁地进行自动转发检查。

将重要数据写入数据库时​​,您可以使用 {w:"多数"写入以确保您的更改已反映在大多数承载数据的服务器上,因此非常耐用。