Elasticsearch 기본개념 정리 (2) : 인덱스와 샤드

ES에서의 인덱스(Index)란?

 ES에서의 Index는 RDB에서의 DB와 비슷한 개념으로 볼 수 있다.

즉 인덱스란 문서가 저장되는 논리적인 공간을 의미한다.

따라서 인덱스를 설계하는 것이 ElasticSearch를 사용하기 위해 고려해야하는 첫번째 단계이다.

 

 ES를 통해 로그를 수집하던 검색엔진으로 사용하던 문서들을 어떤 인덱스에 어떻게 저장할지

설계하는 것이 가장 중요하다.

 

도서관 자료 검색 시스템을 설계해야하는 상황을 가정해보자

그럼 위 그림과 같이 하나의 인덱스에 모든 자료를 저장하는 방법이 있을 수 있고

또는 도서관에서 관리하는 자료의 종류에 따라서 인덱스를 나누어서 저장할 수 도 있다.

따라서 사용패턴과 문서의 특성에 따라 알맞게 설계해야한다.

 

샤드(Shard)란?

 문서가 저장되는 논리적인 공간이 인덱스라면 그 인덱스에 색인되는 문서가 저장되는 공간을 샤드(shard)라고 한다.

하나의 인덱스는 반드시 하나 이상의 샤드를 가지게 된다.

 

샤드(Shard)의 종류

ES에 데이터를 적재할 떄 색인(Indexing)이라는 작업을 하게되는데 이때 가장 CPU를 가장많이 잡아먹는 작업이

document를 분석하는 작업이고 이렇게 분석이 끝나면 프라이머리 샤드에 저장한다.

 

그렇기 때문에 프라이머리 샤드가 몇개가 있는지가 색인(Indexing) 즉, 데이터 적재 소요시간에 많은 영향을 준다.

레플리카 샤드는 주로 검색 성능에 영향을 줄 수 있다.

 

또 레플리카 샤드는 프라이머리 샤드가 문제가 생길 때 프라이머드로 승격되는 성격을 지니고 있다.

 

이러한 샤드는 인덱스를 설정할 때 설정되는데 다음과 같이 설정할 수 있다.

library라는 인덱스의 샤드를 설정할 때 위와같이 설정하면

프라이머리 샤드는 5개, 레플리카 샤드는 10개가 만들어져서 library 인덱스에서 만들어진 샤드는 15개가 된다.

 

위와 같은 특징과 한번 생성된 인덱스의 샤드는 변경할 수 없기 때문에 프라이머리 샤드의 개수를 설정하는 것은

매우 중요하다.

 

 

그럼 어떻게 샤드를 설정해야하나?

1. 프라이머리 샤드 설정

보통 ES에서는 프라이머리 샤드 1개가 50GB를 넘지 않도록 권장한다.

또 일반적으로 프라이머리 샤드던 레플리카 샤드던 샤드의 개수가 많을 수록 검색 성능이 좋아진다는 특징이 있다.

 

왜냐면 ES에서 검색은 샤드가 독립적으로 검색을 수행하고 나서 하나의 결과를 합쳐서 제공되기 때문에

즉 샤드가 많으면 많을 수록 분산처리를 더 효율적으로 하기 때문에 검색 속도가 빨라진다는 측면이 존재한다.

 

하지만 과유불급이라고 클러스터에 존재하는 모든 샤드는 마스터 노드에 의해서 관리되기 때문에

따라서 샤드가 많아질수록 마스터 노드의 부하가 증가한다.

 

마스터 노드의 부하로 인해 색인과 검색 작업이 느려질 수 있고 메모리 문제를 일으킬 가능성도 커질 수 있다.

또한 장애발생시 샤드 단위로 데이터가 이동하기 때문에 샤드의 크기가 너무 크면 복구작업에 부정적인 측면이 존재한다.

 

따라서 샤드당 50GB정도를 준다고 생각하면 좋을 것 같다.

 

즉 자신이 운영해야할 ES의  A라는인덱스가 500GB정도의 Data가 적재될 것 같다면

프라이머리 샤드를 10개정도 하는 것을 추천하고 있다.

 

2. 레플리카 샤드 설정

 프라이머리 샤드와 달리 레플리카 샤드는 운영중에도 변경이 가능하다. 일반적으로 장애 대응을 위해서

최소 1개 이상의 레플리카 샤드를 구성하는 것이 좋다.

 

 또한 레플리카 샤드도 프라이머리 샤드와 마찬가지로 샤드가 읽기 작업을 분산처리하기 때문에

검색성능 높여주는 장점이 있다.

 

이러한 샤드들을 설정하는 방법에 대해서는 아래의 포스팅을 참고하면 좋을 것 같다.

https://data-study-clip.tistory.com/232

 

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

ES에서 적절한 샤드를 설정할 때 크게 고려해야할 것은 바로 색인(Indexing)성능과 검색(search)성능이다. 1. Indexing (데이터 적재) 성능 고려하기 이전 포스팅에서 ES에 데이터를 적재할 떄 색인(Indexing

data-study-clip.tistory.com