读操作只:
有没有办法设置一个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,我想轻松地将源代码推送到我的副本集中的每个实例。
答案 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', ...