Elasticsearch 기본개념 정리 (6) : 적절한 샤드의 수를 설정하는 방법에 대해서

ES에서 적절한 샤드를 설정할 때 크게 고려해야할 것은 바로 색인(Indexing)성능검색(search)성능이다.

 

 1. Indexing (데이터 적재) 성능 고려하기

 이전 포스팅에서 ES에 데이터를 적재할 떄 색인(Indexing)이라는 작업을 하게되는데

이때 가장 CPU를 가장많이 잡아먹는 작업이 바로 Analyzer를 통해서 document를 분석하하고 inverted Index를 생성하는 작업이고 이것이 바로 ES에서의 Indexing이라고 하였다.

 

그러면 여기서 의문점이 생길 수 있을 것이다.  indexing이 끝나서 프라이머리 샤드에 데이터를 저장하면 저장한 내용을 레플리카 샤드에도 반영해야하기 때문에 당연히 레플리카 샤드가 많아질 수록 색인성능을 저하시키지 않을까? 라고

생각해볼 수 있다.

 

하지만 레플리카 샤드는 프라이머리 샤드를 그대로 복제하는 것이기 때문에 Indexing 작업이 필요가 없다. 

그냥 복제만하면 된다. 즉 Analyzer 를통해서 documnet를 분석하고 inverted Index를 만드는 작업을 거치지 않고 

그냥 단순히 복제만하는 것이기 때문에 레플리캬 샤드를 늘린다고해서 Indexing(데이터 적재)성능에 크게 영향을 미친다고 할 수 없다.

 

 단 이러한 프라이머리 샤드는 Index를 생성한 이후에는 변경할 수 없기 때문에 운영단계에 이르기전에 실제 운용할 Data를 가지고 충분한 Indexing Test 거쳐서 신중하게 프라이머리 샤드의 개수를 설정해야한다.

 

 

2. Search(검색) 성능 고려하기

 데이터를 조회(검색)할 때에 영향을 받는 것은 프라이머리와 레플리카 샤드 2개이다. 

그런데 프라이 머리 샤드와 달리 레플리카 샤드는 ES를 운영하는 도중에도 변경이 가능하다.

 

따라서 Indexing을 위한 최적의 프라이머리 샤드를 설정했다면 비교적으로 검색 성능을 높이기 위해서는

운영단계에서도 충분히 다시 적용할 수 있기에 비교적 부담이 덜하다.

 

 

3. 모든 노드가 색인과 검색을 처리할 수 있도록 구성하기

 Elasticsearch는 클러스터로 구성된다고 하였다. 

즉 ES는 1개의 클러스터안에 여러대의 노드들이 존재하고 이 노드들이 모두 색인과 검색을 처리할 수 있도록

구성해야지만 클러스터로서 운영하는 이점을 챙길 수 있는 것이다.

 

 기본 설정인 프라이머리 샤드 1개, 레플리카 샤드 1개로 사용하면 아무리 클러스터에 노드를 추가해도

성능이 좋아지지 않는다는 것이다.