web-dev-qa-db-ja.com

ユーザーを作成できません

Google Compute EngineでMongoDBバージョン2.6.6を使用していて、クリックしてデプロイする方法を使用しました。

rs0:SECONDARY> db.createUser({user:"admin", pwd:"secret_password", roles:[{role:"root", db:"admin"}]})
2015-07-13T15:02:28.434+0000 Error: couldn't add user: not master at src/mongo/Shell/db.js:1004

rs0:SECONDARY> use admin
switched to db admin
rs0:SECONDARY> db.createUser({user:"admin", pwd:"secret_password", roles:["root"]})
2015-07-13T15:13:28.591+0000 Error: couldn't add user: not master at src/mongo/Shell/db.js:1004
10
Miguel Fermin

MongoDBは、Compute Engineインスタンスのクラスター(MongoDBレプリカセットとも呼ばれます)にデプロイされます。各インスタンスは、データベースファイル用に起動ディスクと個別のディスクを使用します。

プライマリノードとマスターノードは、書き込みを受け入れることができるノードです。 MongoDBのレプリケーションは「シングルマスター」です。一度に1つのノードのみが書き込み操作を受け入れることができます。

セカンダリノードとスレーブノードは、プライマリから複製される読み取り専用ノードです。

エラーメッセージは、セカンダリにユーザーを追加しようとしているようです。プライマリにユーザーを追加してみてください。

3
Kamran

私はmongo 3.2で同様の問題がありました:

エラー:ユーザーを追加できませんでした:マスターではありません:

Rootロールで新しいユーザーを作成しようとしたとき。

Mongoのローカルコピーのみを使用していました。

私のmongod.confファイルで、次のコメントを外しました。

replication:
   replSetName:  <node name>

コメントアウトして再起動すると問題が解決しました。モンゴはそれが複製セットの一部であると思っていたと思い、マスターが誰であるかについて混乱していました。

編集:

また、レプリケーションセットをセットアップしようとしていて、上記のエラーが発生した場合は、次のコマンドを実行します。

rs.initiate()

これにより、レプリケーションセットが開始され、現在のノードがプライマリとして設定されます。

終了してから再度ログインすると、次のように表示されます。

プライマリー>

次に、必要に応じてユーザーを作成します。

21
comfytoday

レプリカセットの作成をスクリプト化すると、このエラーが発生しました。

解決策は、rs.initiate()db.createUser()の間に遅延を追加することでした。

レプリカセットの作成はバックグラウンドで行われているようで、プライマリノードが実際にプライマリになるには時間がかかります。インタラクティブな使用では、次のコマンドの入力中に遅延があるため、これは問題を引き起こしませんが、対話をスクリプト化するときは、遅延を強制する必要がある場合があります。

7
D. SM

Mongo 3.4を実行していると思ったときにこの問題に遭遇しましたが、mongo 3.6でした。 3.6をアンインストールして3.4をインストールすると、問題が解決しました。

0
Dylan