如何通过命令行在replicaset中的辅助mongodb服务器中设置rs.slaveOk()?

时间:2015-10-27 10:59:41

标签: mongodb replicaset

如何通过命令行在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设置它。

3 个答案:

答案 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()。

欢呼