10

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

服务器 A --> 带有 MongoDB 和几个应用程序

服务器 B --> 带有 MongoDB 和几个应用程序

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

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

非常感谢您提前

4

3 回答 3

20

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

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

于 2014-04-10T13:18:28.380 回答
2

没有 MongoDB 只有单一主控。

目前创建两个这样的独立副本同时保持它们同步的唯一方法是手动执行此操作,但不建议这样做。

于 2014-04-10T13:17:07.600 回答
1

“MongoDB 的两个实例都组织在同一个副本集中”

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

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

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

如果您有自动故障转移工作,则不需要多主机配置。为此,请确保您至少有 3 个数据承载副本成员或 2+一个仲裁者,以便他们能够形成多数并选举新的主节点,以防旧主节点离线。

您可能需要调整electionTimeoutMillis参数,以便更频繁地进行自动故障转移检查。

将重要数据写入 DB 时,您可以使用{ w: "majority" }写入关注以确保您的更改已反映在大多数数据承载服务器上,因此是持久的。

于 2017-09-12T12:22:52.130 回答