<aside> ⚠️ x-pack security 활성화 오류 https://logical-code.tistory.com/215

</aside>

<aside> 💁🏻 https://kanoos-stu.tistory.com/34

https://kudl.tistory.com/entry/Docker-Compose-이용한-ElasticSearch-Cluster-Kibana-구성

https://jjeong.tistory.com/1508

</aside>

1. docker-compose Install

Windows / Mac 은 Docker Tool Box or Docker for Windows, Docker for Mac을 설치하면 도커 엔진과 함께 자동 설치된다.

설치완료 후 버전 확인

$ docker-compose -v ($ docker-compose --version)
docker-compose version 1.29.1, build c34c88b2

1.x 의 경우 Tool Box - Settings - General - Use Docker Compose V2 체크!

2. docker-compose.yml 작성

version: '3.8'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3 # 버전은 사용자 지정
    container_name: es01 # 컨테이너 이름 설정
    environment:
      - node.name=es01 # 노드 이름 설정
      - cluster.name=es-docker-cluster # 클러스터 이름 설정
			# 클러스터 구성을 위해 바인딩할 노드의 ip 또는 도메인 주소를 배열 형태로 지정
			# 주소만 적는 경우 9300 ~ 9305 사이의 포트값만 검색하며 이 밖의 범위에 있는 경우 포트를 적어야한다.
      - discovery.seed_hosts=host.docker.internal:9301,host.docker.internal:9302
			# 클러스터가 최초 실행될 때. 여기에 명시된 노드들 중 마스터 노드 선출 
      - cluster.initial_master_nodes=es01,es02,es03
			# Elasticsearch 가 사용중인 힙 메모리 영역을 다른 자바 프로그램이 간섭 못하도록 미리 점유하는 설정
			# 항상 true 로 설정하는 것을 권장
      - bootstrap.memory_lock=true
			# X-Pack Security 사용 유무 설정
      - xpack.security.enabled=false
			# JVM 힙 크기를 512MB 로 설정, 공식 문서에선 프로덕션 환경에서는 사용하지 않을 것을 ㄷ권장
			# 설정하지 않을 시 힙 크기를 자동조정
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
		# 성능 및 노드 안정성을 위해 스와핑 비활성화
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - esnet
      
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=host.docker.internal:9300,host.docker.internal:9302
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    ports:
      - 9301:9300
    networks:
      - esnet

  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=host.docker.internal:9300,host.docker.internal:9301
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    ports:
      - 9302:9300
    networks:
      - esnet

  kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:8.4.3
    environment:
      SERVER_NAME: kibana
      ELASTICSEARCH_URL: <http://es01:9200>
      ELASTICSEARCH_HOSTS: <http://es01:9200>
    ports:
      - 5601:5601
    depends_on:
      - es01
      - es02
      - es03
    networks:
      - esnet

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local
  kibana:
    driver: local
networks:
  esnet:

3. docker-compose 실행

docker-compose.yml 을 작성한 경로로 이동

실행

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