経由でダンプされたすべてのデータmongodump
は、MongoDBサーバーによってメモリに読み込まれる必要があります。また、mongodump
データとインデックスの定義をバックアップすることにも注意してください。mongorestore
データのロード後にセカンダリインデックスを再作成する必要があるため、他のアプローチと比較して、復元にかかる時間も大幅に長くなる可能性があります。
以下のようにMongoDBのドキュメントで述べた、mongodump
小規模な展開のバックアップと復元のために有用であるが、大規模なシステムのフルバックアップを取得するための理想的ではありません。
MongoDBインスタンスに接続すると、mongodumpはmongodのパフォーマンスに悪影響を与える可能性があります。データがシステムメモリよりも大きい場合、クエリによってワーキングセットがメモリから押し出され、ページ違反が発生します。
スタンドアロンサーバーでは、バックアップ中に展開を利用できるようにしたい場合、バックアップオプションが制限されます。
以下に、推奨されるアプローチを推奨順に並べます。
アプローチ#1:クラウドバックアップサービスを使用する
最も簡単な短期ソリューションとして、MongoDB Cloud Managerのような商用クラウドバックアップサービスの使用を検討します。MongoDB Cloud Managerは、スケジュールされたスナップショットと保持ポリシーによる継続的なバックアップを提供します(詳細については、バックアップの準備を参照してください)。クラウドサービスでは、追加のサーバーやインフラストラクチャを展開する必要もないため、将来的に展開する予定がある場合でも、これは有用な短期的なソリューションです。
一般的なアプローチは次のとおりです。
追加の利点として、Cloud Managerにはモニタリングエージェントも含まれており、デプロイからメトリック履歴をキャプチャして、アラートを構成できます。
アプローチ2:展開をレプリカセットに変換し、非表示のセカンダリからバックアップする
このアプローチでは、追加のインフラストラクチャをプロビジョニングする必要がありますが、バックアップの影響をプライマリサーバーからオフロードします。通常、レプリカセットは高可用性と自動フェイルオーバーのために少なくとも3つのメンバーでプロビジョニングされますが、唯一の目標がバックアップである場合は、理想的ではない2サーバー構成を使用できます。
一般的なアプローチは次のとおりです。
- バックアップに使用される2番目のサーバーをプロビジョニングする
- スタンドアロンサーバーをレプリカセットに変換します。
- 優先度0(プライマリにはならない)と投票数0の隠しセカンダリとしてバックアップサーバーを追加します。
- 非表示のセカンダリでバックアップを作成するには、サポートされているバックアップ方法のいずれかを使用してください。バックアップ方法は、推奨の一般的な順序でリストされています。ファイルシステムのスナップショット(構成でサポートされている場合)またはファイルのコピー(停止を想定している場合
mongod
)の方が望ましいmongodump
です。
- (理想的には)レプリカセット構成の高可用性とフェイルオーバーの利点が必要な場合は、別のデータベアリングセカンダリを追加します。
アプローチ#3:ファイルシステムのスナップショットを使用する(利用可能で適切な場合)
スナップショットをサポートするファイルシステムがある場合(およびすべてのデータとジャーナルファイルが単一のボリューム上にあるため、実行中の一貫したスナップショットを取得できる)を前提として、現在よりも影響の少ないバックアップ戦略はファイルシステムスナップショットmongodump
を使用しますmongod
。ファイルシステムのスナップmongod
ショットの利点は、すべてのデータをによってメモリに読み込む必要がないことですが、スナップショットは依然として影響を与える可能性があります(特に、ビジーなシステムで初期スナップショットを作成する場合)。連続したスナップショットはより効率的で影響が少ないですが、スナップショットはサーバーに対してローカルであるため、完全なバックアップソリューションではありません(現時点ではスタンドアロンのみです)。
注意事項
アプローチ#1と#2はどちらも、レプリケーションを有効にしてバックアップを容易にすることを含みます。すべての書き込み操作はoplog(操作ログ)と呼ばれる特別な制限付きコレクションに記録されるため、レプリケーションにより、プライマリサーバーにローカルI / Oが追加されます。
将来シャーディングが必要になる可能性が高いとおっしゃいましたが、その前に、MongoDBのワークロードを同じサーバーを共有する他のプロセスから分離します。バックアップ戦略をより効率的なものに変更し、mongodump
リソースの競合を取り除き、ベースラインメトリックの履歴をキャプチャして確認することができる場合...シャーディングはまだ必要ない場合があります。