mongoDBクラスタにrestoreする時の高速化テクニック

developers.cyberagent.co.jp

この記事のように新しいmongoDBクラスタにrestoreでデータを移行する場合のテクニックですが、新クラスタへの移行前にバックアップデータ等でrestoreを行って暖気しておくというものがあります。

mongoDBの大規模なクラスタに巨大なデータをrestoreすると非常に時間がかかります。800GBのdumpデータをrestoreすると丸一日以上かかってしまいます。restoreでinsertされたデータは一旦プライマリシャードに保存され、データが増えると自動的に他のシャードにデータが分散されていくのですが、このチャンク移動の負荷がかなり大きいのです。

そこで事前にバックアップの本番データをdump、新クラスタにrestoreしてチャンク移動の完了を待ち、ドキュメントの保存先のシャードが決定された状態にします。この状態でデータをremove(dropするとシャーディングの情報も消えてしまうのでremove)してrestoreすると、最初から適切なシャードに分散してinsertされ、チャンク移動の負荷がなくなるので、restoreの所要時間は1/3 〜 1/4程度に短縮されます。