샤드 구성
number_of_shards
는 OpenSearch에서 인덱스를 물리적으로 분산 저장하고 병렬 처리 성능을 확보하기 위한 핵심 설정이다. 이 값은 인덱스 생성 후에는 변경할 수 없기 때문에, 인덱스 설계 시 신중하게 결정해야 한다.
1. number_of_shards
의 역할
역할 | 설명 |
---|---|
데이터 분산 저장 | 하나의 인덱스를 여러 노드에 나누어 저장함으로써 디스크 I/O 병목을 줄이고 부하를 분산시킬 수 있다. |
병렬 검색 처리 | 여러 샤드가 동시에 쿼리를 처리할 수 있어 검색 응답 속도를 향상시킬 수 있다. |
수평 확장 지원 | 클러스터에 노드가 추가되면 샤드가 자동으로 분산되어 확장성이 향상된다. |
2. 설정 기준
샤드는 너무 적어도 확장성과 처리 성능에 제약이 생기며, 반대로 너무 많아도 리소스 낭비와 성능 저하를 유발할 수 있다. 일반적으로 샤드 하나의 크기는 약 10~30GB가 이상적이다.
예상 인덱스 데이터 크기 | 권장 샤드 수 | 비고 |
---|---|---|
10GB 이하 | 1 | 단일 샤드로 충분하다. |
10~50GB | 2~3 | 중소 규모 데이터에 적합하다. |
50~200GB | 3~5 | 다중 노드 환경에서의 안정적인 분산을 도모할 수 있다. |
200GB 이상 | 5~10 이상 | 대용량 처리 및 확장성을 고려해야 한다. |
과도한 샤드는 file descriptor 소모, heap memory 증가, segment 병합 비용 등을 유발하므로 주의가 필요하다.
3. 설정 예시
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
-
Primary Shard 3개를 통해 데이터를 세 부분으로 분산 저장한다.
-
Replica 1개를 두면 각 Primary Shard의 복제본이 하나씩 생기므로 총 샤드 수는 6개이다.
-
최소 2개의 데이터 노드가 필요하며, 가용성과 검색 성능이 확보된다.
4. 최적 설계 요령
-
샤드는 데이터 분산과 성능을 조율하는 단위이므로 전체 인덱스 크기를 기준으로 나누는 것이 바람직하다.
-
인덱스 생성 시 다음과 같은 공식이 도움이 된다.
샤드 수 × (replica 수 + 1) ≈ 총 데이터 노드 수
- 또한, 클러스터 전체 기준으로는 다음 범위를 권장한다.
총 샤드 수 ≤ 데이터 노드 수 × 20
이 기준을 초과할 경우, 노드당 리소스 한계를 초과하거나 GC, 검색 지연 등의 문제가 발생할 수 있다.
5. 결론
number_of_shards
설정은 단순한 숫자가 아닌, 인덱스 성능, 확장성, 안정성에 영향을 미치는 중요한 요소이다.
운영 환경에 맞는 데이터 규모와 노드 수를 고려하여 적절한 수치를 설정하는 것이 클러스터의 장기적인 안정성과 성능 유지에 도움이 된다.
필요하다면 예상 데이터 크기를 입력받아 자동으로 샤드 수를 추천해주는 계산 도구도 함께 구축할 수 있다.