LoginSignup
24
24

More than 5 years have passed since last update.

Chef Soloでelasticsearchの環境を作る

Last updated at Posted at 2013-12-24

複数台のサーバーに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
  } ]
}

分かち書きもきちんとできました。
いろいろと細かい設定もしたいところですが、今回はここまで。

参考

cookbook-elasticsearch
Chef Soloの正しい始め方
Berkshelfを試してみる

24
24
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
24