6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

docker-compose を使って Elasticsearch のクラスタ環境を構築した時のメモ

Posted at

タイトルの通りでございます。

構築の仕方は先人の方々がネットにまとめてくださっているのですが、自身の環境だと全くそのままの進め方だとうまくいかない部分とかがあったので、自分なりに試した結果をまとめます。
構築に使用した YAML 類は下記 GitHub に上げております。

個別の VirtualBox を立てる

何も考えずに docker-compose.yml 書いて実行すると default という VM が立ち上がってしまいます。
別に default を使っていなければ何も問題ないですが、私は別件で default の VM を既に利用済であるため、これが使われるのは若干困る。

なので、今回検証用の VM を作成します。
名前は es-default で(もう少しセンスのある名前でも OK)。

$ docker-machine create --driver virtualbox es-default

作成したら起動。

$ docker-machine start es-default

で、ここが重要。
Docker Machine が起動したら仮想メモリの数を増やしておく。
これをやらないと Elasticsearch が Docker 上で起動できないので。

$ docker-machine ssh es-default "cat /proc/sys/vm/max_map_count"
65530
$ docker-machine ssh es-default "sudo sysctl -w vm.max_map_count=262144"
vm.max_map_count = 262144
$ docker-machine ssh es-default "cat /proc/sys/vm/max_map_count"
262144

Elasticsearch 起動

VM の準備ができたら docker-compose.yml を用意して、実際に Elasticsearch を起動していきます。
最終的に出来上がった YAML は(改善の余地はまだまだあると思いますが)こんな感じです。

version: '2.2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.0
    container_name: elasticsearch
    environment:
      - node.name=es01
      - discovery.zen.ping.unicast.hosts=elasticsearch2
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - ./elasticsearch/data:/usr/share/elasticsearch/data
      - ./elasticsearch/logs:/var/log/elasticsearch
      - ./elasticsearch/config/elasticsearch-cluster.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - esnet
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.0
    container_name: elasticsearch2
    environment:
      - node.name=es02
      - discovery.zen.ping.unicast.hosts=elasticsearch
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - ./elasticsearch/data:/usr/share/elasticsearch/data
      - ./elasticsearch/logs:/var/log/elasticsearch
      - ./elasticsearch/config/elasticsearch-cluster.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    networks:
      - esnet

networks:
  esnet:

上記 YAML を使い、下記コマンドを実行してクラスタ構成にした Elasticsearch を起動していきます。

$ docker-compose up -d
Creating network "elasticsearchclusterandkibanausingdockercompose_esnet" with the default driver
Creating elasticsearch  ... done
Creating elasticsearch2 ... done

もしここで下記エラーが表示された場合 env コマンドで表示される一番下の eval コマンドを叩いておく。

ERROR: Windows named pipe error: 指定されたファイルが見つかりません。 (code: 2)
$ docker-machine env es-default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="C:\Users\user\.docker\machine\machines\es-default"
export DOCKER_MACHINE_NAME="es-default"
export COMPOSE_CONVERT_WINDOWS_PATHS="true"
# Run this command to configure your shell:
# eval $("{Docker Path}docker-machine.exe" env es-default)

私のマシンスペックだと起動に少々時間がかかったため、ログを見ながら起動したかどうかを確認しました。

$ docker-compose logs -f

起動したら ps コマンドでステータスを確認しておきます。
無事に起動したらクラスタ状態を確認します。

# IP アドレスを確認しておく
$ docker-machine ip es-default
192.168.99.100

$ curl http://192.168.99.100:9200/_cluster/health?pretty
{
  "cluster_name" : "docker-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

無事ステータスも green で起動できているようです。

あとはインデックス追加したりドキュメント追加したりといったことを行いますが、クラスタ構成の起動としては達成できたので今日はここまで。

検証が終わったらきちんと立てた Docker やら VM を落とすのを忘れずに。

$ docker-compose down
$ docker-machine stop es-default

参考資料

これらを達成するためにいろいろなまとめを参考にしました。
先人の皆さま、ありがとうございます!

Running a 3 Node Elasticsearch Cluster With Docker Compose on Your Laptop for Testing
ElasticsearchとKibanaをDockerでサクッとインストールする(シングルノード・マルチノード)
Elasticsearch Cluster and Kibana using docker-compose
Elasticsearchのインストール及び設定 その4 Config(yml)の修正及びElasticsearchの起動
Install Elasticsearch with Dockeredit
Docker(compose)初学者が困ったときに役立つコマンド集
Elasticsearch導入前に気を付けておきたいこと!
メモリ制限下でElasticsearch5のDockerコンテナを立ち上げる

6
6
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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?