본문 바로가기

elasticsearch

엘라스틱서치 샤드 갯수?

반응형

기본적으로 shard 를 한번 생성하고 나면 추후 변경이 안된다.

데이터는 계속 쌓이고 쌓이는 양에 대해서 가늠하기도 애매할 텐데 거기다가 변경(scale out) 도 안된다니.

이렇다보니 최초 인덱스 생성시 shard 설정을 어떻게 해야 할까 고민이 되는 건 당연지사.


이리저리 뒤져 보면 여러가지 얘기들이 있다. 그 중 한 두개 꼽아 보자면

* 샤드는 무조건 많다고 좋은건 아니다.

당연한 얘기겠지만 분산되어 있는 서버, 시스템, 플랫폼 등등 그 양이 많아지면 관리하기는 점점힘들어 지고 그에 따른 관리도 쉽지가 않다.

간략한 예로 샤드자체가 리소스들(memory, file 등)을 사용하고, 검색 요청 / 연산시 나눠져 있는 각 샤드를 다 확인해 봐야 하기 때문이다.

* 최초 노드의 3배 정도 설정해라.

이건 왜 그런건지 잘 모르겠다. ELK 스택을 호스팅해주는 업체에서 작성한 포스트 중에 본 내용인데.. 영문을 제대로 이해 못한건지...


이 외에는 아무리 찾아봐도 뾰족하게 쓸만한 내용은 없는거 같다..


그렇다면 어떻게 해야 하나? 내가 생각하는 바를 말하기 전에 간략하게 엘라스틱서치의 개념적인 구성을 보면

* 클러스터(cluster) : "노드"들의 모음이라고 볼 수 있음

* 노드(node) : 엘라스틱서치의 실제 인스턴스

* 인덱스(index) : 문서(Document라고 하나 그냥 데이터라고 표현하자.)들의 집합

* 샤드(shard) : 인덱스의 문서(데이터)들의 정보를 나눠서 가지고 있음


위와 같다.


위 내용을 가지고 정리를 해 보자면

* 실제 데이터는 인덱스라는 논리적인 개념으로 묵임

* 인덱스에 묵인 실제 데이터들은 샤드에 나눠져서 저장 됨

* 노드당 다수의 샤드가 할당 될 수 있음

* 노드는 머신당 하나 이상 있을 수 있다.


그런데 실제로 구성을 하다보니 나의 경우에는 하나의 인덱스에 모든 데이터를 계속 집어 넣는게 아니라 인덱스를 날짜별로 생성을 하는 방식으로 하게 되면 샤드의 갯수에 크게 종속적이지 않아도 될 듯 하다.

(샤드를 늘릴 필요가 있을 경우 앞으로 생길 인덱스에 적용 될 수 있도록 설정을 하게 되면 되니까)

반응형