我们使用节点堆栈连接到mongo副本集。因为我们的副本在地理上是分布的,所以我们希望在URI中使用readPreference选项,并将其设置为nearest。但是,当我们这样做时,虽然性能得到了极大的提高,但我们开始收到“不是主控”的错误。
我误解了旗帜的用法吗?
我们使用的是mongo 2.6.3,我们使用的是mongodb节点库的2.0.24版本。
连接的URI为:
mongodb://mongo-1:27017,mongo-2:27017,mongo-3:27017,mongo-4:27017,mongo-5:27017/db?replicaSet=main&readPreference=nearest刻录
发布于 2016-02-27 23:05:17
选项1:您可以将slaveOk附加到连接URI的末尾。readPreference告诉mongodb您希望如何读取数据,而slaveOk则指示可以从辅助数据库中读取数据(位复制),但工作正常。
例如:
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:如果上面的解决方案不起作用,您需要修改代码:
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选项中。
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版本中也能正常工作。
发布于 2016-02-28 05:20:40
在2.0.28中修复的驱动程序中似乎有一个错误,其中findAndModify使用readPreference设置。将驱动程序升级到最新版本似乎已经解决了这个问题。
https://stackoverflow.com/questions/35663912
复制相似问题