web-dev-qa-db-ja.com

起動時に立ち往生しているセカンダリとアービター

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を設定しました。スタンドアロンモードで起動してみましたが、動作します。

7
Vinnie

「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アドレスではなくホスト名を使用するようにアドバイスしているようです。

6
aldwinaldwin

アービターを作成するためにVMを複製したときも同じ問題がありました。aldwinaldwinが言ったことと同様に、/ etc/hostsファイルのこの行のIPアドレスを変更する必要がありました "- 192.168.1.1 mongodb-arbiter.domain.local mongodb1-arbiter "をサーバーのIPアドレスと一致させます。

1
Bruc3

aldwinaldwin's answerに記載されているように、すべてのメンバーの接続を確認します

すべての接続が正常に機能する場合、 初期同期 を実行する必要がある可能性があります

0
ice6

私はこの問題を抱えていて(Mongo 4.2.1を使用)、私の場合、ノード間の接続は問題ありませんでしたが、問題は、新しいノード(STARTUP状態でスタックしたノード)が実際に到達できないことでしたホスト名ですが。例えば:

mongo new.node.hostname

プライマリノードと他のノードからは正常に機能していましたが、新しいノード自体からは機能していませんでした(NATルーターに問題があるため)。したがって、私の場合の解決策は、このホスト名を/etc/hostsを更新してホスト名を追加することにより、マシン上のlocalhost:

127.0.0.1   localhost.localdomain localhost new.node.hostname

その後、ローカル接続が機能し、ステータスが自動的に「STARTUP2」に切り替わり、初期同期が開始されました。

0
BigBourin

私の場合、SSLの問題でした。mongodbログでは、プライマリノードに送信されたハートビートのsslハンドシェイクエラーでした。

0
Parvez Kazi