도커로 엘라스틱서치 클러스터 구성하려면 docker-compose로 하는 것이 좋습니다.
먼저 엘라스틱서치 도커 이미지가 있는지 확인합니다.
이미지가 확인되면 docker-compose.yml 파일을 작성합니다.
위의 docker-compose.yml에 대해 주요 내용을 설명드리면
1라인: docker-compose 버전을 3 버전으로 했습니다.
4~80라인: 엘라스틱서치를 master-node, data-node, ingest-node로 컨테이너를 각각 구성하고 있습니다.
82~90라인: kibana는 master-node와 연결하여 데이터를 조회할 수 있게 되어있습니다.
4~23라인: master 노드 역할을 하는 elasticsearch-master 컨테이너를 정의하고
25~61라인: data 노드 역할을 하는 elasticsearch-data1과 elasticsearch-data2 컨테이너를 정의하고
63~80라인: ingest 노드 역할을 하는 elasticsearch-ingest1 컨테이너를 정의합니다.
엘라스틱서치 각 컨테이너들은 공통적으로 7.8.0 버전의 이미지와 environment, ulimits, volumes, networks 속성이 적용됩니다.
----------------------------------------------------------------------------------------------------------------------------------------------------------
environment 속성 컨테이너에 적용되는 환경변수입니다.
node.name: 각 컨테이너의 노드 이름
cluster.name: 클러스터 이름
discovery.seed_hosts: 클러스터 내의 자기 자신을 제외한 다른 노드 목록
cluster.initial_master_nodes: 클러스터에서 초기에 지정되는 마스터 노드
bootstrap.memory_lock: 메모리 잠금 설정(true-잠금 활성화, false-잠금 비활성화)
"ES_JAVA_OPTS=-Xms512m -Xmx512m": 컨테이너가 사용할 수 있는 메모리 사이즈(Xms-초기 메모리 사이즈. Xmx-최대 메모리 사이즈, 512m=512MB)
----------------------------------------------------------------------------------------------------------------------------------------------------------
ulimits 속성의 memlock은 컨테이너가 사용 가능한 메모리 잠금 제한 설정입니다.
soft: 컨테이너가 설정한 메모리 잠금 제한 설정(-1, 메모리 제한 해제)
hard: 시스템이 설정한 메모리 잠금제한 설정(-1, 메모리 제한 해제)
여기서 -1로 설정했지만 위의 "ES_JAVA_OPTS" 속성에서 최대 512MB로 잡았기 때문에 그 이상으로 메모리를 사용하지 않습니다.
----------------------------------------------------------------------------------------------------------------------------------------------------------
volumes 속성은 컨테이너와 호스트 PC 사이의 디렉토리를 공유하는 속성입니다.
각 컨테이너의 voumes 속성을 볼륨 이름과 컨테이너 경로을 정의합니다.
ex) volumes: - esdata-master:/usr/share/elasticsearch/data
92~100라인: 볼륨 드라이버를 호스트 PC로 정의하기 위해 local로 설정한 뒤 각 컨테이너 volumes 속성과 연결합니다.
호스트 PC의 esdata-master 디렉토리와 컨테이너의 /usr/share/elasticsearch/data 디렉토리를 공유하고 있습니다.
따로 설정을 안하면 esdata-master 디렉토리는 디폴트 경로 /var/lib/docker/volumes/ 밑으로 잡힙니다.
----------------------------------------------------------------------------------------------------------------------------------------------------------
networks 속성은 docker-compose가 생성하는 컨테이너들이 공통적으로 사용할 네트워크입니다.
102~105라인: elastic이라는 이름과 bridge 드라이버를 사용하는 것으로 정의되었습니다.
docker-compose.yml 작성이 끝나면 docker-compose를 실행합니다.
elastic이라는 네트워크와 컨테이너들이 생성된 것을 확인할 수 있습니다.
엘라스티서치 클러스터 노드를 확인했을 때 master 노드 앞에 "*" 표시가 되어있으면
클러스터 구성이 제대로 된 것을 확인할 수 있습니다.