LoginSignup
26
20

More than 5 years have passed since last update.

ElasticsearchとKibanaをDockerでサクッとインストールする(シングルノード・マルチノード)

Posted at

できたもの

https://github.com/romiogaku/docker-es

利用方法

シングルノード

起動

$ docker-compose -f docker-compose.yml up -d

停止

$ docker-compose -f docker-compose.yml down

Elasticssearch: localhost:9200
Kibana: localhost:5601
で起動します。

3ノード

起動

$ docker-compose -f docker-compose-cluster.yml up -d

停止

$ docker-compose -f docker-compose-cluster.yml down

Elasticssearch node1: localhost:9200
Elasticssearch node2: localhost:9201
Elasticssearch node3: localhost:9202
Kibana: localhost:5601
で起動します。

docker-compose.yml

シングルノード用のものです。

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    ports:
      - 9200:9200
    volumes:
      - ./docker/elasticsearch/data:/usr/share/elasticsearch/data
      - ./docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    networks: [elastic]
    environment:
      - discovery.type=single-node
  kibana:
    image: docker.elastic.co/kibana/kibana-oss:6.3.2
    ports:
      - 5601:5601
    networks: [elastic]
networks:
  elastic:

KibanaはX-Packを利用しない前提で oss imageを指定しています。
Elasticsearchのデータ永続化のためにホストの./docker/elasticsearch/dataとゲストの/usr/share/elasticsearch/dataをマウントしています。
configファイルも柔軟に変えられるようelasticsearch.ymlもマウントしています。

elasticsearch.yml

シングルノード用のものです。

cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1

docker-compose-cluster.yml

3ノード構成のものです。

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    container_name: elasticsearch
    environment:
      - node.name=node1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch,elasticsearch2,elasticsearch3"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./docker/elasticsearch/config/elasticsearch-cluster.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9200:9200
    networks: [elastic]
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    container_name: elasticsearch2
    environment:
      - node.name=node2
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch,elasticsearch2,elasticsearch3"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./docker/elasticsearch/config/elasticsearch-cluster.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9201:9200
    networks: [elastic]
  elasticsearch3:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    container_name: elasticsearch3
    environment:
      - node.name=node3
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch,elasticsearch2,elasticsearch3"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./docker/elasticsearch/config/elasticsearch-cluster.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9202:9200
    networks: [elastic]
  kibana:
    image: docker.elastic.co/kibana/kibana-oss:6.3.2
    ports:
      - 5601:5601
    networks: [elastic]
networks:
  elastic:

基本は公式に書いてある2ノード構成のdocker-compose.ymlを参考にしています。
自分の環境だと ES_JAVA_OPTS=-Xms256m -Xmx256m"に下げないと起動失敗しました。

elasticsearch-cluster.yml

3ノード構成のものです。

cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 2

クラスタ構成の最小マスタノード数を2にしています。
これはクラスタ内のmaster-eligibleノード(マスターノードになりうる役割を持つノード。デフォルトで全ノードがmaster-eligible)の数の過半数値を指定する必要があります。
過半数を指定しないとスプリットブレインが起きてしまう可能性があります。

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