はじめに
メモ
v1.0.0 前夜
こちらを読んだり、今までの認識だと 1.0 以前のバックアップとレストアは手順としても面倒な印象で、且つ、バックアップ、レストアを積極的に行っている事例というのをあまり見たことが無い印象だったが、 こちらの資料やドキュメントやリリースノートを見て*1いると「curl
一発!」でいけそうな気がした。
ざっくり概要
- 1.0.0.beta2 で公開された機能(厳密にはバックアップではなくて
SnapShot / Restore
) - バックアップはローカルのファイルシステム以外にも取得することが出来る(例えば、S3 / HDFS / GlusterFS / Google Compute Engine / Microsoft Azure)
- これらのファイルシステム上にリポジトリを作成して
_snapshot
というエンドポイントに対してrepository
名とsnapshot
名を付けてAPI
にアクセスするだけでバックアップ(スナップショット)が取得出来る - レストアも
_restore
というエンドポイントにPOST
するだけ... - マジかよ...
触ってみる
マジかよってことでバックアップ(スナップショット)とレストアを触ってみることにした。
環境
- AWS EC2 t1.micro
- Ubuntu 13.10
- elasticsearch 1.0.0 RC1
まずは elasticsearch-head で確認
もちろん、特に 0.9 系と何も変わらない。
適当にインデックスを作成する。
早速リポジトリをローカルホストに作成してみる
以下のようにリポジトリ用のディレクトリを作成する。尚、スナップショットファイルの権限は elasticsearch
ユーザーとなるので適切にディレクトリの権限を設定する必要がある(下記では chmod 777
としている)
mkdir ~/my_backup chmod 777 ~/my_backup
以下のようにリポジトリを登録する。
curl -XPUT 'http://localhost:9200/_snapshot/my_backup' -d '{ "type": "fs", "settings": { "location": "/home/ubuntu/my_backup", "compress": true } }'
以下のようなレスポンスが返ってくる。
{"acknowledged":true}
ふむふむ。
適当にデータ投入
以下のようなデータを投入してみる。
curl -X POST localhost:9200/test01/hogehuga/1 -d '{"name":"MasaharuFukuyama","email" :"masha@tfm.com","age":45}' curl -X POST localhost:9200/test01/hogehuga/2 -d '{"name":"YoheiKawahara","email" :"hage@tfm.com","age":38}'
確認してみる。
curl -X GET localhost:9200/test01/hogehuga/_search?pretty
以下のように登録されている。
{ "took" : 2, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 1.0, "hits" : [ { "_index" : "test01", "_type" : "hogehuga", "_id" : "1", "_score" : 1.0, "_source" : {"name":"MasaharuFukuyama","email" :"masha@tfm.com","age":45} }, { "_index" : "test01", "_type" : "hogehuga", "_id" : "2", "_score" : 1.0, "_source" : {"name":"YoheiKawahara","email" :"hage@tfm.com","age":38} } ] } }
スナップショットを取る
上記のインデックスのスナップショット(バックアップ)を以下のように取得してみる。
curl -XPUT localhost:9200/_snapshot/my_backup/snapshot_20140204
以下のようなレスポンスが返ってくる。
{"accepted":true}
あら、簡単。尚、リポジトリは以下のようなディレクトリ構成となっていた。
レストアしてみる
とりあえずレストアを試してみたいので、先ほど elasticsearch-head
で削除したインデックスを削除した状態にした後でレストアしてみる。
当然、レコードも消えている。
{ "error" : "IndexMissingException[[test01] missing]", "status" : 404 }
ところが、レストアも curl
でポン。
curl -XPOST localhost:9200/_snapshot/my_backup/snapshot_20140204/_restore
以下のようなレスポンスが返ってくる。
{"accepted":true}
えっと思うくらい簡単にレストア出来た。念のために確認してみると...
{ "took" : 3, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 1.0, "hits" : [ { "_index" : "test01", "_type" : "hogehuga", "_id" : "1", "_score" : 1.0, "_source" : {"name":"MasaharuFukuyama","email" :"masha@tfm.com","age":45} }, { "_index" : "test01", "_type" : "hogehuga", "_id" : "2", "_score" : 1.0, "_source" : {"name":"YoheiKawahara","email" :"hage@tfm.com","age":38} } ] } }
おお。但し、スナップショット名が重複していたりするとデータが正常にレストアされないような不安定な状態が見られた。これは偶々なのか否かは引き続き調査したい。
とりあえず
- 駆け足でスナップショット(バックアップ)とレストア機能を触ってみたけど、どこまで簡単になるんやーという印象
- もちろんデータ量も極限に小さい量だったので、殆ど参考にはならないかもしれないがお手軽感満載だった
- 引き続き、いろいろな機能と少し大きめなデータ量で試してみたい
- スナップショットのファイルシステムとして S3 が利用出来るので後で試してみる
*1:英語が解らないので読むでは無くて見る