Help us understand the problem. What is going on with this article?

Dockerでお手軽に複数nodeのElasticsearch clusterを作成 & 好きなplugin追加

More than 3 years have passed since last update.

目的

  • Elasticsearch clusterの複数nodeを跨いだshardsの動きを実際に確認したい
  • VMを複数起動するのは面倒なのでdockerでさっくり試したい

環境

準備

  • 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.total2となっていれば成功
$ 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の動作確認はこちらの記事を参考にやってみてください

最後に

  • ダメなとこやわかりにくいところがあったら、遠慮なくコメントしてください。直します

参考にさせていただいた記事のリンク

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away