Develop/infra

Docker Compose 이용한 ElasticSearch Cluster, Kibana 구성

kudl 2020. 12. 15. 20:58

2020-12-15 현재 공식 ElasticSearch, Kibana Docker 이미지 최신 버전은 7.10.1 이다.

ElasticSearch 7.10.1 Docker Compose 가이드에 따라 클러스터 구성을 하고 Kibana 설정을 한다.

docker 컴포즈를 실행하기 전에 docker engine 메모리가 4GB 이상이 설정되어 있는지 확인해야한다.

4GB 이하로 설정이 되어있다면 정상적인 실행이 되지 않는다.

최종 구성은 아래와 같다.

  • ElasticSearch Master 노드 1
  • ElasticSearch Data 노드 2
  • Kibana 1
version: '2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
    container_name: es01
    environment:
      # Master 노드 es01은 localhost:9200 포트를 listens 하고있다.
      - node.name=es01
      # es cluster name
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      # elasticsearch memory swap config
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    ports:
      - 9301:9300
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    ports:
      - 9302:9300
    networks:
      - elastic
  kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:7.10.1
    environment:
      SERVER_NAME: kibana
      # Elasticsearch 기본 호스트는 http://elasticsearch:9200 이다. 현재 docker-compose 파일에 Elasticsearch 서비스 명은 es01로 설정되어있다.
      ELASTICSEARCH_HOSTS: http://es01:9200
    ports:
      - 5601:5601
    # Elasticsearch Start Dependency
    depends_on:
      - es01
      - es02
      - es03
    networks:
      - elastic

# 각 Elasticsearch 노드 및 kibana 볼륨설정 적절한 경로로 변경해서 사용해도 된다.
volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local
  kibana:
    driver: local

networks:
  elastic:
    driver: bridge

 

docker compose 실행

docker-compose up -d

실행 확인

docker ps -a 명령어를 통해 ElasticSearch Master 1, Data 노드 2, Kibana 컨테이너가 실행된것을 확인한다.

Kibana DevTools 확인

브라우저에 http://localhost:5601 접속한다.

DevTools에서 데이터 조회/입력/삭제가 정상적으로 되는지 확인한다.

GET _cat/indices?pretty=true

PUT /hello/_doc/1
{
  "title": "docker-compose",
  "contents": "kibana"
}

GET /hello/_doc/1?pretty=true

DELETE /hello/_doc/1

 

Docker 종료

docker-compose down 명령어를 사용하여 docker-compose 를 종료한다.

docker-compose down -v 옵션을 사용하면 볼륨도 삭제할수 있다.