如何防止MongoDB副本集查询主要?

读操作只:

有没有办法有一个MongoDB的副本集,但为了在连接到的盒子上的MongoDB实例,是被查询的MongoDB?

AWS负载平衡器后面有三个EC2实例。

在每个EC2实例上运行MongoDB,这是副本集的一部分。

我在nodeJS上有特定的端点,并按照如下方式连接到副本集

mongodb.MongoClient.connect('mongodb://1.1.1.1,2.2.2.2,3.3.3.3.', function (err, db) { if (err) { complete('{}'); } else { 

我希望将查询的负载均匀地分布在我的MongoDB副本集的所有三个实例上,而不是默认地将所有查询路由到定义了我的主要MongoDB的EC2实例,因为这破坏了我的负载平衡器的点(这是平衡所有三个实例的查询负载)。

我的理解是,当连接到MongoDB副本集时,除非主实例closures,否则始终select主实例,因此每个辅助实例的目的只是作为备份。

在我的例子中,有些人会称之为HOT,COLD,COLD。 因为有两个实例永远不会被使用。

我希望有平均分配查询负载的原因,所以我的设置可以是WARM,WARM,WARM。

在将来当用户数量增加时,为了保持查询性能最佳,我可以在负载均衡器后面添加更多的EC2实例,以提高查询性能。

并且当数据增长的时候,这样一个单一的实例太慢了,不能及时返回数据,也就是当我将每个实例分割成其他的EC2实例的时候。

注意:我想每个EC2实例的源代码都是一样的。 我正在使用git,我想要轻松地将源代码推送到我的副本集中的每个实例。

您想要使用ReadPreference ,它将允许您将读取请求引导到辅助节点 。 在这里可以看到MongoDB node.js驱动程序的代码示例。

 mongodb.MongoClient.connect('mongodb://1.1.1.1,2.2.2.2,3.3.3.3./?readPreference=secondary', ...