私のmongodbのバージョンは3.2.4です。2 つのデータベース ノードと 1 つのアービターを持つレプリカ セットがあります。私の顧客サイトでは、すべてのデータベースが長時間正常に動作しています。ある日、プライマリ データベースがメンテナンスのためにダウンしました。約 2 時間後、-was-primary は元に戻り、再びプライマリになり、セカンダリ データベースはロールバック状態になります。上記のシナリオに関していくつか質問があります。プライマリ データベースが初めてダウンしたとき、セカンダリ データベースに同期されていないデータベース エントリがある場合、どうなりますか? 障害が発生したプライマリが再び起動したとき、それは正しくプライマリになりますか? 再びプライマリ データベースになる前に、現在のプライマリ データベースはセカンダリ データベースと同期しますか? 最新のプライマリ データベースとセカンダリ データベースの状態を考慮して、ロールバック フォルダ内の失われたデータを回復するにはどうすればよいですか? ありがとうございます。
2 に答える
0
Rick は良い回答を書きましたが、最後の質問には答えていませんでした... ロールバックが発生した場合、dbpath の下に rollback-directory が作成されます。そのディレクトリでは、ロールバックされたすべてのドキュメントをデータベース列固有の json ファイルで見つけることができます。これらのファイルは、mongoimport でプライマリに戻すことができます...
于 2016-09-17T15:12:55.750 に答える
0
メンテナンスのためにプライマリを停止する場合は、プライマリで rs.stepDown() コマンドを実行する必要があります。これにより、他の DB ノードがプライマリになるように選択されます。
- プライマリがステップダウンし、書き込みを拒否します。以下の次の箇条書きが完了するまで、アプリケーションは簡単な書き込みエラーを受け取ります。
- 選出されたセカンダリは、プライマリ自体になる前に、古いプライマリと同期していることを確認します。これは一瞬で発生するはずですが、書き込み負荷の高いアプリケーションの場合は、さらに時間がかかることがあります。
- 古いプライマリが再起動されると、最高の優先度を与えるとプライマリになります。2 つのデータ ノードの優先順位を等しくし、プライマリを返さないことを引き続きお勧めします。他のノードを昇格させるプロセスは、上記の 2 つの箇条書きとまったく同じです。
適切なステップダウンを行うと、現在のロールバック状態は正常ではないようです。ロールバックを適用するための適切なリンクは次のとおりです: https://scalegrid.io/blog/how-to-recover-from-a-mongodb-rollback/
于 2016-09-16T19:03:48.303 に答える