MongoDBバージョン3.0.0を使用しています。私のマシンでmongodbレプリケーションをセットアップしようとしています。レプリケーションは最初にセットアップされましたが、VMでのいくつかの変更により、全体がクラッシュしました。もう一度セットアップしようとすると、セカンダリとアービターがスタートアップモードでスタックしました。
私が設定したmongoDB confファイルで
_replSet=ReplicaSet1
_
コマンドを使用して2台のマシンを追加しました
_rs.add("10.235.96.12:27017")
rs.add("10.235.96.12:27017")
_
しかし、この後、プライマリでrs.status()
を実行すると、セカンダリとアービターがまだスタートアップに表示されます
_ReplicaSet1:PRIMARY> rs.status()
{
"set" : "ReplicaSet1",
"date" : ISODate("2015-07-31T04:45:57.260Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "BOSPROD9:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 63104,
"optime" : Timestamp(1438257913, 1),
"optimeDate" : ISODate("2015-07-30T12:05:13Z"),
"electionTime" : Timestamp(1438254975, 2),
"electionDate" : ISODate("2015-07-30T11:16:15Z"),
"configVersion" : 7,
"self" : true
},
{
"_id" : 1,
"name" : "10.235.96.12:27017",
"health" : 1,
"state" : 0,
"stateStr" : "STARTUP",
"uptime" : 62663,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2015-07-31T04:45:56.520Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 0,
"configVersion" : -2
},
{
"_id" : 2,
"name" : "10.235.96.13:27017",
"health" : 1,
"state" : 0,
"stateStr" : "STARTUP",
"uptime" : 60043,
"lastHeartbeat" : ISODate("2015-07-31T04:45:55.786Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 0,
"configVersion" : -2
}
],
"ok" : 1
}
_
セカンダリまたはアービターで_rs.conf
_を実行しようとすると、メッセージが表示される
_2015-07-31T05:23:07.927+0000 E QUERY Error: Could not retrieve replica set config: {
"info" : "run rs.initiate(...) if not yet done for the set",
"ok" : 0,
"errmsg" : "no replset config has been received",
"code" : 94
}
_
私は複数のマシンですべてのlocal.0、local.1ファイルをクリーンアップするために何度も試み、ジャーナルフォルダーからもすべてのジャーナルファイルを削除しました。それでも同じ問題が発生します。誰かが私がここで間違っていることを教えてもらえますか?
すべてのメンバーにreplsetを設定しました。スタンドアロンモードで起動してみましたが、動作します。
「BOSPROD9」から、mongoshellを使用して他のサーバーに接続してみます。
$ mongo --Host 10.235.96.12 --port 27017
$ mongo --Host 10.235.96.13 --port 27017
(Telnetは同じではありません。)これが機能しない場合は、ファイアウォールまたはBindIPである可能性があります。
Bind_ipを確認します(0.0.0.0である必要があります。mongodb.confの変更は127.0.0.1です):
$ netstat -nap | grep :27017 | grep LISTEN
tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN -
10.235.96.12と10.235.96.13のログファイルを見てみてください。彼らは設定を受け取りましたか?
この方法で再構成してみてください:
mongo> var cfg = {_id:"ReplicaSet1",members:[{_id:0, Host:"BOSPROD9:27017"},{_id:1, Host:"10.235.96.12:27017"},{_id:2, Host:"10.235.96.13:27017",arbiterOnly:true}]};
mongo> rs.reconfig(cfg);
ソリューション:
IPの代わりにホスト名を使用する:すべてのサーバーにホスト名を付け、hosts-filesを更新し、rs構成でホスト名を使用します。 mongodbは、IPアドレスではなくホスト名を使用するようにアドバイスしているようです。
アービターを作成するためにVMを複製したときも同じ問題がありました。aldwinaldwinが言ったことと同様に、/ etc/hostsファイルのこの行のIPアドレスを変更する必要がありました "- 192.168.1.1 mongodb-arbiter.domain.local mongodb1-arbiter "をサーバーのIPアドレスと一致させます。
aldwinaldwin's answer 、に記載されているように、すべてのメンバーの接続を確認します
すべての接続が正常に機能する場合、 初期同期 を実行する必要がある可能性があります
私はこの問題を抱えていて(Mongo 4.2.1を使用)、私の場合、ノード間の接続は問題ありませんでしたが、問題は、新しいノード(STARTUP状態でスタックしたノード)が実際に到達できないことでしたホスト名ですが。例えば:
mongo new.node.hostname
プライマリノードと他のノードからは正常に機能していましたが、新しいノード自体からは機能していませんでした(NATルーターに問題があるため)。したがって、私の場合の解決策は、このホスト名を/etc/hosts
を更新してホスト名を追加することにより、マシン上のlocalhost:
127.0.0.1 localhost.localdomain localhost new.node.hostname
その後、ローカル接続が機能し、ステータスが自動的に「STARTUP2」に切り替わり、初期同期が開始されました。
私の場合、SSLの問題でした。mongodbログでは、プライマリノードに送信されたハートビートのsslハンドシェイクエラーでした。