LoginSignup
35
26

More than 5 years have passed since last update.

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

Posted at

目的

  • 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の動作確認はこちらの記事を参考にやってみてください

最後に

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

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

35
26
0

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
35
26