目的
- Elasticsearch clusterの複数nodeを跨いだshardsの動きを実際に確認したい
- VMを複数起動するのは面倒なのでdockerでさっくり試したい
環境
- MacOS X El Capitan (10.11.5)
- Docker Toolbox 1.11.2
準備
- Docker Toolboxの導入などは、こちらの記事などをご参考ください
- docker machineのIPアドレスは192.168.99.100とします (Macだとデフォルトでこれになるはず)
-
docker
コマンドがすでに使える状態を前提で話を進めていきます
複数nodeでなくて良い、かつ、pluginの追加が必要ない時は
- 公式イメージをそのまま利用すれば良い
- コンテナ起動
$ docker run -d -p 9200:9200 -p 9300:9300 elasticsearch
- Elasticsearchが動いていることの確認
$ curl http://192.168.99.100:9200
{
"name" : "Wong",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.3.4",
"build_hash" : "e455fd0c13dceca8dbbdbb1665d068ae55dabe3f",
"build_timestamp" : "2016-06-30T11:24:31Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"
}
- クエリをちょっと確認したいなどの場合はこれで十分と思われる
- pluginの追加はできない
- 追加でもう一台nodeを立ち上げてもnode同士のリンクはしてくれない (Dockerコンテナをリンクさせればできるらしいがやり方がわからなかった)
複数nodeのclusterを作成するには
Elasticsearchの設定に一行追加するだけでできるようになるので、Docker imageを自分で作成する。
ついでにkuromoji pluginも追加してみる。
Dockerfileファイルの準備
- 公式イメージを流用
- Elasticsearchはzen discoveryを使ってnodeを探しているとのことなので、docker machineのIPを設定してあげることで他のコンテナ(node)が見つかるようになる(らしい)
- kuromoji pluginもインストール
- 他のpluginも欲しい時は色々追加してOK
- ちなみにユーザーがrootのままでElasticsearchを起動すると、「rootで起動するな」とJava RuntimeExceptionが吐かれるので、elasticsearchユーザーに切り替えています
Dockerfile
FROM elasticsearch
ENV DOCKER_MACHINE_IP 192.168.99.100
ENV ELASTICSEARCH_CONFIG_FILE /usr/share/elasticsearch/config/elasticsearch.yml
RUN echo "discovery.zen.ping.unicast.hosts: [¥"$DOCKER_MACHINE_IP¥"]" >> $ELASTICSEARCH_CONFIG_FILE
USER elasticsearch
RUN plugin install analysis-kuromoji
CMD elasticsearch
Docker imageの作成
- docker image名をここでは
trial/es
としていますが、自分のお好みで変更してください - Dockerfileが置いてあるディレクトリにいる想定のコマンドです
$ docker build -t trial/es .
コンテナを起動 & Elasticsearchの動作確認
$ docker run -d -p 9200:9200 -p 9300:9300 trial/es
$ curl http://192.168.99.100:9200
もう一台コンテナを起動 & Elasticsearchの動作確認
- ポートが被らないように変更していることに注意
$ docker run -d -p 9201:9200 -p 9301:9300 trial/es
$ curl http://192.168.99.100:9201
2つのnodeがリンクしていることの確認
-
node.total
が2
となっていれば成功
$ curl http://192.168.99.100:9200/_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1468301909 05:38:29 elasticsearch green 2 2 0 0 0 0 0 0 - 100.0%
pluginの動作確認
- kuromoji pluginの動作確認はこちらの記事を参考にやってみてください
最後に
- ダメなとこやわかりにくいところがあったら、遠慮なくコメントしてください。直します