Elastic Stack

Elasticsearch, Cluster는 어떻게 구성돼 있을까?

iKay 2019. 12. 27. 01:27
반응형

Elasticsearch를 처음 접했을 때 이해하가 어려웠던 것 중 하나는 Elasticsearch cluster는 어떻게 구성돼 있는지였다. 오늘은 Elasticsearch cluster가 어떻게 구성돼있고, 각각 구성에 대해 살펴보자.

 

Elasticsearch Cluster 구성

ElasticSearch cluster는 하나 이상의 node, node는 하나 이상의 index, index는 하나 이상의 shard로 구성돼있다. 다시 말해, 여러 shard가 모여서 index를 구성하고, 즉, index는 물리적으로 나뉘어진 shard 조각들의 논리적인 집합이고, 이 shard 조각들이 여러 node에 균등하게 저장된다. 이 여러 node가 보여 군집을 이룬 것을 cluster라 부른다.

1. node 하나로 구성된 cluster

node를 1개만 실행시키는 경우 cluster는 오직 하나의 node만 갖게 된다. 따라서 모든 primary shards(P1, P2, P3)는 하나의 data node에만 할당되고, replica shards를 가질 수 없다.

2. 여러 node로 구성된 cluster

node 여러개를 실행시켜 cluster를 형성하는 경우, primary shards(P1, P2, P3)와 replica shards(R0, R1, R2)는 master node에 의해 각 data node에 자동으로 균등하게 분배되어 할당된다. shard가 분배되는 과정을 사용자는 일반적으로 알 필요가 없고(블랙박스화) 인덱싱을 하거나 인덱스를 조회할 줄만 알면된다.

 

Cluster 란?

같은 네트워크 영역일 때, node 설정(elasticsearch.yml)에서 cluster.name을 동일하게 설정해서 실행시키면 node의 군집인 cluster를 자동으로 형성한다. 만약 data node가 새롭게 추가되거나 갑자기 사라질 때 master node에 의해 균등하게 분배된다. node 구성에 따라 다양한 종류의 cluster를 구성할 수 있다.

 

Node 란?

ElasticSearch 인스턴스 하나가 곧 node를 뜻한다. 즉, ~/bin/elasticsearch를 실행시키면 node를 하나 실행 시키는 것이다. node는 기본적으로 master 이면서 data 역할을 할 수 있게 설정 돼 있다. 하지만, production 환경에서는 한 가지 역할만 하도록(dedicated node로 분리하는 것) 하는 것이 좋다.

 

네 가지 종류 node

node는 다음과 같이 네 종류가 있다.

1. Master node

master node는 cluster를 제어하는 역할을 한다. production 환경에서는 필수적으로 3개 이상 필요하다. 1 개는 master, 나머지는 mater가 될 수 있는 후보 node(=master-eligible node)이다. 현재 운용 중인 Master node가 갑자기 사라진다해도 cluster내에 master-eligible node가 있다면 그 중에서 새로운 node가 vote를 통해 master node가 선정된다.

 

2. Data node

Elasticsearch에서 가장 중요한 node로 data가 저장되고, CRUD, aggregations가 수행되는 node 이다. 최소 메모리 16GB, CPU는 2코어, 대수 3대 이상 설치하는 것이 권장되고, 힙 메모리는 각 node 물리 메모리의 50%로 설정하는 것이 좋다. 만약 1 대로만 운용하는 경우, replica shard가 만들어지지 못하므로 data를 잃어버릴 위험이 크다. 

 

3. Ingest node

인덱싱하기 전에 document를 전처리하거나, 변환하기 위해 ingest pipeline 를 사용하는데, 이 일을 하는 node 이다. ingest 부하가 심할 때는, dedicated ingest node를 두는 것이 좋다.

 

4. Coordination node

client node라고도 불리며, client로 부터 request를 담당하는 node이다. 

 

 

각 node에 요구되는 resource

 

 

Indexing 과정에서 data flow

 

Search 과정에서 data flow

 

Index 란?

index는 데이터가 저장되는 논리적 공간이다. 하나의 index는 하나의 type만 가지며, index는 최소한으로 1 개 이상의 primary shard와 0 개 이상의 replica shard set을 갖는다.

 

index의 타입을 정의하는 것을 mapping 한다라고 표현한다. 

 

Shard 란?

shard란 index가 data node 내에 분산 저장되는 파티션 공간이다. shard는 primary shard, replica shard가 있다.

 

1. Primary Shard

raw data가 indexing될 때 하나 이상의 파티션에 분산되어 저장되는데, 이 파티션이 primary shard 이다. 초기 index를 설정할 때 primary shard의 수를 설정할 수 있고, 운용 중에는 reindex를 하지 않는 한 primary shard의 수를 수정할 수 없다. 그러므로 초기 index를 설정할 때 신중해야 한다.

 

2. Replica Shard

각 primary shard의 복제본을 일컫는다. 이렇게 replica를 갖는 이유는

  1. primary shard에 장애가 발생할 경우, replica가 primary 역할을 하게 하기 위해서이다.

  2. get, search 요청이 있을 때, primary 뿐만 아니라 replica에서도 처리할 수 있도록 해 성능을 향상시키기 위해서이다. 하지만 무분별하게 replica의 수를 늘린다면 공간낭비, indexing 성능저하가 발생할 수 있다.

기본적으로, 각 primary는 1개의 replica를 갖고, index에 대해 replica 수를 운용 중에 동적으로 변경할 수 있다.

 

 

참고

- https://www.elastic.co/kr/webinars/elasticsearch-sizing-and-capacity-planning

- 엘라스틱서치 실무가이드(https://wikibook.co.kr/practical-elasticsearch)

반응형