如何通过命令行在replicaset中的辅助mongodb服务器中设置rs.slaveOk()?
我尝试了以下方法:
${MONGO_HOME}/bin/mongo --port ${MONGO_PORT2} --host ${MONGO_SECONDARY2} --eval "printjson(rs.slaveOk())"
${MONGO_HOME}/bin/mongo --port ${MONGO_PORT2} --host ${MONGO_SECONDARY2} --eval "printjson(rs.slaveOk(true))"
${MONGO_HOME}/bin/mongo --port ${MONGO_PORT2} --host ${MONGO_SECONDARY2} --eval "printjson(db.getSiblingDB('admin').getMongo().setSlaveOk())"
该命令在输出日志中以undefined
执行。
我试图通过主服务器中的shell设置它。
答案 0 :(得分:13)
创建文件/etc/mongorc.js
并在其中添加rs.slaveOk()
。正在每个shell启动时评估该文件。
有关详细信息,请查看here
答案 1 :(得分:4)
调用以下内容应该可以正常工作,该方法没有返回类型,因此不会将任何内容打印回屏幕
rs.slaveOk
在mongo.exe中运行> rs.slaveOk
function (value) { return db.getMongo().setSlaveOk(value); }
>
也将如何实现,因为它只是一个辅助方法:
setSlaveOk
还有> db.getMongo().setSlaveOk
function ( value ) {
if( value == undefined ) value = true;
this.slaveOk = value;
}
方法:
> db.test.findOne()
null
您始终可以尝试查询辅助节点上的其中一个集合,以确保该节点是可查询的:
slaveOk()
更新 - 更清晰一点
设置--shell
仅对其执行的控制台会话有效,因此您需要传入脚本或使用C:\mongodb\bin>mongo.exe --port 27012 --eval "rs.slaveOk()" --shell
MongoDB shell version: 3.0.5
connecting to: 127.0.0.1:27012/test
type "help" for help
rs1:SECONDARY> db.test.find()
{ "_id" : ObjectId("5630fdf2af4abd9f8ae7f79c"), "test" : true }
rs1:SECONDARY>
参数保持连接到控制台
rs.slaveOk()
如果我们没有通过C:\mongodb\bin>mongo.exe --port 27012 --shell
MongoDB shell version: 3.0.5
connecting to: 127.0.0.1:27012/test
type "help" for help
rs1:SECONDARY> db.test.find()
Error: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
rs1:SECONDARY> exit
bye
,我们会收到以下回复:
allKeys = keys(team_dict);
答案 2 :(得分:0)
JFYI:
似乎rs.slaveOk()
即将被弃用,而MongoDB建议使用rs.secondaryOk()
以下是您将在MongoShell中看到的官方警告:
警告:slaveOk()已过时,可以在下一个主要版本中删除 发布。请改用secondaryOk()。
欢呼