MongoDBのバックアップ戦略:コスパと速さを両立するには
MongoDBのバックアップは悩みどころです。mongodump
のような論理バックアップは小規模では便利ですが、データ量が増えると処理時間が膨大になり、本番DBに大きな負荷をかけてしまいます。差分バックアップができないため、毎回フルで吐き出す必要があるのも難点です。そこで今回は LVMスナップショットとクラウドストレージ(Wasabi)を組み合わせる ことで、コスパと速さを両立する戦略を紹介します。
なぜLVMスナップショットなのか?
-
スナップショットは即時作成:バックアップのトリガーを引いた瞬間に、その時点のディスク状態を確保できます。MongoDBを止める必要もありません。
-
MongoDBへの負荷が軽い:
mongodump
のようにDB全体を読み出すわけではなく、I/Oのコピーオンライト処理のみ。参照中心のDBであればほぼ影響は感じません。 -
リカバリが高速:スナップショットをマウントすればすぐにその時点のDBを利用可能。大規模DBでも短時間で復旧できます。
LVMスナップショットの仕組みと注意点
-
LVMスナップショットは Copy-on-Write (COW) 方式です。スナップショット作成自体は数秒で完了しますが、その後の挙動に特徴があります。
-
スナップショット作成後に書き込みが発生すると、元データをスナップショット領域にコピーしてから新しいデータを書き込むため、二重のI/Oが発生します。つまり、スナップショットを保持している間は書き込み負荷が増えることになります。
-
特にログデータのように書き込みが多い環境では、このオーバーヘッドが顕著になります。そのため、スナップショットは「作成 → すぐに外部にコピー → 速やかに削除」という運用がベストです。
スナップショットの保存先にWasabiを選ぶ理由
ローカルディスクにスナップショットを保持していても、物理障害が起これば一緒に失われるリスクがあります。そこで、スナップショットをイメージファイルとして外部ストレージに退避するのが重要です。候補としてはAWS S3やGoogle Cloud Storageなどがありますが、コスト面で注目すべきは Wasabi です。
-
S3互換APIで既存のツールがそのまま利用可能
-
保存容量に応じた定額料金で「取り出しコストなし」
-
国内からの利用でも速度は十分実用的
つまり「安い・速い・シンプル」の三拍子が揃っているのがWasabiの魅力です。
実運用イメージ
-
MongoDBデータ用のLVMボリュームを作成
lvcreate -L 100G -n mongodata vg0 mkfs.xfs /dev/vg0/mongodata mount /dev/vg0/mongodata /var/lib/mongodb
-
スナップショットを作成(一瞬で完了)
lvcreate -s -n mongodata_snap -L 10G /dev/vg0/mongodata
-
スナップショットをファイル化して保存
dd if=/dev/vg0/mongodata_snap of=/backup/mongodata_snap.img bs=1M
-
Wasabiへアップロード(AWS CLI互換で可能)
aws --endpoint-url=https://s3.wasabisys.com s3 cp /backup/mongodata_snap.img s3://my-mongo-backup/
-
スナップショットを削除してI/O負荷を解消
lvremove /dev/vg0/mongodata_snap
リカバリ手順
-
Wasabi から取得
aws --endpoint-url=https://s3.wasabisys.com s3 cp s3://my-mongo-backup/mongodata_snap.img /restore/mongodata_snap.img
-
復元先ボリュームを作成
lvcreate -L 100G -n mongodata_restore vg0
-
イメージを書き戻し
dd if=/restore/mongodata_snap.img of=/dev/vg0/mongodata_restore bs=1M
-
マウントして確認
mount /dev/vg0/mongodata_restore /mnt/mongodata_restore ls /mnt/mongodata_restore
→
/var/lib/mongodb
と同じデータが確認できます。 -
必要に応じてMongoDBを起動
-
フルリストア:
/var/lib/mongodb
を空にしてコピーし戻す -
部分的にデータを取り出す:
/mnt/mongodata_restore
から必要なファイルだけ取得
-
コストと速さのバランス
-
LVMスナップショットは作成が一瞬で、DBへの負荷も小さい。
-
ただし保持中は 書き込みが二重化されるため、早めの退避と削除が重要。
-
Wasabiは月額数ドルから利用可能で、長期保管に最適。
-
物理サーバ1台+安価な外部ストレージというシンプルな構成で、企業用途でも十分実用的。
まとめ
MongoDBのバックアップを「コスパ」と「速さ」の両面で最適化するなら、
-
LVMスナップショットで即時バックアップ
-
イメージファイルをWasabiに保存して冗長化
-
保持時間は短くし、速やかに削除して負荷を軽減
という構成がベストバランスです。クラウド事業者が提供するスナップショット機能に頼らず、自前の物理サーバやオンプレ環境でも実現可能なのもポイントです。特に中小規模システムでは、コストを抑えつつ堅牢なバックアップ戦略を構築できます。
登録日:
更新日: