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

How do I prevent MongoDB replica set from querying the primary?

只读操作:

有没有办法拥有一个 MongoDB 副本集,但要在连接到的盒子上创建 MongoDB 实例,成为被查询的 MongoDB?

我在 AWS 负载均衡器后面有三个 EC2 实例。

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

我在 nodeJS 上有 express 端点,我按如下方式连接到副本集

 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副本集时,除非主实例宕机,否则总是选择主实例,因此每个从实例的目的只是作为备份.

在我的示例中,有些人会称之为热、冷、冷。因为有两个实例永远不会被使用。

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

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

并且当数据增长时,单个实例太慢而无法按时 return 数据,那时候我会将每个实例分片到其他 EC2 实例中。

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

您想使用 ReadPreference, which will allow you to direct read requests to secondaries. Example code for the MongoDB node.js driver can be seen here.

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