elasticsearch.yml 파일에 노드 관련 속성을 조합해서 특정 모드로 설정하는 것이 가능.
위 속성들을 조합하여 아래와 같은 노드 모드로 운영가능.
모든 기능을 수행하는 모드. 기본 설정으로 지정돼 있기 때문에 elasticsearch.yml 파일에 아무런 설정을 하지 않는다면 기본적으로 싱글모드로 동작.
node.master: true / node.data: true / node.ingest: true / search.remote.connect: true
클러스터의 제어를 담당하는 모드.
node.master: true / node.data: false / node.ingest: false / search.remote.connect: false
마스터 모드는 기본적으로 인덱스 생성/변경/삭제 등의 역할을 담당한다. 그리고 분산 코디네이터 역할을 담당하여 클러스터를 구성하는 노드의 상태를 주기적으로 점검하여 장애를 대비한다. 즉, 마스터 모드는 클러스터 전체를 관장하는 마스터 역할을 수행한다. 이처럼 중요한 역할을 하는 마스터노드는 클러스터에 다수 존재하는 것이 좋다. 그래야 장애가 발생할 경우에도 후보 마스터 노드가 역할을 위임 받아 안정적으로 클러스터 운영 유지가 된다.
클러스터의 데이터를 보관하고 데이터의 CRUD, 검색, 집계 등 데이터 관련 작업을 담당하는 모드.
node.master: false / node.data: true / node.ingest: false / search.remote.connect: false
노드가 데이터 모드로 동작하면 내부에 색인된 데이터가 저장된다. 이말은 즉, 마스터 노드와는 달리 대용량의 저장소를 필수적으로 갖춰야한다. 또한 CRUD 작업과 검색, 집계와 같은 리소스를 제법 잡아먹는 역할도 수행하기 때문에 디스크만이 아닌 전체적인 스펙을 갖춘 서버로 운영하는 것이 좋다.
다양한 형태의 데이터를 색인할 때 데이터의 전처리를 담당하는 모드.
node.master: false/ node.data: false / node.ingest: true / search.remote.connect: false
엘라스틱서치에서 데이터를 색인하려면 인덱스라는 틀을 생성해야 한다. 비정형 데이터를 다루는 저장소로 볼 수 있지만 일정한 형태의 인덱스를 생성해주어야한다. 그리고 해당 인덱스에는 여러 포맷의 데이터 타입 필드가 존재한다. 만약 데이터를 색인할때 간단한 포맷 변경이나 유효성 검증 같은 전처리가 필요할 때 해당 모드를 이용할 수 있다.
사용자 요청을 받아 처리하는 코디네이터 모드이다.
node.master: false/ node.data: false / node.ingest: false / search.remote.connect: false
엘라스틱서치의 모든 노드는 기본적으로 코디네이션 모드 노드이다. 이 말은 즉, 모든 노드가 사용자의 요청을 받아 처리할 수 있다는 뜻이다. 별도한 코디네이션 노드가 필요한 이유는 사용자가 검색 요청을 보낸다면 검색 요청을 받은 노드는 클러스터에 존재하는 모든 데이터 노드에게 검색을 요청한다. 결과 값을 전송하고 취합하는 과정은 많은 양의 메모리가 필요한데 이 상황에서 코디네이션 노드를 따로 구축하지 않았다면 이렇게 결과를 취합하는 과정에서 마스터 노드로서의 역할이나 데이터 노드로서의 역할을 수행할 수 없게되고 장애가 발생할 수 있다. 이렇게 다른 노드들에게 요청을 분산하고 결과값을 취합하는 코디네이션 노드를 별도로 구축한다면 안정적인 클러스터 운영이 가능해진다.
엄청난 데이터량을 가지고 있는 클러스터에서 데이터 노드 모드와 코디네이션 노드 모드를 분리하면 장애 가능 성이 낮아진다. 검색은 데이터노드가 담당하고 이러한 요청을 보내는 역할과 결과의 병합을 코디네이션 노드가 담당하기 때문.
참고 https://coding-start.tistory.com/182
인덱스 색인 - 다소 비슷한 특성을 가진 문서의 모음
도큐먼트 문서는 색인화할 수 있는 기본 정보 단위. json 형식
샤드&리플리카 샤드 - 엘라스틱서치는 인덱스를 샤드라는 조각으로 분할하는 기능을 가지고 있음 샤드의 복사본 = 레플리카 샤드