본문 바로가기

back-end/elasticsearch

[Elasticsearch] Docker를 이용한 엘라스틱서치 설치

Docker 가 설치되어있지 않다면 우선 도커 홈페이지를 통해 다운로드를 받고 설치하면 된다.

Elasticsearch 에 대해 간단히 얘기하자면 검색 엔진으로 java 로 개발되어 jvm 위에서 돌아간다. 그래서 도커가 아닌 로컬에 설치하는 경우 jre 또는 필요에 의해 jdk를 먼저 설치해줘야한다.

도커말고도 MacOS를 사용하는 사용자라면 Homebrew를 통해서도 쉽게 설치가 가능하다. 여기선 손쉽게 설치, 삭제가 가능한 Docekr를 이용해서 Elasitcsearch를 설치하는 방법만 다룰 예정이다.

1. 이미지 다운로드

`docker pull` 명령어로 쉽게 도커 레지스트리에서 엘라스틱서치 이미지를 다운로드 가능하다.

나중에 Spring Data Elasticsearch 4.3 를 통해 실습도 해볼 예정이므로 호환 가능한 버전(7.15.2) 으로 다운받는다. (What's new 호환 버전 확인)

`docker images` 명령어로 다운로드된 이미지 목록을 확인 가능하다.

 

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.2

2. Docker 로 single-node cluster 실행

여기서 노드, 클러스터의 개념에 대해 간단히 설명하면 클러스터는 물리적인 노드 인스턴스들의 모임이다. 클러스터는 모든 노드의 검색, 색인 작업을 관장한다. 엘라스틱서치가 대용량 데이터 처리가 가능한 것도 다향한 형태의 노드들이 조합된 클러스터를 구성하여 분산처리가 가능하기 때문이다. 기본적으로 마스터 노드가 전체적인 클러스터를 관리하고 데이터 노드가 실제 데이터를 관리한다.

개발 또는 테스트 환경에서는 싱글 노드 클러스터로도 충분하므로 아래 명령어로 쉽게 실행 가능하다.

 

docker run -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.15.2

3. Docker Compose 로 multi-node cluster 실행

멀티 노드를 띄우기 위해 docker-compose.yml 파일을 생성한다. 아래 예제는 es01, es02 두 개의 노드를 가지는 클러스터를 구성한다.

예제에 "ES_JAVA_OPS" 값은 힙 크기를 512MB 으로 설정했지만 실제 운영 환경에서는 해당 옵션을 사용하지 않는걸 추천한다.

volumes 설정해준 data01, data02 는 도커가 재시작 되었을때 데이터가 유지되도록 로컬 디렉토리(/usr/share/elasticsearch/data)에 저장한다. 설정한 디렉토리가 존재하지 않는 경우 docker-compose 실행시 생성된다.

3.1 docker-compose.yml 파일 생성

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.15.2
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02
      - cluster.initial_master_nodes=es01,es02
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.15.2
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01
      - cluster.initial_master_nodes=es01,es02
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local

networks:
  elastic:
    driver: bridge

3.2 docker compose 실행

docker-compose.yml 파일 위치에서 아래 명령어를 실행한다. 이후 `docker ps` 명령어로 프로세스를 확인 할 수 있다.

docker-compose up -d

3.3. Cluster 실행 종료

아래 명령어로 클러스터 실행을 종료한다. 도커 볼륨의 데이터는 종료해도 그대로 보존되며 재시작시 기존 데이터를 그대로 사용 가능하다. 다만 볼륨의 데이터도 함께 지우고 싶다면 클러스터 종료시 -v 옵션을 사용하면 된다.

docker-compose down <-v>