私はmonodbシャーディングをデプロイしています。3つのマシンにレプリカセットをデプロイしています。
dev41:27017,dev42:27017,dev193:27017
およびconfigsvr
は3つのマシンで:
dev41:27019,dev42:27019,dev193:27019
マシンのモンゴ:
dev41:28000
最後に、レプリカをmongosに追加しようとします。
mongo dev41:28000/admin
sh.addShard('rs0/dev41,dev42,dev193')
次にエラーが発生しました:
{
"ok" : 0,
"errmsg" : "could not find Host matching read preference { mode: \"primary\" } for set rs0",
"code" : 133
}
私は同じ問題に直面し、Mongosログファイルを調べたところ、
内部ユーザーとしてホスト名を認証できません。エラー:認証に失敗しました。
ここを参照してください:内部ユーザー認証。SecKeyファイルとauth- Enabledで発生します。
私はmongod.confファイルを開き、
security: authorization: enabled
keyFile: /var/run/mongodb/secKey.key
行方不明だったので、それを追加してmongodを再起動しました。その後、Mongosからシャードを再度作成し、現在は機能しています。
同じ問題があり、レプリカセットの名前がaddShardコマンドで間違っているだけであることがわかりました。
これは@Miroslavの回答に追加されますが、/ etc/hostnameにあるホスト名は/ etc/hostsにあるホスト名と一致しなければなりませんでした(変更時に再起動することを忘れないでください)。
すべてのサーバーに共通の/ etc/hostsファイルを使用していましたが、一致するように/ etc/hostnameファイルを更新していませんでした。
幸運を
同じ問題がありましたが、sh.addShard()
を呼び出す前に、新しいシャードサーバー(mongosではない)にログインし、次のコマンドを呼び出す必要があるという問題がありました。
_rs.initiate({ _id : "REPLICA_SET_NAME", members: [ { _id : 0, Host : "HOSTNAME:27017" } ] })
_
その後、sh.addShard()
を問題なく呼び出すことができました。
これは、私のmongo.confで_security: authorization: enabled
_なしでも機能することに注意してください。
乾杯、
同じ症状がありましたが、mongodbと設定ノード間でキーファイルに一貫性がないという問題がありました。
同じ問題がありました。私の構成の問題は、構成サーバーを実行するように設定したホストの/ etc/hostsに、新しいシャードとして追加しようとしている各シャードメンバーがないことでした。/etc/hostsに欠落しているシャードメンバーを追加したときに問題が修正されました。
このエラーは、addShard()コマンドで指定されているシャードホストに到達できない場合にも発生します。 mongosを終了し、telnetしてみます。
telnet dev42 27017
Telnetが機能しなかった場合は、最初に修正する必要があります。
その後、あなたはただ使う必要があります:
sh.addShard("your_rs_name/rs_master_ip_or_hostname:port")
モンゴスはあなたが追加したrsのすべてのメンバーを取得します。幸運を
私には同じ問題であると思われるものがありました。
私の場合、問題は2つのシャードサーバーがダウンしたことでした。私は単にそれらを再び起動しただけで、コマンドが反映されるまでに少し時間がかかりました(削除を行ったが、一部のドキュメントがコレクションにまだ表示されていた)。
アービターノードでmongodbサービスが実行されているかどうかを確認してください、これで問題が解決しました