ファイルシステムのスナップショット機能でバックアップを取得する

10
LVM のののののののののののの GITLAB のののののののののののの

Transcript of ファイルシステムのスナップショット機能でバックアップを取得する

Page 1: ファイルシステムのスナップショット機能でバックアップを取得する

LVMのスナップショット機能でGITLABのバックアップを取得する

Page 2: ファイルシステムのスナップショット機能でバックアップを取得する

WHO AM I ?

牧 俊男( Toshio Maki)Twitter:@Kirika_K2GitHub: @kirikak2

• とある SIerで、社内の開発基盤を見てます• Ruby、時々 golang• GitLabは gitorious統合前ぐらいから使ってます

Page 3: ファイルシステムのスナップショット機能でバックアップを取得する

WHAT'S SNAPSHOT?

• GitLab内の Gitリポジトリが多いほど、標準のバックアップスクリプトは遅くなる• Gitlab Backupのドキュメントには「 Alternative backup

strategies」として、 Amazon EBSのスナップショット機能を使う方法や LVMのスナップショット機能を使う方法もある、と紹介されている• 今回 GitLab.comはこの LVMによるスナップショットを使って復旧した、と書かれていたため、掘り下げて紹介したい

Page 4: ファイルシステムのスナップショット機能でバックアップを取得する

LVM(LOGICAL VOLUME MANAGER)

• 複数の物理ディスクをグループにまとめて論理ディスクとして扱う• ソフトウェア RAID( RAID0/1/4/5/6/10)を構成可能• デフォルトが LVMで設定されているディストリビューションもあるので、はじめから LVMで組まれているボリュームを使っている人もいるはず• Snapshot機能があり、一貫性のあるディスク状態を保存することができる

Page 5: ファイルシステムのスナップショット機能でバックアップを取得する

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

牧俊男
Page 6: ファイルシステムのスナップショット機能でバックアップを取得する

LVMを使ったスナップショットの取得• lvcreateで論理ボリューム単位でのスナップショットが取得できる• lvcreate –s –L 100G –n gitlab-snapshot /dev/lvm-vg00/gitlab-data• スナップショットを取るためには、ボリュームグループに未使用の領域が必要• スナップショットを取った地点のファイルシステムの状態で固定される

gitlab-snapshot

Page 7: ファイルシステムのスナップショット機能でバックアップを取得する

スナップショットの復元• lvconvertコマンドで、スナップショットの状態から復元する• umount /mnt/gitlab-data• lvconvert --merge /dev/lvm-vg00/gitlab-snapshot

• コマンド実行後、スナップショットは削除され、 gitlab-dataは gitlab-snapshotの時点に戻る

gitlab-snapshot

Page 8: ファイルシステムのスナップショット機能でバックアップを取得する

データベースのバックアップ• PostgreSQLもスナップショットでバックアップを取得できる• ただし事前に PostgreSQLサービスを停止しておく必要がある• 無停止でバックアップをしたい場合は、スナップショットを取る前に pg_start_backup()を叩いて、WOLと呼ばれるトランザクションログもバックアップする必要がある• pg_basebackupがこの辺りを自動化してくれる

• (今回バックアップ取れてなくて問題になったやつ)• 詳しくは「 PostgreSQL オンラインバックアップ」あたりで調べてください

Page 9: ファイルシステムのスナップショット機能でバックアップを取得する

LVMによるスナップショットのメリットとデメリット• メリット• ちょっとしたメンテナンス作業をするときに手軽なバックアップ手段として使える• GitLabのアップデート作業に失敗した際に切り戻すときには有効

• デメリット• 現行の状態との差分を管理しているため、大量に変更が加わると、スナップショット領域が溢れる可能性がある• Copy on Writeのような方式でスナップショットを取るので、スナップショットの取得は速いが、その後の差分を書き込み続けるため、ディスク的には 2倍書き込んでいることになり、大幅に速度が落ちる• スナップショットの復元のために umountしないといけないため、無停止とはいかない

Page 10: ファイルシステムのスナップショット機能でバックアップを取得する

まとめ• LVMスナップショットは世代別バックアップのような用途で使うのではなく、 GitLabのドキュメントにもあるように、静的な状態を作って、 rsyncでどこかに一貫性のある状態を転送した後、速やかにスナップショットを削除するのが良さそう• マシンリソースに余裕があるのであれば、メモリ 32GBぐらいを積んだ、 FreeNAS( FreeBSD+ZFS)を使って、スナップショットを取るのが良さそう• 詳しくは「 ZFS - スナップショットいつやるか ? 今でしょ ! 」

on Qiita