Cephの管理・運用について、その瞬間のデータを保持する場合はスナップショットの取得が有効だ。
スナップショットを取得しておくことで、後からそのオブジェクトのデータを再取得することが出来る。
Cephでのスナップショットの取得には、radosコマンドを用いる。
1.スナップショット取得前の状態を確認する
まず、スナップショットを作成する前に、対象とするプールを確認しよう。
プールの一覧は、以下のコマンドで取得出来る。
rados lspools
[root@BS-PUB-CEPHADM ~]# rados lspools
rbd
.rgw.root
.rgw.control
.rgw
.rgw.gc
.log
.users.uid
.users
.rgw.buckets.index
.rgw.buckets
さて、上記プール一覧はCeph + RadosGatewayの構成でデフォルトの状態なのだが、RadosGatewayで主に利用しているのは「.rgw」というプールだ。オブジェクトの中身については「.rgw.buckets」プールに保存されている。
とりあえず、プールの中身を見てみよう。プールの中を一覧で取得する場合は、以下のコマンドを実行する。
rados -p プール名 ls
[root@BS-PUB-CEPHADM ~]# rados -p .rgw ls
my-new-bucket
.bucket.meta.my-new-bucket:default.14132.1
今回はスナップショットのテストなので、RBDで用いられるプール「rbd」に適当なファイルをアップして、スナップショット取得後にそのファイルを更新、前のバージョンのファイルを取得出来ることを確認してみよう。
プールにファイルをアップする場合は、以下のようにコマンドを実行する。
rados -p プール名 put オブジェクト名 ローカルのファイルPATH
[root@BS-PUB-CEPHADM ~]# cat /tmp/test.txt
test snopshot before
[root@BS-PUB-CEPHADM ~]# rados -p rbd ls
[root@BS-PUB-CEPHADM ~]# rados -p rbd put test.txt /tmp/test.txt
[root@BS-PUB-CEPHADM ~]# rados -p rbd ls
test.txt
現時点では、このファイルの中身は「test snopshot before」となっている。
[root@BS-PUB-CEPHADM ~]# rados -p rbd get test.txt ./test.txt
[root@BS-PUB-CEPHADM ~]# cat ./test.txt
test snopshot before
2.スナップショットの取得
さて、それではプールのスナップショットを取得してみよう。
以下のコマンドで、指定したpoolのスナップショットが取得可能となる。
rados -p Pool名 mksnap スナップショット名
[root@BS-PUB-CEPHADM ~]# rados -p rbd mksnap test-snapshot
created pool rbd snap test-snapshot
無事スナップショットが取れたかどうか、以下のコマンドで確認する。
rados -p Pool名 lssnap
[root@BS-PUB-CEPHADM ~]# rados -p rbd lssnap
1 test-snapshot 2016.03.10 00:06:41
1 snaps
確かに、スナップショットが取れている事が確認できる。
スナップショットの中にあるオブジェクト一覧を取得したり、ファイルを取得する場合は、「-s」で対象のスナップショットを選択してやれば良い。
[root@BS-PUB-CEPHADM ~]# rados -p rbd -s test-snapshot ls
selected snap 1 'test-snapshot'
test.txt
3.ファイルの更新・スナップショットから前のファイルを取得
さて、それではファイルを更新してCephにアップしてみよう。
[root@BS-PUB-CEPHADM ~]# cat /tmp/test.txt
test snopshot before
test snopshot after
[root@BS-PUB-CEPHADM ~]# rados -p rbd put test.txt /tmp/test.txt
[root@BS-PUB-CEPHADM ~]# rados -p rbd get test.txt ./test.txt
[root@BS-PUB-CEPHADM ~]# cat ./test.txt
test snopshot before
test snopshot after
確かに、ファイルが更新されてしまった状態になっている。
この状態から、スナップショットからファイルを取得すると…
[root@BS-PUB-CEPHADM ~]# rados -p rbd -s test-snapshot get test.txt ./test.txt
selected snap 1 'test-snapshot'
[root@BS-PUB-CEPHADM ~]# cat ./test.txt
test snopshot before
確かに、前の状態のファイルを取得することができた。