パブリッククラウド環境でMongoDBレプリカセットを妥当な期間実行している場合、オッズは次のようになります。 「ロールバック」を経験しました。気が遠くなるように聞こえますが、システムでロールバックが発生した場合にデータを回復するための簡単な手順があります。
ロールバックはいつ発生しますか?
MongoDBレプリカセットのロールバックは、次の一連の手順で発生する可能性があります
1。 MongoDBプライマリは、他のセカンダリにまだ複製されていない書き込みを受け入れてからクラッシュします
2。別のサーバーがプライマリになり、他の書き込みを受け入れます
3。前のプライマリが再び起動し、その状態を過半数に再同期したとき
そもそもロールバックの発生を防ぐことはできますか?
もちろん。しかし、いつものように、それは価格が付属しています。書き込みの懸念を「MAJORITY」に設定できます。これには、MongoDBが正常に確認する前に、すべての書き込みがレプリカセット内のノードの大部分にコミットされている必要があります。ただし、これは書き込みスループットに劇的な影響を及ぼします。したがって、現実の世界では、重要なトランザクションデータの書き込みに書き込み懸念「MAJORITY」のみを使用するのが適切なバランスになる可能性があります
ロールバックからデータを回復する方法
以下は、ロールバックの場合にデータを回復するための4つの簡単な手順です
1.ロールバックファイルを見つける
ロールバックが発生すると、ロールバックデータのbsonファイルがMongoDBデータパスの「rollback」ディレクトリに配置されます。ファイルは次のようになります
<dbname>.<collectioname>.2016-02-08T19-34-44.0.bson
2.ロールバックから別のデータベースまたはサーバーにデータをロードします
私の好みは、ロールバックファイルを新しいサーバーにコピーし、mongorestoreを使用してサーバーにロードすることです。使用できる構文は次のとおりです
mongorestore -u <> -p <> -h 127.0.0.1 -d <rollbackrestoretestdb> -c <rollbackrestoretestc> <path to the .bson file> --authenticationDatabase=<database of user>
3.データをふるいにかけ、不要なデータをクレンジングします
この時点で、データベース管理者は、ロールバックから保持するデータと意味がなくなったデータを自分の裁量で決定する必要があります。ほとんどの場合、すべてのデータをインポートできる可能性はほとんどありません。これは、ロールバックリカバリでおそらく最も難しいステップです。
4.クラスターのプライマリにデータをインポートします
mongodumpおよびmongorestoreツールを使用して、クレンジングされたデータをダウンロードし、元の本番クラスターに再インポートします。
ロールバック操作の詳細については、MongoDBの公式ドキュメントを参照してください