首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么设置readPreference nearest不会生成主错误?

为什么设置readPreference nearest不会生成主错误?
EN

Stack Overflow用户
提问于 2016-02-27 08:02:02
回答 2查看 379关注 0票数 0

我们使用节点堆栈连接到mongo副本集。因为我们的副本在地理上是分布的,所以我们希望在URI中使用readPreference选项,并将其设置为nearest。但是,当我们这样做时,虽然性能得到了极大的提高,但我们开始收到“不是主控”的错误。

我误解了旗帜的用法吗?

我们使用的是mongo 2.6.3,我们使用的是mongodb节点库的2.0.24版本。

连接的URI为:

代码语言:javascript
复制
mongodb://mongo-1:27017,mongo-2:27017,mongo-3:27017,mongo-4:27017,mongo-5:27017/db?replicaSet=main&readPreference=nearest

刻录

EN

回答 2

Stack Overflow用户

发布于 2016-02-27 23:05:17

选项1:您可以将slaveOk附加到连接URI的末尾。readPreference告诉mongodb您希望如何读取数据,而slaveOk则指示可以从辅助数据库中读取数据(位复制),但工作正常。

例如:

代码语言:javascript
复制
mongodb://mongo-1:27017,mongo-2:27017,mongo-3:27017,mongo-4:27017,mongo-5:27017/db?replicaSet=main&readPreference=nearest&slaveOk=true

请参阅&slaveOk=true和URI结尾。

https://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#read-preference

选项2:如果上面的解决方案不起作用,您需要修改代码:

代码语言:javascript
复制
var client = require('mongodb').MongoClient;

var uri= "mongodb://mongo-1:27017,mongo-2:27017,mongo-3:27017,mongo-4:27017,mongo-5:27017/db?replicaSet=main";

请注意,我已经修改了连接uri。我没有在Uri中设置readPrefference,而是将其移到了MongoClient.connect中的as db选项中。

代码语言:javascript
复制
var options =  {db:{readPreference:"ReadPreference.NEAREST"}};
client.connect(uri, options, function(err, db){
    if(err){
        console.log(err);
        return;
    }
   db = db.collection('data');
   db.findOne({}, function(err, result){
       console.log(result); 
   }); 
});

我已经在nodejs驱动程序2.2中进行了测试,并希望它在2.0版本中也能正常工作。

票数 0
EN

Stack Overflow用户

发布于 2016-02-28 05:20:40

在2.0.28中修复的驱动程序中似乎有一个错误,其中findAndModify使用readPreference设置。将驱动程序升级到最新版本似乎已经解决了这个问题。

2.0.x drivers history

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35663912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档