在副本集模式下连接到Mongo

时间:2013-03-11 18:09:55

标签: mongodb

我有一个运行副本集的独立Mongo实例。我似乎无法在Mongo shell中连接和运行任何查询。我得到以下内容:

error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

我像这样设置了SlaveOk:

db.getMongo().setSlaveOk()

..但我仍然收到错误:

error: {
"$err" : "not master or secondary; cannot currently read from this replSet member",
"code" : 13436
}

我似乎无法在Google上找到直接答案:如何使用mongo shell连接到我的副本集?

7 个答案:

答案 0 :(得分:9)

如果要连接到不是主副本的副本集中的节点,则需要明确告诉客户端您没有连接到主服务器。

你可以通过调用

来做到这一点
  

rs.slaveOk()

然后,您可以执行查询。

请注意,当连接到从属节点时,您将只能执行查询,而不能对存储库进行更改。

答案 1 :(得分:9)

我遇到了同样的问题并使用

解决了这个问题
rs.initiate()

答案 2 :(得分:7)

您已连接到既未处于州二级或主级的节点。该节点可以是仲裁器,也可以是恢复模式中的辅助节点。例如,如果我有一个3个节点的副本集,(其中有一个主节点,一个辅助节点和一个仲裁节点)如果我连接到仲裁器并发出查询,即使我设置了slaveOK,我也会得到相同的错误。 shell的命令行提示符应指示您连接的节点所处的状态:

foo:ARBITER> db.test.find()
error: {
    "$err" : "not master or secondary; cannot currently read from this replSet member",
    "code" : 13436
}

答案 3 :(得分:0)

你试过吗:db.getMongo()。setSlaveOk(true)

答案 4 :(得分:0)

我也得到了错误。但是,当我尝试使用机器名称而不是' localhost'连接到辅助节点时或127.0.0.1错误消失了。

答案 5 :(得分:0)

仅当您在独立模式下运行副本集的一部分而未将其从副本集中完全删除时,才会显示此错误。 例如您在另一个端口上重新启动实例,但在启动它时不要删除--repSet选项。 这启动它,但既不作为主要也不作为次要,因此错误 不是主人或辅助人员;

根据您最初的意图,在正确的端口上使用正确的--repSet选项重新启动实例。这将它添加到副本集并消除此错误

如果您打算在一段时间内将实例作为独立运行(比如创建索引),则在没有--repSet选项的其他端口上启动它

答案 6 :(得分:0)

我在使用两个副本集的登台服务器上运行aggregate()时遇到了同样的错误。我认为您需要将读取首选项更改为' secondaryPreferred'。

在查询功能之后输入.read(' secondaryPreferred')。