Upload
maki-toshio
View
182
Download
0
Embed Size (px)
Citation preview
LVMのスナップショット機能でGITLABのバックアップを取得する
WHO AM I ?
牧 俊男( Toshio Maki)Twitter:@Kirika_K2GitHub: @kirikak2
• とある SIerで、社内の開発基盤を見てます• Ruby、時々 golang• GitLabは gitorious統合前ぐらいから使ってます
WHAT'S SNAPSHOT?
• GitLab内の Gitリポジトリが多いほど、標準のバックアップスクリプトは遅くなる• Gitlab Backupのドキュメントには「 Alternative backup
strategies」として、 Amazon EBSのスナップショット機能を使う方法や LVMのスナップショット機能を使う方法もある、と紹介されている• 今回 GitLab.comはこの LVMによるスナップショットを使って復旧した、と書かれていたため、掘り下げて紹介したい
LVM(LOGICAL VOLUME MANAGER)
• 複数の物理ディスクをグループにまとめて論理ディスクとして扱う• ソフトウェア RAID( RAID0/1/4/5/6/10)を構成可能• デフォルトが LVMで設定されているディストリビューションもあるので、はじめから LVMで組まれているボリュームを使っている人もいるはず• Snapshot機能があり、一貫性のあるディスク状態を保存することができる
LVMの構成
/dev/sdb1
物理ディスク 物理ボリューム
/dev/sdc1
/dev/sdd1
/dev/sdb1
/dev/sdc1
/dev/sdd1
pvcreate /dev/sdb1pvcreate /dev/sdc1pvcreate /dev/sdd1
ボリュームグループ
lvm-vg00
vgcreate lvm-vg00 /dev/sdb1vgcreate lvm-vg00 /dev/sdc1vgcreate lvm-vg00 /dev/sdd1
論理ボリューム
gitlab-data
lvcreate –L 100G –n gitlab-data lvm-vg00
LVMを使ったスナップショットの取得• lvcreateで論理ボリューム単位でのスナップショットが取得できる• lvcreate –s –L 100G –n gitlab-snapshot /dev/lvm-vg00/gitlab-data• スナップショットを取るためには、ボリュームグループに未使用の領域が必要• スナップショットを取った地点のファイルシステムの状態で固定される
gitlab-snapshot
スナップショットの復元• lvconvertコマンドで、スナップショットの状態から復元する• umount /mnt/gitlab-data• lvconvert --merge /dev/lvm-vg00/gitlab-snapshot
• コマンド実行後、スナップショットは削除され、 gitlab-dataは gitlab-snapshotの時点に戻る
gitlab-snapshot
データベースのバックアップ• PostgreSQLもスナップショットでバックアップを取得できる• ただし事前に PostgreSQLサービスを停止しておく必要がある• 無停止でバックアップをしたい場合は、スナップショットを取る前に pg_start_backup()を叩いて、WOLと呼ばれるトランザクションログもバックアップする必要がある• pg_basebackupがこの辺りを自動化してくれる
• (今回バックアップ取れてなくて問題になったやつ)• 詳しくは「 PostgreSQL オンラインバックアップ」あたりで調べてください
LVMによるスナップショットのメリットとデメリット• メリット• ちょっとしたメンテナンス作業をするときに手軽なバックアップ手段として使える• GitLabのアップデート作業に失敗した際に切り戻すときには有効
• デメリット• 現行の状態との差分を管理しているため、大量に変更が加わると、スナップショット領域が溢れる可能性がある• Copy on Writeのような方式でスナップショットを取るので、スナップショットの取得は速いが、その後の差分を書き込み続けるため、ディスク的には 2倍書き込んでいることになり、大幅に速度が落ちる• スナップショットの復元のために umountしないといけないため、無停止とはいかない
まとめ• LVMスナップショットは世代別バックアップのような用途で使うのではなく、 GitLabのドキュメントにもあるように、静的な状態を作って、 rsyncでどこかに一貫性のある状態を転送した後、速やかにスナップショットを削除するのが良さそう• マシンリソースに余裕があるのであれば、メモリ 32GBぐらいを積んだ、 FreeNAS( FreeBSD+ZFS)を使って、スナップショットを取るのが良さそう• 詳しくは「 ZFS - スナップショットいつやるか ? 今でしょ ! 」
on Qiita