データベースのバックアップは、データを保護または復元する方法に他なりません。これは、データベースの動作状態、アーキテクチャ、およびデータを保存するプロセスです。これは、技術的な停止や災害の状況で非常に役立ちます。したがって、データベースのバックアップを維持し、データベースにバックアップのための優れた簡単なプロセスがあることが不可欠です。
MongoDBは、データベースを簡単にバックアップするためのいくつかのツール/手法を提供します。
この記事では、MongoDBの主要なバックアップと復元のワークフローのいくつかについて説明します。
一般に、MongoDBサーバー/クラスターをバックアップするための最も一般的なオプションは3つあります。
- Mongodump / Mongorestore
- MongoDB Cloud Manager
- データベーススナップショット
これらの一般的なオプションとは別に、MongoDBをバックアップする方法は他にもあります。この記事では、これらすべてのオプションについても説明します。始めましょう。
MongoDump / MongoRestore
小さなデータベース(<100GB)があり、バックアップを完全に制御したい場合は、MongodumpとMongorestoreが最適なオプションです。これらは、データベースまたはコレクションを手動でバックアップするために使用できるmongoシェルコマンドです。 Mongodumpは、バイナリJSON(BSON)形式のすべてのデータを指定された場所にダンプします。 Mongorestoreは、このBSONファイルを使用してデータベースを復元できます。
データベース全体をバックアップする
$ sudo mongodump --db mydb --out /var/backups/mongo
出力:
2018-08-20T10:11:57.685-0500 writing mydb.users to /var/backups/mongo/mydb/users.bson
2018-08-20T10:11:57.907-0500 writing mydb.users metadata to /var/backups/mongo/mydb/users.metadata.json
2018-08-20T10:11:57.911-0500 done dumping mydb.users (25000 documents)
2018-08-20T10:11:57.911-0500 writing mydb.system.indexes to /var/backups/mongo/mydb/system.indexes.bson
このコマンドで最も重要な引数は--dbです。バックアップするデータベースの名前を指定します。この引数を指定しない場合、Mongodumpコマンドはすべてのデータベースをバックアップします。これは非常に集中的なプロセスになる可能性があります。
単一のコレクションをバックアップする
$ mongodump -d mydb -o /var/backups/mongo --collection users
このコマンドは、mydbデータベース内のユーザーコレクションのみをバックアップします。このオプションを指定しない場合、デフォルトでデータベース内のすべてのコレクションがバックアップされます。
Mongodump/Mongorestoreを使用して定期的にバックアップを作成する
標準的な方法として、MongoDBデータベースの定期的なバックアップを作成する必要があります。毎日午前3時3分にバックアップを取りたいとします。Linuxシステムでは、crontabにcronエントリを追加することでこれを行うことができます。
$ sudo crontab -e
この行をcrontabに追加します:
3 3 * * * mongodump --out /var/backups/mongo
データベース全体を復元する
データベースを復元するには、-dbオプションを指定してMongorestoreコマンドを使用できます。 Mongodumpによって作成されたBSONファイルを読み取り、データベースを復元します。
$ sudo mongorestore --db mydb /var/backups/mongo/mydb
出力
2018-07-20T12:44:30.876-0500 building a list of collections to restore from /var/backups/mongo/mydb/ dir
2018-07-20T12:44:30.908-0500 reading metadata file from /var/backups/mongo/mydb/users.metadata.json
2018-07-20T12:44:30.909-0500 restoring mydb.users from file /var/backups/mongo/mydb/users.bson
2018-07-20T12:45:01.591-0500 restoring indexes for collection mydb.users from metadata
2018-07-20T12:45:01.592-0500 finished restoring mydb.users (25000 documents)
2018-07-20T12:45:01.592-0500 done
コレクション全体を復元する
dbから1つのコレクションのみを復元するには、次のコマンドを使用できます。
$ mongorestore -d mydb -c users mydb/users.bson
コレクションがBSONではなくJSON形式でバックアップされている場合は、次のコマンドを使用できます。
$ mongoimport --db mydb --collection users --file users.json --jsonArray
利点
- 非常に使いやすい
- バックアップへのフルアクセスがあります
- バックアップは、NFS共有、AWSS3などの任意の場所に配置できます。
デメリット
- 違いだけでなく、データベースの完全バックアップが必要になるたびに。
- 大規模なデータベースの場合、データベースのバックアップと復元に数時間かかる場合があります。
- デフォルトではポイントインタイムではありません。つまり、バックアップ中にデータが変更されると、バックアップに不整合が生じる可能性があります。 --oplogオプションを使用して、この問題を解決できます。 mongodumpプロセスの最後にデータベースのスナップショットを取得します。
MongoDB Ops Manager
Ops Managerは、データセンターで実行されるMongoDBの管理アプリケーションです。データを継続的にバックアップし、データベースのポイントインタイム復元プロセスを提供します。このアプリケーション内には、MongoDBインスタンスに接続するエージェントがあります。最初に初期同期を実行して、データベースの現在の状態をバックアップします。エージェントは、圧縮および暗号化されたoplogデータをOps Managerに送信し続けるため、継続的なバックアップが可能です。このデータを使用して、OpsManagerはデータベーススナップショットを作成します。 6時間ごとにデータベースのスナップショットが作成され、oplogデータは24時間保存されます。 OpsManagerを使用していつでもスナップショットスケジュールを構成できます。
利点
- デフォルトでは特定の時点です
- 初期同期を除いて、本番環境のパフォーマンスに影響を与えません
- シャーディングされたクラスターの一貫したスナップショットのサポート
- 重要でないコレクションを除外する柔軟性
デメリット
- データベースの復元中は、スナップショットのサイズに応じてネットワーク遅延が増加します。
MongoDB Cloud Manager
MongoDB Cloud Managerは、クラウドベースのバックアップソリューションであり、フルマネージドサービスとして、ポイントインタイムの復元、継続的かつオンラインのバックアップソリューションを提供します。 Cloud Managerエージェントをインストールするだけで、データベースのバックアップと復元を管理できます。バックアップデータはMongoDBクラウドに保存されます。
利点
- 使い方はとても簡単です。優れたGUI。
- クエリとoplogの継続的なバックアップ。
デメリット
- バックアップデータを制御できません。 MongoDBクラウドに保存されます。
- コストは、データのサイズとoplogの変更量によって異なります。
- 復元プロセスが遅い。
スナップショットデータベースファイル
これは、データベースをバックアップするための最も簡単なソリューションです。基になるすべてのファイル(データ/ディレクトリのコンテンツ)をコピーして、安全な場所に配置できます。すべてのファイルをコピーする前に、データベースへの進行中のすべての書き込み操作を停止して、データの一貫性を確保する必要があります。 db.fsyncLock()コマンドを使用して、すべての書き込み操作を停止できます。
スナップショットには2つのタイプがあります。1つはクラウドレベルのスナップショットで、もう1つはOSレベルのスナップショットです。
AWSなどのクラウドサービスプロバイダーでデータベースデータを保存している場合は、バックアップのためにAWSEBSスナップショットを作成する必要があります。対照的に、LinuxなどのネイティブOSにDBファイルを保存している場合は、LVMスナップショットを作成する必要があります。 LVMスナップショットは他のマシンに移植できません。したがって、クラウドベースのスナップショットはOSベースのスナップショットよりも優れています。
利点
- 使いやすい。
- スナップショットを完全に制御します。任意のデータセンターに移動できます。
- これらのスナップショットは、以前のスナップショットとの違いのみを格納する差分スナップショットです。
- データベースを復元するためにスナップショットをダウンロードする必要はありません。スナップショットから新しいボリュームを作成するだけです。
デメリット
- この方法を使用すると、データベースは分割ポイントでのみ復元できます。
- メンテナンスが非常に複雑になることがあります。
- (シャードシステム内の)すべてのレプリカセット間でバックアップを調整するには、特別なDevOpsチームが必要です。
MongoDBコンシステントバックアップツール
MongoDB一貫性のあるバックアップは、MongoDBクラスターの一貫性のあるバックアップを実行するためのツールです。 1つまたは複数のシャードを持つクラスターをデータベースの単一のポイントにバックアップできます。デフォルトのバックアップ方法としてMongodumpを使用します。次のコマンドを実行して、このツールを使用してバックアップを取ります。
$ mongodb-consistent-backup -H localhost -P 27017 -u USERNAME -p PASSWORD -l /var/backups/mongo
このコマンドによって生成されるすべてのバックアップは、MongoRestoreと互換性があります。 --oplogReplayオプションを指定してmongorestoreコマンドを使用すると、一貫性を確保できます。
$ mongorestore --host localhost --port 27017 -u USERNAME -p PASSWORD --oplogReplay --dir /var/backups/mongo/mydb/dump
利点
- 完全にオープンソース
- シャードクラスターで動作します
- AmazonS3などのリモートバックアップのオプションを提供します
- 自動スケーリングが利用可能
- インストールと実行は非常に簡単です
デメリット
- 完全に成熟していない製品
- リモートアップロードオプションはほとんどありません
- ディスクに保存する前のデータ暗号化をサポートしていません
- 公式コードリポジトリには適切なテストがありません
ClusterControlバックアップ
ClusterControlは、オールインワンの自動データベース管理システムです。データベースクラスターを簡単に監視、展開、管理、拡張できます。 MySQL、MongoDB、PostgreSQL、Percona XtraDB、GaleraClusterをサポートしています。このソフトウェアは、クラスターのデプロイ、クラスターへのノードの追加または削除、継続的なバックアップ、クラスターのスケーリングなど、ほぼすべてのデータベース操作を自動化します。これらすべてのことは、ClusterControlシステムが提供する単一のGUIから実行できます。
>ClusterControlは、MongoDBバックアップ管理用の非常に優れたGUIを提供し、スケジューリングとクリエイティブレポートをサポートします。バックアップ方法には2つのオプションがあります。
- モンゴダンプ
- Mongodbの一貫したバックアップ
したがって、ユーザーはニーズに応じて任意のオプションを選択できます。このツールは、すべてのバックアップに一意のIDを割り当て、次のパスに保存します:ClusterControl>設定>バックアップ>BackupID。バックアップの作成中に指定されたノードが稼働していない場合、ツールはクラスターから稼働中のノードを自動的に検出し、そのノードでバックアッププロセスを実行します。このツールには、上記のバックアップ方法のいずれかを使用してバックアップをスケジュールするためのオプションもあります。ボタンを切り替えるだけで、任意のスケジューリングジョブを有効/無効にできます。 ClusterControlはバックアッププロセスをバックグラウンドで実行するため、キュー内の他のジョブに影響を与えることはありません。
利点
- インストールが簡単で、使い方も非常に簡単です
- バックアップ方法の複数のオプション
- バックアップのスケジュール設定は、シンプルなGUIフォームを使用すると非常に簡単です
- 自動バックアップ検証
- ステータス付きのバックアップレポート
デメリット
- どちらのバックアップ方法も、非常に大規模なデータベースの処理に問題があるmongodumpを内部的に使用します。
結論
優れたバックアップ戦略は、データベース管理システムの重要な部分です。 MongoDBは、バックアップとリカバリ/復元のための多くのオプションを提供します。優れたバックアップ方法に加えて、データベースの複数のレプリカを用意することが非常に重要です。これにより、1秒もダウンタイムすることなくデータベースを復元できます。大規模なデータベースの場合、バックアッププロセスは非常に多くのリソースを消費する可能性があります。したがって、この種の負荷を処理するには、サーバーに適切なCPU、RAM、およびより多くのディスクスペースを装備する必要があります。これらの理由により、バックアッププロセスによってサーバーの負荷が増大する可能性があるため、夜間またはピーク時以外の時間帯にバックアッププロセスを実行する必要があります。