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

时间:2016-06-03 17:07:59

标签: node.js mongodb amazon-ec2 load-balancing replicaset

读操作只:

有没有办法设置一个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副本集时,除非主实例已关闭,否则始终选择主实例,因此每个辅助实例的目的只是用作备份。

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

我希望查询负载均匀分布的原因是我的设置可以是WARM,WARM,WARM。

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

当数据增长时,单个实例太慢以至于无法按时返回数据,即我将每个实例分成其他EC2实例。

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

1 个答案:

答案 0 :(得分:1)

您希望使用ReadPreference,这将允许您将读取请求定向到辅助节点。可以看到MongoDB node.js驱动程序的示例代码here

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