写入MongoDB的许多副本

时间:2018-10-05 12:24:18

标签: database mongodb deployment database-replication replicaset

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

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

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

MongoDB有什么策略可以拥有两个数据库实例,它们共享相同的数据,并且可以写入这些实例?还是MongoDB只是此要求的错误选择?

1 个答案:

答案 0 :(得分:1)

主题很大,但我会尽力给您一个简短的答案:

由于两个实例必须共享相同的sata,因此不能使用sharded cluster with zones。但是replica set可能是您的解决方案:

  • 创建至少具有以下内容的副本集:

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

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

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

但我强烈建议您检查文档,以了解如何正确部署此体系结构。 Here's a good start

编辑

有关此解决方案的一些注意事项:

  • 此用例是一种罕见的用例之一,最好从第二类中读取。通常,最好从MASTER中读取数据,因为复制集是为了实现高可用性而不是为了可伸缩性。

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