[ElasticSearch] 노드의 종류

ehwnghks·2022년 8월 28일
0

elasticsearch

목록 보기
3/9

elasticsearch.yml 파일에 노드 관련 속성을 조합해서 특정 모드로 설정하는 것이 가능.

  • node.master : 마스터 기능 활성화 여부
  • node.data : 데이터 기능 활성화 여부
  • node.ingest : ingest 기능 활성화 여부
  • search.remote.connect : 외부 클러스터 접속 가능 여부

위 속성들을 조합하여 아래와 같은 노드 모드로 운영가능.

  • Single Node mode
  • Master Node mode
  • Ingest Node mode
  • Coordination Node mode

Single Node mode

모든 기능을 수행하는 모드. 기본 설정으로 지정돼 있기 때문에 elasticsearch.yml 파일에 아무런 설정을 하지 않는다면 기본적으로 싱글모드로 동작.

node.master: true / node.data: true / node.ingest: true / search.remote.connect: true

Master Node mode

클러스터의 제어를 담당하는 모드.

node.master: true / node.data: false / node.ingest: false / search.remote.connect: false

마스터 모드는 기본적으로 인덱스 생성/변경/삭제 등의 역할을 담당한다. 그리고 분산 코디네이터 역할을 담당하여 클러스터를 구성하는 노드의 상태를 주기적으로 점검하여 장애를 대비한다. 즉, 마스터 모드는 클러스터 전체를 관장하는 마스터 역할을 수행한다. 이처럼 중요한 역할을 하는 마스터노드는 클러스터에 다수 존재하는 것이 좋다. 그래야 장애가 발생할 경우에도 후보 마스터 노드가 역할을 위임 받아 안정적으로 클러스터 운영 유지가 된다.

Data Node mode

클러스터의 데이터를 보관하고 데이터의 CRUD, 검색, 집계 등 데이터 관련 작업을 담당하는 모드.

node.master: false / node.data: true / node.ingest: false / search.remote.connect: false

노드가 데이터 모드로 동작하면 내부에 색인된 데이터가 저장된다. 이말은 즉, 마스터 노드와는 달리 대용량의 저장소를 필수적으로 갖춰야한다. 또한 CRUD 작업과 검색, 집계와 같은 리소스를 제법 잡아먹는 역할도 수행하기 때문에 디스크만이 아닌 전체적인 스펙을 갖춘 서버로 운영하는 것이 좋다.

Ingest Node mode

다양한 형태의 데이터를 색인할 때 데이터의 전처리를 담당하는 모드.

node.master: false/ node.data: false / node.ingest: true / search.remote.connect: false

엘라스틱서치에서 데이터를 색인하려면 인덱스라는 틀을 생성해야 한다. 비정형 데이터를 다루는 저장소로 볼 수 있지만 일정한 형태의 인덱스를 생성해주어야한다. 그리고 해당 인덱스에는 여러 포맷의 데이터 타입 필드가 존재한다. 만약 데이터를 색인할때 간단한 포맷 변경이나 유효성 검증 같은 전처리가 필요할 때 해당 모드를 이용할 수 있다.

Coordination Node mode

사용자 요청을 받아 처리하는 코디네이터 모드이다.

node.master: false/ node.data: false / node.ingest: false / search.remote.connect: false

엘라스틱서치의 모든 노드는 기본적으로 코디네이션 모드 노드이다. 이 말은 즉, 모든 노드가 사용자의 요청을 받아 처리할 수 있다는 뜻이다. 별도한 코디네이션 노드가 필요한 이유는 사용자가 검색 요청을 보낸다면 검색 요청을 받은 노드는 클러스터에 존재하는 모든 데이터 노드에게 검색을 요청한다. 결과 값을 전송하고 취합하는 과정은 많은 양의 메모리가 필요한데 이 상황에서 코디네이션 노드를 따로 구축하지 않았다면 이렇게 결과를 취합하는 과정에서 마스터 노드로서의 역할이나 데이터 노드로서의 역할을 수행할 수 없게되고 장애가 발생할 수 있다. 이렇게 다른 노드들에게 요청을 분산하고 결과값을 취합하는 코디네이션 노드를 별도로 구축한다면 안정적인 클러스터 운영이 가능해진다.

  • Master Node
    • 클러스터를 관리하는 노드로 인덱스를 생성/삭제하는 등 클러스터와 관련된 전반적인 작업을 담당하는 노드
    • 가장 성능이 좋고 네트워크 속도가 빠르며 지연이 없는 노드를 선정해서 사용
    • 다수의 노드를 설정할 수 있지만 하나의 노드만 선출되어 동작
  • Data Node
    • 실질적인 데이터를 저장하여 검색과 통계같은 데이터 관련 작업 수행
    • 마스터와 분리해서 구성하는 것을 추천(리소스를 많이 소모하므로 모니터링이 필요하다)
  • Coordinating
    • 사용자의 요청을 받아서 클러스터 관련 요청을 마스터 노드에 전달 + 데이터 관련 요청은 데이터 노드에 전달
    • 들어오는 요청을 Round Robin 방식으로 분산
  • Ingest
    • 문서 전처리 작업을 담당하며 인덱스 생성 전 문서의 데이터 포맷을 변경하기 위해 스크립트로 전처리 파이프라인 구성하고 실행 가능

대용량 클러스터 환경에서 코디네이션 노드 구축이 필요한 이유

엄청난 데이터량을 가지고 있는 클러스터에서 데이터 노드 모드와 코디네이션 노드 모드를 분리하면 장애 가능 성이 낮아진다. 검색은 데이터노드가 담당하고 이러한 요청을 보내는 역할과 결과의 병합을 코디네이션 노드가 담당하기 때문.

참고 https://coding-start.tistory.com/182

인덱스 색인 - 다소 비슷한 특성을 가진 문서의 모음

도큐먼트 문서는 색인화할 수 있는 기본 정보 단위. json 형식

샤드&리플리카 샤드 - 엘라스틱서치는 인덱스를 샤드라는 조각으로 분할하는 기능을 가지고 있음 샤드의 복사본 = 레플리카 샤드

profile
반갑습니다.

0개의 댓글