2017-06-21 9 views
0

大規模なMongoデータベースを迅速かつ効率的に転送する方法はありますか?Mongoデータベースをすばやくミラーリングするには

10GBのMongo 3.4データベースをステージング環境に転送してテストしたいと考えています。私はmongodump/mongorestoreツールを使ってローカルホストへの転送をテストしましたが、それは8時間以上かかってしまい、大量のCPUとメモリを消費しました。これは将来避けたいものです。データベースには索引がないため、索引を除外するmongodumpオプションはパフォーマンスを向上させません。

私のステージング環境はほとんどが読み取り専用ですが、それでも時折書き込む必要があるため、プロダクションの永続読み取りレプリカとしてセットアップすることはできません。

私は[複製セット] [1]について読んだことがありますが、セットアップが非常に複雑で、プライマリから2つ以上のセカンダリを永続的にミラーリングするように設計されています。これを一時的にハッキングする人々についての記事を読んだので、一時的なミラーリングを行うことができますが、これは機能の意図された使用ではないため、信頼できるドキュメントは見つかりません。私が読んだすべてのガイドでは、少なくとも3台のサーバーが必要だと言っています。私は2台(生産とステージング)しか持たず、3台目を作成したくないので直感的ではありません。

答えて

1

(本番の設定に一時的に書き込みオペレーションを停止することができれば - またはあなたがメンテナンス中にこの操作を行う場合)Mongoのドキュメントごとに、バックアップを作成するためのcp/rsyncファイルにできるはずです

https://docs.mongodb.com/manual/core/backups/#back-up-by-copying-underlying-data-files

戻るCPやrsyncの

とアップストレージシステムは、スナップショットをサポートしていない場合、あなたは直接CP、rsyncを、または同様のツールを使用して>ファイルをコピーすることができます。複数のファイルをコピーすることは>アトミックな操作ではないので、>ファイルをコピーする前にmongodへのすべての書き込みを停止する必要があります。それ以外の場合は、ファイルを無効な状態でコピーします。

基礎となるデータをコピーすることによって生成されたバックアップは、レプリカセットのポイントインタイムリカバリをサポートしておらず、大きなシャードのクラスタでは管理が難しいです。さらに、これらのバックアップには、索引と重複している基本的なストレージのパディングと断片化が含まれているため、より大きなものになります。対照的に、より小さなバックアップが作成されます。

FYI - レプリカセットの場合、3番目の「サーバー」は新しいプライマリを選択するときにタイを破るために存在するアービタです。プライマリ/セカンダリと同じくらい多くのリソースを消費しません。ステージング環境を作成することを検討しているので、プロダクション staging envを含むレプリカセットの作成はお勧めしません。プライマリインスタンスはステージングインスタンスに切り替わり、本番インスタンスにアクセスするクライアントはステージングインスタンスからの読み取り/書き込みを終了します。

関連する問題