我在同一方面看过很多问题,但不知怎的,我仍然无法成功连接到MongoDB Slave。
我使用mongo-k8s-sidecar在Kubernetes上运行我的集群,将我的应用程序直接连接到master工作正常,但是每当我尝试连接到slave时,我似乎无法读取,这里是错误代码:< / p>
MongoError: not master and slaveOk=false
我在我的应用程序中使用Node.js,这就是我连接的方式:
var mongodb = require('mongodb').Db;
var Server = require('mongodb').Server
var db = new mongodb('dbname', new Server("localhost",27017,{slaveOk: true}));
db.open(function(err, conn){
if (err){
callback(err);
}else {
client=conn;
client.createIndex("tablename", {field:1}
, {background:true}, function(err, i) {
logger.info(err);
});
//The rest of the code is trimmed
我在这里缺少什么?
答案 0 :(得分:4)
即使您正在使用slaveOk / ReadPreference.SECONDARY,也无法在辅助成员上运行createIndex()
。
如果您在没有createIndex()
调用的情况下测试代码,您可能会发现它正常运行。
有关详细信息,请参阅Build Indexes on Replica Sets。基本上,如果您想在辅助服务器上构建索引,则需要停止mongod实例,将其作为独立启动(不使用replSet选项),然后构建索引。
或者您只能在主节点上创建索引,并且索引创建将复制到辅助节点。