Docker で Elasticsearch を試す

以下の記事をみてElasticsearch を試してみました。
http://qiita.com/jun-1/items/11edfe8fae71a3e958ce

■Dockerfile の作成
HEAD プラグインの追加、discover-multicast プラグインを使ってみたかったので
公式のイメージではなく、自分で作ってみました。


Elasticsearch は zen-discovery とかいうやつでクラスタ構成を作れるようです。
ただ、勝手にクラスタ構成を作るといろいろハマることが多いらしく、
皆さんほとんど マルチキャストしないでクラスタを作っているようです。

Dockerを使用して ガンガンクラスタ構成を作っていきたいため
マルチキャストできないのはちょっと・・・。とおもったため
今回は マルチキャストを使用したクラスタを簡単に構成できるようにしてみました。


以下の資料を参考に ネットワークの設定をDockerに合わせて編集します。
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html


ネットワーク設定がうまくいかないと Elasticsearchの起動時にエラーをはいて
node がうまくクラスタリングされずに苦労しました。
以下の設定をelasticsearch.yml に行うとマルチキャストを使用してクラスタ構成を作れるようです。

vi /etc/elasticsearch/elasticsearch.yml

  cluster.name: docker.elasticsearch
  network.bind_host: _site_
  network.publish_host: '_eth0:ipv4_'


なお完全な Dockerfile は GitHub
ビルド済みのイメージは Dockethub においてあります。
ご自由にお使いください。

https://hub.docker.com/r/moremagic/elasticsearch/
https://github.com/moremagic/elasticsearch


■起動方法
マルチキャストでノードを追加していくため同一ネットワーク上にElasticsearchコンテナを起動する必要があります。そのため 「elastic」 という名前のElasticsearch専用のネットワークを作っておきます。

docker network create -d bridge elastic

ノードを起動するときに前段で作成したネットワーク 「elastic」 を指定して起動します。
ノード名はホスト名を使用するようにしました。

node1

docker run -d -p 9201:9200 --net elastic -h node1 --name node1 moremagic/elasticsearch

node2

docker run -d -p 9202:9200 --net elastic -h node2 --name node2 moremagic/elasticsearch

node3

docker run -d -p 9203:9200 --net elastic -h node3 --name node3 moremagic/elasticsearch


起動後しばらくするとノードが追加されます。
コンテナを立てるたびにノードがどんどん追加されていきます。

■データを突っ込んでみます


参考資料のように
以下コマンドでデータを突っ込んでみます
※ なお Dockerが動いているHostの IPは 192.168.1.6

curl -XGET 'http://192.168.1.6:9201/twitter/tweet/1'
{"_index":"twitter","_type":"tweet","_id":"1","_version":1,"found":true,"_source":{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}}

なんだかデータが分散されて格納されたようです。
太い枠のついている数字 の部分に データが入ったってことなのかな?

■ node3 を止めてみます

docker stop node3

しばらくすると 緑色の四角で表された Shared が node1 node2 にまんべんなく作成されました。

■ node3 を再起動します

docker start node3

またデータが分散されたようです。

このUI、見方が良くわからなくて調べてみたらこんな資料がありました
https://medium.com/hello-elasticsearch/elasticsearch-afd52d72711#.bflbyr5ap

なるほど。。。