なぜMongoはSTARTUP2で動かなくなるのですか?


12

Mongoいくつかのセカンダリを含むレプリカセットがあります。セカンダリインスタンスをホストするボックスがクラッシュし、データベースが失われました。

セカンダリMongoインスタンスを再び起動しましたが、現在は12時間以上STARTUP2で停止しています。それは理にかなっていますか?ドキュメントはMongo、RECOVERING状態に入る前に、短時間STARTUP2にあるべきだと言っています

STARTUP2とはどういう意味ですか?プライマリからデータベースをコピーしていますか?どうすれば検証できますか(MongoがLinuxで実行されていると仮定)?

回答:


11

エオインブラジルの答えは部分的に間違っています。新しいノードは、STARTUP2に長時間存在する可能性があります。投稿されたリンクは言う:

レプリカセットの各メンバーは、mongodがそのメンバーの構成のロードを完了するとすぐにSTARTUP2状態に入り、その時点でレプリカセットのアクティブメンバーになります。その後、メンバーは最初の同期を行うかどうかを決定します。メンバーが最初の同期を開始すると、すべてのデータがコピーされ、すべてのインデックスが作成されるまで、メンバーはSTARTUP2に残ります。その後、メンバーはRECOVERINGに移行します。

700 GBのコレクションを管理しており、新しいノードを追加しても、STARTUP2の状態は24時間以上維持されます。ただし、データベースが成長するかどうかを監視することで、何かが起こっているかどうかを確認できます。新しいノードでデータベースのサイズを確認するには

show databases

または、データディレクトリを観察して、まだ成長しているかどうかを確認することもできます。(Linuxでは、コマンドls、df、du、iotopなどを使用して...)


1
show databasesで失敗not master and slaveOk=false
JDPeckham

ログを見ると、進行状況を確認できます。たとえば、次のように表示されます。[rsSync] Index Build:2538000/22982417 11%
Daniel Benedykt

4

STARTUP2状態は、ノードが投票できないことを意味します。RSのメンバーは、MongoDプロセスが構成の読み込みを完了すると、この状態に入ります。この状態では、メンバーは内部複製操作を処理するスレッドを作成しましたが、まだ状態をRecoveringに変更し、それ以降はセカンダリに変更していません([状態とドキュメントの詳細]を参照)

ノードが短期間以上この状態にある場合、奇妙な動作が発生しています。これは、ログなしで分析して、スタックしている理由を判別することはほとんど不可能です。rs.status()およびdb.printSlaveReplicationInfo()を実行すると、ノードのローカル画像に関する詳細が表示されます。

これを解決する通常の方法は、ノードをシャットダウンし、そのデータファイル(dbpath内のファイル)を消去してから再起動することです。これにより、最初の同期プロセスが再開され、SECONDARYに移行するはずです。STARTUP2で再びスタックする場合は、ログを調べて理由に関する詳細情報を収集する必要があります。さまざまな原因がありますが、発生する可能性があるのは不安定なネットワークまたはローカルリソースの競合です。

注意すべき1つの点は、最初の同期が進行している間、ノードはSTARTUP2のままになるため、同期されるデータの量によっては、かなりの時間(場合によっては数日)になる可能性があることです。


ありがとう。データを削除し、Mongoを再起動しました。まだSTARTUP2にあります。Mongoが機能しているようです。CPUを消費してdb.statsおり、データベースで見たように成長しています。ログには、いくつかのオブジェクトが記載されていますcloned。私はまだこの問題の考えられる原因を探しています。
マイケル

1
それでも問題が解決しない場合は、別のノードからコピーするだけです(この手順-docs.mongodb.org/manual/tutorial/resync-replica-set-member/…を参照)。ログのハイライトと使用しているバージョンの詳細を添付できる場合は、原因を示している可能性がありますが、同様にこれは異常な動作です。ネットワーク遅延がどのようなものかを確認するために、ノード間でpingを試行しましたか?
eoinbrazil

pingホスト間のMongo 2.4.6 は問題ありません。
マイケル14

断続的なネットワークの問題である可能性があるため、ping時間はどのくらいですか?この場合、これは非標準の動作であり、何が起こっているのかを正確に判断しようとすると、ログが真実の主要なソースであるため、ログ出力の一部を追加できればはるかに簡単です。
eoinbrazil 14

ここにログを表示できないのではないでしょうか。しかし、ダウンしている別のセカンダリメンバーに接続しようとしていることに気付きました。それが問題の原因になりますか?
マイケル14

1

考えられる原因の1つは、ここで述べたように、セカンダリが「古くなった」ことです。

メンバーを再同期するときは、RSに大きな負荷がかかっていないことを確認してください。


0

STARTUP2状態は、十分なディスク容量がない可能性があります。さて、同期する場所がないため、@ STARTUP2状態しか維持できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.