상황
- 아래 ES 에러 메시지가 발생하면서 신규 인덱스 생성 불가
{"type":"illegal_argument_exception",
"reason":"Validation Failed: 1: this action would add [10] shards,
but this cluster currently has [993]/[1000]
maximum normal shards open;"}
분석
ES 공식문서에 따르면,
- 클러스터의 샤드 수는 노드 수에 기반한 소프트 제한이 있으며, 이것은 클러스터를 불안정하게 할 수 있는 작업을 방지하기 위함입니다.
- 클러스터 샤드 제한은 하드웨어 구성과 부하량에 따라 안정적인 샤드 수가 다릅니다.
- closed index는 위 max_shards_per_node 에 포함되지 않습니다.
- 새 인덱스 생성, 인덱스 스냅샷 복원, closed index 열기와 같은 작업으로 샤드 수가 초과하게 되면 위와 같은 maximum normal shards open 에러가 발생합니다.
- 클러스터가 이미 샤드 제한을 초과한 경우, 일부 인덱스가 closed 되거나 삭제될 때까지 새로운 인덱스 생성이나 closed index 열기 작업이 실패합니다.
- cluster.max_shards_per_node 설정으로 클러스터 샤드 제한을 동적으로 조정할 수 있으며, 이는 노드당 최대 수를 제한합니다.
- cluster.max_shards_per_node 기본값은 1000입니다.
해결방법
1. 샤드 수 조정
- 인덱스당 샤드 수 조정
- 샤드 병합(포스 머지)
- Open Index 중 사용하지 않는 인덱스를 Closed 혹은 Delete 처리
2. 클러스터 설정 변경 (cluster.max_shards_per_node)
3. 데이터 노드 증설
클러스터 설정 변경 (cluster.max_shards_per_node)
해당 옵션은 각 노드가 보유할 수 있는 최대 샤드(Shard) 수로 상황에 따라 성능 저하가 동반될 수 있어 장기적으로는 샤드 크기와 구조를 최적화 하는게 바람직함.
cluster.max_shards_per_node 설정 확인
GET _cluster/settings?include_defaults
max_shards_per_node 옵션 조정
PUT _cluster/settings
{
"persistent": {
"cluster.max_shards_per_node": "원하는 샤드 수"
}