首页 > 解决方案 > 写入 MongoDB 的多个副本

问题描述

假设我有一个写入数据库的分布式应用程序。为了减少延迟,其中一个实例(应用程序 + 数据库)托管在澳大利亚,另一个实例托管在欧洲。两个数据库实例需要共享相同的数据。

所以我们在这里追求的是数据局部性。原因很明显:我们不希望澳大利亚的用户向我们在欧洲的数据库发送请求,因为这会增加延迟。

自然的选择是将两个数据库实例部署在一个副本集中。但似乎使用 MongoDB,您只能写入副本集中的一个 Mongo 实例。

MongoDB 有什么策略可以让两个数据库实例共享相同的数据,您可以写入这些实例?或者 MongoDB 只是这个要求的错误选择?

标签: databasemongodbdeploymentdatabase-replicationreplicaset

解决方案


巨大的主题,但我会尽量给你一个简短的答案:

由于您的两个实例必须共享相同的 sata,因此您不能将分片集群与 zone 一起使用。但是副本集可以成为您的解决方案:

  • 创建至少包含以下内容的副本集:

    • 位于“中立”区域的服务器。它将是主服务器(设置更高的优先级)。这个服务器,只要它仍然是主要的,就会处理你的写操作。

    • 您现有的两个优先级较低的服务器。

  • 在您的应用程序中将读取首选项设置为“最近”。这样,无论服务器的主/从角色如何,您的读取操作都将由具有割草机网络延迟的服务器处理。

但我强烈建议您查看文档,了解如何正确部署此架构。这是一个好的开始

编辑

关于这个解决方案的一些考虑:

  • 此用例是最好从辅助设备中读取的罕见用例之一。一般来说,更喜欢从 MASTER 读取数据,因为副本集是为了高可用性而不是可伸缩性而完成的。

  • 如果您的某些数据可以“定位”以便更快地访问,请考虑将分片集合作为更好的解决方案


推荐阅读