MogoDBのバックアップ方法について調査していたら、MongoDB社のスタッフのブログに簡潔にまとまっているものがあったので、翻訳して紹介します。英語が得意な人は原文を読んで下さい(※急いで書いたので誤訳があるかもしれません)。
MongoDB Backup Strategies Compared
http://blog.mms.mongodb.com/post/86915115595/mongodb-backup-strategies-compared
MongoDBのバックアップの方法は主に3つあります。
- mongodump:MongoDB付属のユーティリティを使用する方法。
- データファイルのコピー:LinuxのLVMやAWSのEBSなどを使用してファイルシステムのスナップショットを取得する方法。
- MongoDBの管理サービス(MMS):MMSのバックアップ機能を利用する方法。
それぞれについての詳細は、以下の通りです。
mongodump
mongodumpは、MongoDBのデータをバックアップするMongoDB付属のツールです。 mongodumpは、データベース全体、コレクション、クエリの結果をダンプすることができます。oplogをダンプすることで、一貫性のあるデータのスナップショットを生成することができます。バックアップ後は、mongorestoreを使用することで、新規または既存のデータベースにデータを復元できます。mongorestoreは、mongodumpによって生成されたBSONデータベースダンプから、コンテンツをインポートし、oplogを再生します。
mongodumpは、直接的なアプローチであり、特定のニーズに基づいてフィルタリングされたバックアップを生成できる利点があります。小規模なシステムにおいては十分なソリューションですが、大規模なシステムには適していません。多くの負荷を及ぼすため、スケーラブルなソリューションとは言い難いです。また、差分アプローチではないので、スナップショットの各時点で完全なダンプを必要とし、リソースを大量に消費します。使用しているシステムが大規模になるにつれて、ファイルシステムのスナップショットやMMSのような影響の低いソリューションを検討する必要があります。
さらに、mongodumpを小規模なシステムで実行する場合はあまり問題にはなりませんが、大規模なシャード化されたシステムで実行する場合は複雑さが伴います。
データファイルのコピー
データベースプロセスがデータを保存するために使用するファイルをコピーすることで、MongoDBをバックアップすることができます。データベースの一貫性のあるスナップショットを取得するには、データベースに対するすべての書き込みを停止して、標準のファイルシステムのコピーツールを使用するか、ファイルシステム全体のスナップショットを生成する必要があります(ボリュームマネージャがそれをサポートしている場合)。
例えば、Linux LVMは、バックアップとリストアの目的でコピーされたファイルのスナップショットを、迅速かつ効率的に生成します。ただし、スナップショットの論理的な一貫性を保証するには、MongoDBのジャーナリング機能を有効にする必要があります。
フルバックアップを取ってそれらを復元することに関しては、バックアップがストレージレベルで取得されるため、ファイルシステムのスナップショットの方がmongodumpよりも効率的な手法となりえます。しかし、mongodumpとは異なり、バックアップに特定のデータベースやコレクションをターゲットにする柔軟性が無いという点で、より粗いアプローチと言えます。この方法の場合、巨大なバックアップファイルが生成され、バックアップ操作の時間が長くなる可能性があります。
システムが大規模、複雑化するにつれて、ファイルシステムのスナップショットの実行は、継続的なメンテナンスを必要とします。複数のレプリカセット間でのバックアップを調整するためには(特にシャード化されたシステムでは)、さまざまなコンポーネント間の整合性を確保するためのdevopsの専門知識を必要とします。
MongoDB管理サービス (MMS)
MMSは、完全に管理されたサービスとしてMongoDBの継続的なオンラインバックアップを提供します。MongoDBを使用している環境にバックアップエージェントをインストールすると、セキュアで冗長化されたMongoDBのデータセンターに対して初期同期を行います。その後、継続的なバックアップをするために、MMSは暗号化して圧縮されたoplogを送信します。
デフォルトでは、MMSは6時間毎にスナップショットを取り、oplogを24時間保持します。スナップショットのスケジュールやリテンションポリシーは、要件を満たすように設定することができます。また、非ミッションクリティカルなデータベースやコレクションを除外するための柔軟性も持っています。
レプリカセットに対しては、カスタム・ポイントインタイムのスナップショットにより、過去24時間内の任意の瞬間に復元することができます。 シャード化されたシステムにおいて、MMSは一貫性のあるクラスタのスナップショットを6時間毎に生成します。また、シャード化されたクラスタのきめ細かいリストアのために、チェックポイントを使用するオプションがあります。
MMSは、oplogだけを読み取るため、継続的なパフォーマンスへの影響は最小限に抑えられます。
クラウドベースのサービスに加えて、MMSはMongoDBのStandardまたはEnterpriseサブスクリプションの一部としてオンプレミスソフトウェアとして利用可能です。