티스토리 뷰

Data/ELK

[ELK] Elasticsearch 노드의 종류

zeroco2 2023. 12. 18. 18:53

클러스터 : 물리적인 노드 인스턴스들의 모임이다. 클러스터는 모든 노드의 검색과 색인 작업을 관장하는 논리적인 개념이다.  RDB에서는 모든 요청을 서버 하나에서 처리하지만, ES의 경우 다수의 서버로 분산해서 처리하는 것이 가능해서 대용량 데이터를 처리할 수 있다. 

이렇게 대용량을 분산 처리 하기 위해 다양한 형태의 노드들을 조합해서 클러스터를 구성해야 하는데, 기본적으로 "마스터 노드" 가 전체적인 클러스터를 관리하고, "데이터 노드"가 실제 데이터를 관리한다. ES는 설정 에 따라 4가지 유형의 노드를 제공한다.


마스터 노드(Master Node)

- 클러스터를 상태 관리
- 노드 추가와 제거 같은 클러스터의 전반적인 관리를 한다. 
- 메타 데이터 관리

Index 생성, 삭제 등 클러스터 관련된 전반적인 작업을 담당하기 때문에 네트워크 속도가 빠르고 지연이 없는 노드를 마스터 노드로 선정해야 한다. 다수의 노드를 마스터 노드로 설정할 수 있지만, 결과적으로 하나의 노드가 선출되어 동작한다.
마스터 노드 전용으로 설정한다면 conf의 elasticsearch.yml 파일에 아래와 같이 설정해야 한다. 

node.master:true 
node.data:false
node.injest:false
search.remote.connect:false

마스터 노드 역할을 수행할 수 있는 노드가 없으면 클러스터 작동이 정지된다.
클러스터가 커져서 노드와 샤드들의 갯수가 많아지면, 모든 노드들이 마스터 노드의 정보를 계속 공유하는게 부담이 될 수 있다. 이럴 때는 마스터 노드의 역할을 수행 할 후보 노드들만 따로 설정해서 유지 하는 것이 클러스터 성능에 도움이 될 수 수 있다.

* Split Brain란? 

 마스터 후보 노드를 하나만 놓게 되면 그 마스터 노드가 유실되었을 때 클러스터 전체가 작동을 정지 할 위험이 있다. 그래서 최소한의 백업용 마스터 노드를 설정하게 되는데 이 때 마스터 후보 노드들은 3개 이상의 홀수 개를 놓는 것을 권장하고 있습니다.

 네트워크 단절로 마스터 후보 노드인 node-1 과 node-2 가 분리되면 각자가 서로 다른 클러스터로 구성되어 계속 동작하는 경우가 있을 수 있습니다. 이 상태에서 각자의 클러스터에 데이터가 추가되거나 변경되고 나면 나중에 네트워크가 복구 되고 하나의 클러스터로 다시 합쳐졌을 때 데이터 정합성에 문제가 생기고 데이터 무결성이 유지될 수 없게된다. 이것을 Split Brain이라고 한다. 

따라서 홀수개로 구성하는것이 좋다.


데이터 노드(Data Node)

문서가 실제로 저장되는 노드, 데이터가 실제로 분산 저장되는 물리적 공간인 "샤드"가 배치되는 노드이다. 색인 작업은 CPU, Memory, 스토리지 같은 컴퓨팅 리소스를 많이 소모하기 떄문에 리소스 모니터링이 필요하다.

데이터 노드는 가능한 한 마스터 노드와 분리해서 구성하는 것이 좋음. 색인할 문서의 수가 적으면 함께 구성해도 상관은 없다.  elasticsearch.yml 파일을 아래와 같이 수정하면 데이터 노드 전용으로 설정할 수 있다.

node.master:false
node.data:true
node.ingest:false
search.remote.connect:false
Kibana의 Monitoring 화면에서 노드의 역할들을 확인할 수 있습니다. 대부분의 Elastic Stack 모니터링 도구에서 마스터 노드는 별(⭑) 표시로 구분합니다.
* 표가 마스터
 
Elasticsearch Head에서의 노드 확인

 


코디네이팅 노드(Coordination Node)

- 사용자 요청을 받아서 처리
- 클러스터 관련 요청은 마스터 노드에 전달하고, 데이터 관련 요청은 데이터 노드에 전달

데이터노드, 마스터 노드, 인제스트 노드의 역할을 하지 않고, 들어온 요청을 단순히 RR방식으로 분산 시켜주는 노드이다. 

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

인제스트 노드(Ingest Node)

- 문서의 전처리 작업을 담당
- 인덱스 생성 전 문서의 형식을 다양하게 변경할 수 있음

문서의 전처리 작업을 담당하며 인덱스 생성 전 문서의 데이터 포맷을 변경하기 위해 스크립트로 전처리 파이프라인 구성하여 실행

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


 

 

3.3 마스터 노드와 데이터 노드 - Master & Data Nodes - Elastic 가이드북

위의 경우 데이터는 노드 node-4, node-5의 데이터만 사용이 가능하고 node-6은 네트워크가 복구될 때 까지 동작하지 않고 노드가 분리되기 이전 상태 그대로 유지됩니다. 이렇게 하면 나중에 클러스

esbook.kimjmin.net