ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • docker-compose.yml 활용하여 Elasticsearch Cluster 만들기
    Elasticsearch 2024. 10. 25. 20:42

    동작 테스트를 위해 만들었던 Elasticsearch Cluster docker-compose.yml 파일을 공유하려고 합니다. 

     

    본래는 보안모드로 구성하려 했으나 빠른 테스트를 위해 보안설정을 하지 않았습니다. 

     

    클러스터의 구성은 아래와 같습니다.

    Elasticsearch Cluster
    마스터 노드 : 1개
    데이터 노드 : 4개 (node.attr.tier을 통해 노드 구분)
      - Hot Node : 3개
      - Warm Node : 1개
    KIbana

    ++ Hot, Warm 설정은 node.roles 설정이 아닌 node.attr.tier 설정입니다. 

     

    docker-compose.yml

    version: '3.8'
    services:
      # 마스터노드 설정
      master:
        image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
        container_name: master
        environment:
          - node.name=master
          - cluster.name=${CLUSTER_NAME}
          - discovery.seed_hosts=hot01,hot02,hot03,warm
          - cluster.initial_master_nodes=master
          - bootstrap.memory_lock=true
          - xpack.security.enabled=false
          - node.roles=[master]
        ulimits:
          # 메모리 제한 해제 (Elasticsearch) 
          memlock:
            soft: -1
            hard: -1
        volumes:
          - data_master:/usr/share/elasticsearch/data
        # 메모리 제한 설정 (Docker container) : 전체 메모리 사용량 제한
        mem_limit: ${ES_MEM_LIMIT}
        ports:
          - ${ES_PORT}:9200
    
      hot01:
        depends_on:
          - master
        image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
        container_name: hot01
        environment:
          - node.name=hot01
          - cluster.name=${CLUSTER_NAME}
          - discovery.seed_hosts=master,hot02,hot03,warm
          - cluster.initial_master_nodes=master
          - bootstrap.memory_lock=true
          - xpack.security.enabled=false
          - node.attr.tier=hot
          - node.roles=[data]
    
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - data_hot01:/usr/share/elasticsearch/data
        mem_limit: ${ES_MEM_LIMIT}
        ports:
          - 9201:9200
    
      hot02:
        depends_on:
          - master
          - hot01
    
        image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
        container_name: hot02
        environment:
          - node.name=hot02
          - cluster.name=${CLUSTER_NAME}
          - discovery.seed_hosts=master,hot01,hot03,warm
          - cluster.initial_master_nodes=master
          - bootstrap.memory_lock=true
          - xpack.security.enabled=false
          - node.attr.tier=hot
          - node.roles=[data]      
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - data_hot02:/usr/share/elasticsearch/data
        mem_limit: ${ES_MEM_LIMIT}
        ports:
          - 9202:9200
    
      hot03:
        depends_on:
          - master
          - hot01
          - hot02
          
        image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
        container_name: hot03
        environment:
          - node.name=hot03
          - cluster.name=${CLUSTER_NAME}
          - discovery.seed_hosts=master,hot01,hot02,warm
          - cluster.initial_master_nodes=master
          - bootstrap.memory_lock=true
          - xpack.security.enabled=false
          - node.attr.tier=hot
          - node.roles=[data]      
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - data_hot03:/usr/share/elasticsearch/data
        mem_limit: ${ES_MEM_LIMIT}
        ports:
          - 9203:9200
    
      warm:
        depends_on:
          - master
          - hot01
          - hot02
          - hot03
        
        image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
        container_name: warm
        environment:
          - node.name=warm
          - cluster.name=${CLUSTER_NAME}
          - discovery.seed_hosts=master,hot01,hot02,hot03
          - cluster.initial_master_nodes=master
          - bootstrap.memory_lock=true
          - xpack.security.enabled=false
          - node.attr.tier=warm
          - node.roles=[data]      
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - data_warm:/usr/share/elasticsearch/data
        mem_limit: ${ES_MEM_LIMIT}
        ports:
          - 9204:9200
    
      kibana:
        image: docker.elastic.co/kibana/kibana:${STACK_VERSION}
        container_name: kibana
        ports:
          - ${KIBANA_PORT}:5601
        environment:
          - ELASTICSEARCH_HOSTS=http://master:9200
        mem_limit: ${KB_MEM_LIMIT}
        depends_on:
          - master
          - hot01
          - hot02
          - hot03
          - warm
    
    volumes:
      data_master:
        driver: local
      data_hot01:
        driver: local
      data_hot02:
        driver: local
      data_hot03:
        driver: local
      data_warm:
        driver: local
    
    #네트워크 설정
    networks:
      default:
        name: elastic
        external: true # 기존에 만들어둔 네트워크 사용

     

    .env

    #ELASTIC_PASSWORD=elastic
    
    #KIBANA_PASSWORD=elastic
    
    STACK_VERSION=8.15.3
    
    CLUSTER_NAME=docker-cluster
    
    ES_PORT=9200
    
    KIBANA_PORT=5601
    
    ES_MEM_LIMIT=1000000000
    KB_MEM_LIMIT=1000000000

     

     

    docker-copose.yml과 .env를 같은 파일내에 두고 docker-compose up을 실행시키면 Elasticsearch cluster를 구성할 수 있습니다.

     

    아무도 안들어오지만 혹여라도 보신분들은 테스트 시 잘 사용하셨으면 좋겠네요ㅎ
    다음에 기회가 된다면 보안설정도 추가한 docker-compose 파일도 작성해보도록 하겠습니다..!

    'Elasticsearch' 카테고리의 다른 글

    인덱스 샤드 설정에 대해  (0) 2025.03.22
    Curator를 활용한 Snapshot 테스트  (4) 2025.01.08
    Curator에 대해  (5) 2024.10.09
    Elasticsearch ILM 탐색기  (2) 2024.06.29
    Elasticsearch_security 설정  (6) 2024.05.05
Designed by Tistory.