複数台のサーバーに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以下に作成された、<host>.jsonファイルのrun_listに、role[elasticsearch]
を書き入れます。
{
“run_list”: [
“role[elasticsearch]”
]
}
そして、cookします。
$ knife solo cook <host>
終了したら、ssh <host>でログインし、きちんとインストールできているか確認します。
$ 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}
{"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
} ]
}
分かち書きもきちんとできました。
いろいろと細かい設定もしたいところですが、今回はここまで。