이번 포스팅에선 Elasticsearch 를 사용할 때 클러스터에 적절한 샤드 개수를 결정하는 방법들에 대해 소개합니다.
샤드 크기 결정
ES의 인덱스는 하나 이상의 샤드로 분리되며, 각 샤드는 하드웨어 장애를 대비해 다른 노드에 복제된다. 만약 데이터 스트림을 사용한다면, 각 데이터 스트림은 인덱스들의 시퀸스로 back 된다. 단일 노드에 저장할 수 있는 데이터의 크기엔 한계가 있기 때문에, 노드를 추가하고 인덱스 및 해당하는 샤드의 수를 증가시켜 클러스터의 용량을 늘릴 수 있다. 하지만 각 인덱스와 샤드엔 약간의 오버헤드가 있기 때문에, 데이터를 너무 많은 샤드로 분할하면 오버헤드는 걷잡을 수 없이 커진다. 너무 많은 인덱스나 샤드를 가진 클러스터는 오버샤딩 되었다고 말할 수 있다. 오버샤딩된 클러스터는 검색 결과를 응답하는데 덜 효율적이게 되며, 극단적인 경우엔 클러스터가 불안정해질 수도 있다.
샤딩 전략 생성 (Sharding strategy)
오버샤딩과 여타 샤드 관련 문제를 방지하는 최선의 방법은 샤딩 전략을 생성하는 것이다. 샤딩 전략은 클러스터의 최적의 샤드 개수를 결정하는데 도와주고, 샤드 개수를 제한하면서 운영할 수 있도록 해준다.
안타깝게도 어디에나 들어맞는 샤딩 전략은 없다. 한 환경에서 잘 먹히는 전략은 다른 환경에서는 잘 먹히지 않을 수도 있다. 좋은 샤딩 전략은 반드시 인프라와 유즈케이스, 성능 기대치를 고려해야 한다.
샤딩 전략을 만드는 최선의 방법은 운영 환경과 동일하게 운영 장비 위에 운영 데이터에 동일한 쿼리 및 색인 부하를 주는 식으로 벤치마킹을 하는 것이다. 이와 관련해 정량적 클러스터 사이징 영상을 보는것을 추천한다. 다른 샤드 설정으로 테스트하게 될 것이기 때문에, 키바나의 Elasticsearch 모니터링 도구를 사용하여 클러스터의 안정성과 성능을 체크해볼 수 있다.
다음 포스팅에선 샤딩 전략을 정할 때 고려해볼만한 가이드 라인들을 설명할 것이다. 만약 이미 오버샤딩된 클러스터라면 클러스터의 샤드 개수를 줄이는 것을 살펴보라
참고
- https://www.elastic.co/guide/en/elasticsearch/reference/current/size-your-shards.html
사이즈 결정 시 고려사항
샤딩 전략을 세울 때 아래 내용들을 염두에 두어야 한다.
샤드 당 하나의 쓰레드에서 검색이 수행됨
대부분의 검색은 여러 샤드에 접근한다. 각 샤드마다 단일 CPU 쓰레드로 검색을 수행한다. 여러 샤드에 걸쳐 병렬 검색을 수행할 수 있으나, 샤드가 너무 많다면 노드의 서치 쓰레드 풀이 고갈될 수도 있으며 결국 쓰루풋이 낮아지고 검색 속도도 낮아진다.
인덱스와 샤드엔 오버헤드가 있음
모든 인덱스와 샤드는 약간의 메모리와 CPU 자원을 필요로 한다. 대부분의 경우 큰 사이즈의 샤드가 조금 있는 것이 작은 사이즈의 샤드가 많이 있는 것 보다 더 리소스를 아낄 수 있다.
샤드의 리소스 사용엔 세그먼트가 큰 역할을 한다. 대부분의 샤드는 인덱스의 데이터를 담고 있는 여러 세그먼트를 포함한다. ES는 세그먼트의 메타데이터를 JVM 힙 메모리에 가지고 있어서 검색을 위해 빠르게 가져올 수 있다. 샤드가 커짐에 따라 샤드 내 세그먼트들은 용량은 커지면서 개수는 적어지는 방향으로 병합된다. 이렇게 세그먼트의 개수가 줄어드는 것은 결국 힙 메모리에 들고있어야 하는 메모리 또한 줄어든다는 것을 의미한다.
모든 매핑된 필드들 또한 메모리 사용량과 디스크 용량의 관점에서 약간의 오버헤드를 유발한다고 볼 수 있다. 기본적으로 ES는 자동으로 색인된 모든 문서들에 포함된 모든 필드들에 대해 매핑을 생성하지만, 매핑을 직접 조정함으로써 이를 중단할 수 있다.
ES는 데이터 티어에 속한 샤드들을 자동으로 밸런싱함
클러스터의 노드들은 데이터 티어(Content, Hot, Warm, Cold, Frozen, ...)로 그룹핑된다. 각 티어 내에서 ES는 최대한 많은 노드들로 인덱스의 샤드들이 흩어지도록 시도한다. 만약 새로운 노드를 추가하거나 특정 노드가 다운된다면 ES는 자동으로 티어 내 남아있는 다른 노드로 인덱스의 샤드들을 리밸런싱 한다.
참고
'Elasticsearch' 카테고리의 다른 글
[Guide] 검색 속도 튜닝 (0) | 2023.03.16 |
---|---|
데이터 스트림 (Data streams) (0) | 2023.03.13 |
댓글