LVM シンプロビジョニングボリュームに GlusterFS ブリックを作るとスナップショットが使えるらしいのでやってみました。
LVM シンプロビジョニングボリュームについては以前下記の投稿で書きました。
インストール
glusterfs-server
は下記の記事のように g1-g4 の4台にインストールされているものとします。マウントするために glusterfs-fusr
をインストールしたサーバ cl
も1台設けています。
記事の通り CentOS 7 の環境を Vagrant で複数立ち上げて試しています。使用した GlusterFS のバージョンは 3.7.3 です。
LVM シンプロビジョニングボリューム作成
追加ディスクに LVM 用にパーティションを作成します。
parted -s -a optimal /dev/sdb mklabel msdos -- mkpart primary 1 -1 set 1 lvm on
ボリュームグループを作成します。
pvcreate /dev/sdb1
vgcreate vg0 /dev/sdb1
シンプールを作成します。
lvcreate --thin -L 10G vg0/thin
シンプロビジョニングボリュームを作成します。
lvcreate --thin -V 10G -n data vg0/thin
ファイルシステムを作成します。
mkfs.xfs /dev/vg0/data
マウントします。
mkdir -p /glfs/vols
cat <<EOS>>/etc/fstab
/dev/vg0/data /glfs/vols xfs defaults 0 0
EOS
mount /glfs/vols
GlusterFS を開始してボリューム作成
GlusterFS のサービスを開始します。
systemctl enable glusterd.service
systemctl start glusterd.service
systemctl status glusterd.service
ノード4台からなるストレージプールを作成します。
gluster peer probe g2
gluster peer probe g3
gluster peer probe g4
ボリュームを作成します。
gluster volume create data replica 2 \
g1:/glfs/vols/data \
g2:/glfs/vols/data \
g3:/glfs/vols/data \
g4:/glfs/vols/data
ボリュームを開始します。
gluster volume start data
スナップショットの操作
クライアントからマウントします。
mkdir -p /glfs/data
mount -t glusterfs g1:/data /glfs/data
適当に書き込みます。
mkdir /glfs/data/xxx
echo 1 > /glfs/data/1.txt
適当なノード(例えば g1)でスナップショットを作ります。
デフォではスナップショット名の後ろに作成時のタイムスタンプが追加されます。
とりあえず試すだけなら名前が長いと不便なので no-timestamp
を指定してタイムスタンプが付かないようにします。
gluster snapshot create data-01 data no-timestamp
スナップショットの情報や状態を見ることができます。
gluster snapshot list
gluster snapshot info data-01
gluster snapshot status data-01
クライアントから更にいろいろ書き込みます。
echo 5 > /glfs/data/5.txt
echo 6 > /glfs/data/6.txt
スナップショットをアクティブ化します。
gluster snapshot activate data-01
アクティブ化するとクライアントからスナップショットをマウントできます。
mkdir /glfs/data-01
mount -t glusterfs g1:/snaps/data-01/data /glfs/data-01
中身を確認してみます。通常のボリュームには 5.txt や 6.txt がありますが・・・
ll /glfs/data
total 2
-rw-r--r-- 1 root root 2 Aug 23 14:24 1.txt
-rw-r--r-- 1 root root 2 Aug 23 14:30 5.txt
-rw-r--r-- 1 root root 2 Aug 23 14:30 6.txt
drwxr-xr-x 2 root root 12 Aug 23 14:24 xxx
スナップショットには 5.txt や 6.txt がありません。
ll /glfs/data-01
total 1
-rw-r--r-- 1 root root 2 Aug 23 14:24 1.txt
drwxr-xr-x 2 root root 12 Aug 23 14:24 xxx
スナップショットをアンマウントします。
umount /glfs/data-01
ボリュームを停止します。
gluster volume stop data
スナップショットをリストアします。
gluster snapshot restore data-01
ボリュームを開始します。
gluster volume start data
クライアントから見てみると、スナップショットの時点に復元されていることが判ります。
ll /glfs/data/
total 1
-rw-r--r-- 1 root root 2 Aug 23 14:24 1.txt
drwxr-xr-x 2 root root 12 Aug 23 14:24 xxx
ソフトリミットで古いスナップショットを自動削除
スナップショットンにソフトリミットを設定すると、スナップショットが一定数以上になると自動的に古いものから削除されるようになります。
gluster snapshot config snap-max-soft-limit 80
gluster snapshot config auto-delete enable
gluster snapshot config data snap-max-hard-limit 10
設定を確認します。
gluster snapshot config
Snapshot System Configuration:
snap-max-hard-limit : 256
snap-max-soft-limit : 80%
auto-delete : enable
activate-on-create : disable
Snapshot Volume Configuration:
Volume : data
snap-max-hard-limit : 10
Effective snap-max-hard-limit : 10
Effective snap-max-soft-limit : 8 (80%)
この設定は次のような意味です。
-
snap-max-hard-limit : 256
- システムデフォルトのハードリミットは 256 個
- これを超えてスナップショットを作成することはできない
- ボリュームごとの設定で上書きできる
-
snap-max-soft-limit : 80%
- ソフトリミットはハードリミットの 80%
- これを超えたときの動作は
auto-delete
による - ボリュームごとの設定で上書きできない
-
auto-delete : enable
- ソフトリミットに達したときの動作
- enable なら自動的に古いスナップショットを削除
- disable なら警告のみ
- ボリュームごとの設定で上書きできない
-
snap-max-hard-limit : 10
- data ボリュームのハードリミットは 10 個
スナップショットをたくさん作ってみます。
gluster snapshot create data-snap data
gluster snapshot create data-snap data
gluster snapshot create data-snap data
gluster snapshot create data-snap data
gluster snapshot create data-snap data
gluster snapshot create data-snap data
gluster snapshot create data-snap data
gluster snapshot create data-snap data
8個目までは普通に作成できます。
gluster snapshot list
data-snap_GMT-2015.08.23-05.56.34
data-snap_GMT-2015.08.23-05.56.48
data-snap_GMT-2015.08.23-05.56.55
data-snap_GMT-2015.08.23-05.57.03
data-snap_GMT-2015.08.23-05.57.11
data-snap_GMT-2015.08.23-05.57.17
data-snap_GMT-2015.08.23-05.57.22
data-snap_GMT-2015.08.23-05.57.28
9個目を作ってみます。
gluster snapshot create data-snap data
snapshot create: success: Snap data-snap_GMT-2015.08.23-05.58.27 created successfully
一番古いスナップショットが自動的に削除されます。
gluster snapshot list
data-snap_GMT-2015.08.23-05.56.48
data-snap_GMT-2015.08.23-05.56.55
data-snap_GMT-2015.08.23-05.57.03
data-snap_GMT-2015.08.23-05.57.11
data-snap_GMT-2015.08.23-05.57.17
data-snap_GMT-2015.08.23-05.57.22
data-snap_GMT-2015.08.23-05.57.28
data-snap_GMT-2015.08.23-05.58.27