Chef Soloでelasticsearchの環境を作る
gemのバージョンはこんなかんじ。
berkshelf (2.0.10)
chef (11.8.2)
knife-solo (0.4.1)
複数台のサーバーにelasticsearchの環境を作ろうと思い、Chef Soloを使ってやってみた際のメモです。chefはあまり慣れてないので変なこと書いてるかもです。
リポジトリの作成
まずは、リポジトリを作成します。今回はchef-repoという名前のリポジトリにします。
$ knife solo init chef-repo $ tree chef-repo chef-repo ├── Berksfile ├── cookbooks ├── data_bags ├── environments ├── nodes ├── roles └── site-cookbooks
Cookbookを作成
今回はBerkshelfを使って、サードパーティのcookbookを使いたいので、Berksfileにelasticsearchの記述を追記し、cookbooksディレクトリの下にインストールします。cookbookをダウンロードするためには、Opscode Communityにユーザー登録したり、いろいろ設定したり必要ですが、それに関してはChef Soloの正しい始め方などを参考にされるとよいかと思います。
site :opscode cookbook ‘elasticsearch’
$ berks install -p cookbooks
roleを定義する
rolesディレクトリの下にelasticsearch.jsonファイルを作り、以下のように設定します。デフォルトでは、javaのバージョンが1.6.0_28、elasticsearchのバージョンが0.90.5でインストールされますが、より新しいバージョンのものを使いたいため、override_attributes
でattributesを上書きし、javaは1.7系、elasticsearchは0.90.7をインストールするように書いています。また、elasticsearchで使用するkuromojiなどのpluginのインストールも同時に行うように、elasticsearch::plugins
というかたちで書きます。pluginインストールの設定については後述。
{ “name”: “elasticsearch”, “default_attributes”: {}, “override_attributes”: { “java”: { “install_flavor”: “openjdk”, “jdk_version”: “7” }, “elasticsearch”: { “version”: “0.90.7” } }, “json_class”: “Chef::Role”, “description”: “”, “chef_type”: “role”, “run_list”: [ “recipe[java]”, “recipe[elasticsearch]”, “recipe[elasticsearch::plugins]” ] }
plugin
インストールしたいelasticsearchのpluginに関しては、data_bagで設定してあげる必要があります。data_bags以下にelasticsearchディレクトリを掘り、その下にplugins.jsonファイルを作ります。elasticsearchのバージョンが0.90.7をインストールするので、kuromojiは、1.6.0を使います。また、私はいつもHQ pluginを使っているので、そちらも同時にインストールします。
{ “id”: “plugins”, “_default”: { “plugins”: { “elasticsearch/elasticsearch-analysis-kuromoji”: { “version”: “1.6.0” }, “royrusso/elasticsearch-HQ”: {} } } }
cook
ここまでできたら、実際にcookしていきます。
$ knife solo prepare <host>
を実行し、nodes以下に作成された、\role[elasticsearch]
を書き入れます。
{ “run_list”: [ “role[elasticsearch]” ] }
そして、cookします。
$ knife solo cook <host>
終了したら、ssh \
$ java -version java version "1.7.0_45" OpenJDK Runtime Environment (rhel-2.4.3.4.el6_5-x86_64 u45-b15) OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
$ curl -XPUT ‘localhost:9200/test/‘ -d ‘ { “index”:{ “analysis”: { “tokenizer”: { “kuromoji”: { “type”:”kuromoji_tokenizer”, “mode”:”search” } }, “analyzer” : { “kuromoji_analyzer” : { “type” : “custom”, “tokenizer” : “kuromoji_tokenizer” } } } } }' {"ok":true,"acknowledged":true}
こんなかんじになれば、きちんとインストールできているかと思います。
$ curl -XGET 'localhost:9200/test/_analyze?analyzer=kuromoji_analyzer&pretty' -d '関西国際空港' { "tokens" : [ { "token" : "関西", "start_offset" : 0, "end_offset" : 2, "type" : "word", "position" : 1 }, { "token" : "関西国際空港", "start_offset" : 0, "end_offset" : 6, "type" : "word", "position" : 1 }, { "token" : "国際", "start_offset" : 2, "end_offset" : 4, "type" : "word", "position" : 2 }, { "token" : "空港", "start_offset" : 4, "end_offset" : 6, "type" : "word", "position" : 3 } ] }
分かち書きもきちんとできました。 いろいろと細かい設定もしたいところですが、今回はここまで。