ElasticSearch導入のための学習とメモ
環境
- vagrant1.7.2
- centos6.5
さて、その1,その2,その3で検索の基礎は理解できたので、実戦投入に向けた学習に切り替えます。あとは走りながらPDCAを回していきます。
運用で最低限利用しないと行けないのは、これまでの知識に加えて、
- バックアップ
- バックアップデータの復元
- ログ
- ユーザー辞書(必須ではないかな)
です。というわけでまずはバックアップから。(ElasticSearchではバックアップのことをスナップショットと読んでいるので、以降「スナップショット」で統一)
Snapshot And Restore
まずはテストデータの登録
curl -XPUT 'http://192.168.33.19:9200/game/nintendo/1' -d ' { "gama_name" : "mario brothers", "main_character_name" : "marip", "price" : 5000 } ' curl -XPUT 'http://192.168.33.19:9200/game/nintendo/2' -d ' { "gama_name" : "zelda", "main_character_name" : "Smith", "price" : 6000 } ' curl -XPUT 'http://192.168.33.19:9200/game/nintendo/3' -d ' { "gama_name" : "donkey kong", "main_character_name" : "donkey", "price" : 7000 } ' // 検索 curl -XGET 'http://192.168.33.19:9200/game/nintendo/_count?pretty' -d ' { "query": { "match_all": {} } } ' // 結果 { "count" : 3, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 } }
データ登録が完了したら、スナップショットを作成します。
repositories
スナップショットの作成の前にrepositoryを作成します。
// snapshot用のフォルダを作成 mkdir -p /var/elastic_search/my_backup // フォルダの権限をelastic_searchにする sudo chown elasticsearch:elasticsearch /var/elastic_search/my_backup/ // repository登録する curl -XPUT 'http://192.168.33.19:9200/_snapshot/my_backup' -d '{ "type": "fs", "settings": { "location": "/var/elastic_search/my_backup", "compress": true } } ' // 結果 {"acknowledged":true}
上手くいったみたいですね。一応コマンドから確認してみましょう。
curl -XGET 'http://192.168.33.19:9200/_snapshot/my_backup?pretty' // 結果 { "my_backup" : { "type" : "fs", "settings" : { "compress" : "true", "location" : "/var/elastic_search/my_backup" } } }
リポジトリが作成できたので、スナップショットを作成します。が、その前に理解しておかないといけないスナップショットの仕様を以下にまとめ。
- スナップショットはclusterの中の、一意な名称によって特定される。
- http://192.168.33.19:9200/_snapshot/my_backup/snapshot_1なら「my_backup」がリポジトリで「snapshot_1」がスナップショット。
- index スナップショットを作成する過程で、Elasticsearchはリポジトリの中に保存されたindexファイルの一覧を分析する。そして、最後のスナップショットから変更、もしくは作成されたファイルだけを保存する。
- スナップショットがリポジトリから削除された時、Elasticsearchはリポジトリがスナップショットを保存している場所の参照だけ削除する。つまり、スナップショット自体はその場に残っている。
スナップショットを作成
// 作成 curl -XPUT "http://192.168.33.19:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true" // 結果 {"snapshot":{"snapshot":"snapshot_1","indices":["game","test","megacorp"],"state":"SUCCESS","start_time":"2015-02-06T06:59:29.624Z","start_time_in_millis":1423205969624,"end_time":"2015-02-06T06:59:30.186Z","end_time_in_millis":1423205970186,"duration_in_millis":562,"failures":[],"shards":{"total":15,"failed":0,"successful":15}}}
全てのindexが保存されていますね。リクエストのjsonでスナップショットを作成したいindexだけを指定することもできます。
さて、スナップショットを作成したので、データを変更してみましょう。index[game]にデータを2件追加します。
// データ登録 curl -XPUT 'http://192.168.33.19:9200/game/nintendo/4' -d ' { "gama_name" : "metoroido", "main_character_name" : "Samusu", "price" : 7000 } ' // データ登録 curl -XPUT 'http://192.168.33.19:9200/game/nintendo/5' -d ' { "gama_name" : "pokemon", "main_character_name" : "Pikachu", "price" : 8000 } ' // 検索 curl -XGET 'http://192.168.33.19:9200/game/nintendo/_count?pretty' -d ' { "query": { "match_all": {} } } ' // 結果 { "count" : 5, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 } }
3件から5件にデータが増えました。
次はバックアップデータの復元をしましょう。(ElasticSearchではバックアップデータの復元のことをリストアと読んでいるので、以降「リストア」で統一)
// リストア curl -XPOST "http://192.168.33.19:9200/_snapshot/my_backup/snapshot_1/_restore" -d '{ "indices": "game", "rename_pattern": "game", "rename_replacement": "game2" }' // 検索 curl -XGET 'http://192.168.33.19:9200/game2/nintendo/_count?pretty' -d ' { "query": { "match_all": {} } } ' // 結果 { "count" : 3, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 } } curl -XGET "http://192.168.33.19:9200/_aliases?pretty"
rename_patternとrename_replacementを指定しないと"error":"SnapshotRestoreException[[my_backup:snapshot_1] cannot restore index [game] because it's openが発生した。なぜ同じ名前だとリストアができないのだろうか。
indexの一覧を確認する
// indexの一覧を確認 curl -XGET "http://192.168.33.19:9200/_aliases?pretty" // 結果 { "game" : { }, "test" : { }, "megacorp" : { }, "game2" : { } }
indexが増えています。indexが存在しているとリストアができないのかもしれない。indexを削除、リストアの順かな。
// game index削除 curl -XDELETE 'http://192.168.33.19:9200/game/' // game2 index削除 curl -XDELETE 'http://192.168.33.19:9200/game2/' // indexの一覧を確認 curl -XGET "http://192.168.33.19:9200/_aliases?pretty" // 結果 { "test" : { }, "megacorp" : { } } // リストア curl -XPOST "http://192.168.33.19:9200/_snapshot/my_backup/snapshot_1/_restore" -d '{ "indices": "game" } ' // 結果 {"accepted":true} // indexの一覧を確認 curl -XGET "http://192.168.33.19:9200/_aliases?pretty" // 結果 { "test" : { }, "megacorp" : { } } // game indexの確認 curl -XGET 'http://192.168.33.19:9200/game/nintendo/_count?pretty' -d ' { "query": { "match_all": {} } } ' // 結果 { "count" : 3, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 } }
ビンゴ!!。リストアでデータを復活させる場合は、indexを削除しないといけないようである。
さて、次はログの学習です。
では、また。
0 件のコメント:
コメントを投稿