[Elasticsearch] Cluster & Node

2019. 8. 29. 13:27Elasticsearch

Elasticsearch 도입을 위한 테스트를 진행하는 경우엔 특별히 cluster 설정이나 node에 대해서 설정할 것이 없다. 하드웨어 사양(CPU, RAM, HDD or SSD 등)에 따라 elasticsearch의 설정 값(각종 메모리 비율, refresh interval, dynamic mapping 관련 설정 등)을 튜닝해야 하는 부분은 있지만, node 하나로 운영할 때는 cluster 구성에 관한 설정은 할 것이 없다.

그래도 결국 프로덕션 레벨의 elasticsearch 시스템을 운영하기 위해서는 위해서는 elasticsearch의 클러스터와 노드에 대해서 공부하지 않으면 안된다.

Elasticsearch cluster

Elasticsearch system의 가장 큰 단위
하나의 cluster는 다수의 node로 구성
하나의 cluster는 다수의 서버로 바인딩하여 운영
또는 역으로 하나의 서버에서 다수의 클러스터 운영 가능

 


Elasticsearch nodes

 

Elasticsearch를 구성하는 하나의 단위 프로세스
다수의 shard로 구성됨
역할에 따라 Master-eligible(Master), Data, Ingest, Tribe 노드로 구분

 

이렇게 되면 역할에 따라 구분된 해당 노드들이 어떤 역할을 하는지 알아야 프로덕션 레벨의 시스템을 구축할 수 있다. 일단 공식 홈페이지의 설명을 보면 다음과 같다.

Master-eligible node
A node that has node.master set to true (default), which makes it eligible to be elected as the master node, which controls the cluster.

Data node
A node that has node.data set to true (default). Data nodes hold data and perform data related operations such as CRUD, search, and aggregations.

Ingest node
A node that has node.ingest set to true (default). Ingest nodes are able to apply an ingest pipeline to a document in order to transform and enrich the document before indexing. With a heavy ingest load, it makes sense to use dedicated ingest nodes and to mark the master and data nodes as node.ingest: false.

Tribe node
A tribe node, configured via the tribe.* settings, is a special type of coordinating only node that can connect to multiple clusters and perform search and other operations across all connected clusters.

 

먼저 Master-eligible node는 master 역할을 감당할 수 있는 노드들의 후보군이다. 그 중에 한 node를 선출하여 master 역할을 감당할 수 있게 하고 흔히 선출된 node를 master node라고 부른다. Master node의 역할은 아래와 같다.

 

Master node

 

인덱스 생성, 삭제
클러스터의 노드들 추적, 관리
데이터 입력 시 어느 샤드에 할당할지 결정

 

따라서 master node를 안정적으로 관리하는 것이 전체 cluster의 상태를 안정적으로 관리할 수 있는 중요한 요소가 된다. 공식 홈페이지에 따르면 master node의 경우 데이터 인덱싱, 검색 등에 의해 CPU, 메모리, I/O 리소스 소모가 클 수 있기 때문에 부하를 받지 않도록 master와 data node를 구분해서 운영하길 권장하고 있다. 또한 client node 등에서 master node로 인덱싱, 검색 요청 등을 라우팅 할 경우 master node에 부담이 될 수 있기 때문에 가능한 아무런 일을 시키지 않고 master 역할에만 집중할 수 있도록 설정하는 것이 좋다.

Master node 전용으로의 설정은 elasticsearch.yml 파일에 아래와 같이 설정하면 된다.

node.master: true node.data: false node.ingest: false

elasticsearch.yml 파일에 아무런 설정을 하지 않으면 3개의 값 모두 default 값 (true)으로 설정된다.

 

Data node

 

Data node의 경우 색인을 생성한 문서가 들어있는 조각이 들어있다. Data node는 CRUD, 검색 및 집계와 같은 데이터와 관련된 작업들을 처리한다. 이런 작업은 CPU, 메모리, I/O 리소스를 많이 사용하기 때문에 data node의 경우 하드웨어 선택에 신중을 기해야 한다.

Data 전용 node 설정은 elasticsearch.yml 파일에 아래와 같이 설정하면 된다.

node.master: false node.data: true node.ingest: false

 

Ingest node

 

Ingest node의 경우 문서(데이터)를 변환하는 등 전처리 파이프 라인을 실행한다. 실제 데이터에 ingest pipeline을 적용할 수 있다. Ingest의 부하가 많은 경우 전용 ingest node를 사용하도록 권장하며 master node와 data node의 node.ingest: false로 설정하는 것이 좋다.

Ingest 전용 node 설정은 elasticsearch.yml 파일에 아래와 같이 설정하면 된다.

node.master: false node.data: false node.ingest: true

 

Tribe node

 

Tribe node의 경우 여러 클러스터에 참여하는 특별한 node를 의미한다. 참여한 모든 클러스터에서 검색 및 기타 작업을 수행할 수 있다. Tribe node는 tribe.* 설정을 통해 구성할 수 있다.

Tribe node의 예 (출처: Elasticsearch on Azure Guidance)

이렇게 다중의 클러스터를 전체적으로 운영할 때 필요한 형태의 node이다. Tribe node의 경우 검색, 인덱싱, 문서 관리 등을 할 수 있지만, 새로운 인덱스를 생성할 수는 없고, 여러 클러스터 안의 인덱스 명은 서로 중복되지 않도록 관리해야 한다.

 

Coordinating only node (Client node)

 

이전 버전에서는 client node라고 흔히 부르던 node가 ingest node를 설정할 수 있게 되면서 coordinating only node라는 명칭으로 변경된 것으로 보여진다. Client node의 설정은 아래와 같이 설정하면 된다.

node.master: false node.data: false node.ingest: false

Coordinating only node를 사용했을 때의 장점은 검색 쿼리의 집계, 계산이 포함된 경우 데이터 계산 처리에 필요한 리소스를 coordinating only node의 리소스를 사용하게 되어 각 node들의 역할에 집중할 수 있게 해준다. 계산에 필요한 리소스가 커지면 커질수록 client node를 사용하는 것이 유리하다. Coordinating only node를 사용하면 data node는 데이터 관리 및 인덱싱에 집중할 수 있게 된다. 복잡한 조회 및 집계를 포함하는 많은 시나리오에는 coordinating only node의 사용이 이득이 된다.


하루의 데이터양과 데이터 검색 시나리오에 따라 cluster의 사이즈를 결정하게 되겠지만, 작은 규모의 cluster는 크게 상관없겠지만 규모가 조금씩 커지게 되면 master, data, client(coordinating only) node를 그 역할에 맞게 구분해서 구성하면 된다.

 

출처: https://blog.naver.com/indy9052/220942459559