11

レプリカ セットを実行しているスタンドアロンの Mongo インスタンスがあります。ただし、Mongo シェルで接続してクエリを実行できないようです。私は以下を取得します:

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 シェルを使用してレプリカ セットに接続するにはどうすればよいですか?

4

7 に答える 7

9

マスターではないレプリカ セット内のノードに接続している場合は、マスターに接続していなくても問題ないことをクライアントに明示的に伝える必要があります。

あなたは呼び出すことによってこれを行うことができます

rs.slaveOk()

その後、クエリを実行できます。

スレーブ ノードに接続されている場合は、クエリを実行することしかできず、リポジトリに変更を加えることができないことに注意してください。

于 2013-08-05T05:04:53.737 に答える
7

セカンダリ状態でもプライマリ状態でもないノードに接続しています。このノードは、アービターまたは回復モードのセカンダリになる可能性があります。たとえば、3 つのノードのレプリカ セット (1 つのプライマリ、セカンダリ、およびアービターがある) がある場合、アービターに接続してクエリを発行すると、slaveOK を true に設定した後でも同じエラーが発生します。 . シェルのコマンド ライン プロンプトには、接続しているノードの状態が示されます。

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

2 つのレプリカ セットを持つステージング サーバーで aggregate() を実行しているときに同じエラーが発生しました。読み取り設定を「secondaryPreferred」に変更する必要があると思います。

クエリ関数の後に .read('secondaryPreferred') を置くだけです。

于 2016-02-04T10:28:56.110 に答える
0

試しましたか: db.getMongo().setSlaveOk(true)

于 2013-07-31T23:01:20.607 に答える
0

エラーも発生しました。しかし、「localhost」または 127.0.0.1 の代わりにマシン名を使用してセカンダリ ノードに接続しようとすると、エラーはなくなりました。

于 2013-08-15T06:35:12.790 に答える