如何防止 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', ...
只读操作:
有没有办法拥有一个 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', ...