我有一个关于MongoDB副本集中多个主人的问题。我有以下布局:
服务器A - >使用MongoDB&几个应用程序
服务器B - >使用MongoDB&几个应用程序
MongoDB的两个实例都组织在同一个副本集中(服务器A作为主服务器,服务器B作为辅助服务器)。但现在有问题了。两个数据库都应包含服务器上应用程序的数据。
是否可以部署具有两个主服务器的副本集,以便服务器A的数据在服务器B的MongoDB中可用,反之亦然?
非常感谢您提前
答案 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:"多数"写入以确保您的更改已反映在大多数承载数据的服务器上,因此非常耐用。