Cephの管理・運用について、その瞬間のデータを保持する場合はスナップショットの取得が有効だ。
スナップショットを取得しておくことで、後からそのオブジェクトのデータを再取得することが出来る。

Cephでのスナップショットの取得には、radosコマンドを用いる。

1.スナップショット取得前の状態を確認する

まず、スナップショットを作成する前に、対象とするプールを確認しよう。
プールの一覧は、以下のコマンドで取得出来る。

bash
rados lspools
shell
[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」プールに保存されている。
とりあえず、プールの中身を見てみよう。プールの中を一覧で取得する場合は、以下のコマンドを実行する。

bash
rados -p プール名 ls
shell
[root@BS-PUB-CEPHADM ~]# rados -p .rgw ls my-new-bucket .bucket.meta.my-new-bucket:default.14132.1

今回はスナップショットのテストなので、RBDで用いられるプール「rbd」に適当なファイルをアップして、スナップショット取得後にそのファイルを更新、前のバージョンのファイルを取得出来ることを確認してみよう。
プールにファイルをアップする場合は、以下のようにコマンドを実行する。

bash
rados -p プール名 put オブジェクト名 ローカルのファイルPATH
shell
[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」となっている。

shell
[root@BS-PUB-CEPHADM ~]# rados -p rbd get test.txt ./test.txt [root@BS-PUB-CEPHADM ~]# cat ./test.txt test snopshot before

2.スナップショットの取得

さて、それではプールのスナップショットを取得してみよう。
以下のコマンドで、指定したpoolのスナップショットが取得可能となる。

bash
rados -p Pool名 mksnap スナップショット名
shell
[root@BS-PUB-CEPHADM ~]# rados -p rbd mksnap test-snapshot created pool rbd snap test-snapshot

無事スナップショットが取れたかどうか、以下のコマンドで確認する。

bash
rados -p Pool名 lssnap
shell
[root@BS-PUB-CEPHADM ~]# rados -p rbd lssnap 1 test-snapshot 2016.03.10 00:06:41 1 snaps

確かに、スナップショットが取れている事が確認できる。
スナップショットの中にあるオブジェクト一覧を取得したり、ファイルを取得する場合は、「-s」で対象のスナップショットを選択してやれば良い。

shell
[root@BS-PUB-CEPHADM ~]# rados -p rbd -s test-snapshot ls selected snap 1 'test-snapshot' test.txt

3.ファイルの更新・スナップショットから前のファイルを取得

さて、それではファイルを更新してCephにアップしてみよう。

shell
[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

確かに、ファイルが更新されてしまった状態になっている。
この状態から、スナップショットからファイルを取得すると…

shell
[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

確かに、前の状態のファイルを取得することができた。