11

我有一个运行副本集的独立 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 连接到我的副本集?

4

7 回答 7

11

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

rs.initiate()
于 2013-12-27T18:42:54.747 回答
9

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

你可以通过调用来做到这一点

rs.slaveOk()

然后,您可以执行查询。

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

于 2013-08-05T05:04:53.737 回答
7

您连接到一个既不处于辅助状态也不处于主要状态的节点。该节点可以是仲裁器,也可能是恢复模式中的辅助节点。例如,如果我有一个包含 3 个节点的副本集(其中有一个主节点、一个辅助节点和一个仲裁器),如果我已连接到仲裁器并发出查询,即使我已将 slaveOK 设置为 true,我也会收到相同的错误. shell 的命令行提示符应该指示您连接的节点处于什么状态:

foo:ARBITER> db.test.find()
error: {
    "$err" : "not master or secondary; cannot currently read from this replSet member",
    "code" : 13436
}
于 2013-03-11T18:52:19.223 回答
0

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

于 2013-08-15T06:35:12.790 回答
0

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

于 2013-07-31T23:01:20.607 回答
0

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

只需将 .read('secondaryPreferred') 放在查询函数之后。

于 2016-02-04T10:28:56.110 回答
0

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

根据您最初打算执行的操作,在正确的端口上重新启动实例并使用正确的 --repSet 选项。这会将其添加到副本集中并消除此错误

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

于 2015-10-30T00:05:36.063 回答