Cephの管理・運用について、その瞬間のデータを保持する場合はスナップショットの取得が有効だ。
スナップショットを取得しておくことで、後からそのオブジェクトのデータを再取得することが出来る。
Cephでのスナップショットの取得には、radosコマンドを用いる。
1.スナップショット取得前の状態を確認する
まず、スナップショットを作成する前に、対象とするプールを確認しよう。
プールの一覧は、以下のコマンドで取得出来る。
bashrados 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」プールに保存されている。
とりあえず、プールの中身を見てみよう。プールの中を一覧で取得する場合は、以下のコマンドを実行する。
bashrados -p プール名 ls
shell[root@BS-PUB-CEPHADM ~]# rados -p .rgw ls my-new-bucket .bucket.meta.my-new-bucket:default.14132.1
今回はスナップショットのテストなので、RBDで用いられるプール「rbd」に適当なファイルをアップして、スナップショット取得後にそのファイルを更新、前のバージョンのファイルを取得出来ることを確認してみよう。
プールにファイルをアップする場合は、以下のようにコマンドを実行する。
bashrados -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のスナップショットが取得可能となる。
bashrados -p Pool名 mksnap スナップショット名
shell[root@BS-PUB-CEPHADM ~]# rados -p rbd mksnap test-snapshot created pool rbd snap test-snapshot
無事スナップショットが取れたかどうか、以下のコマンドで確認する。
bashrados -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
確かに、前の状態のファイルを取得することができた。