Backend

[Elasticsearch] maximum normal shards open - 클러스터 샤드 수 제한

산희 2024. 7. 4. 20:18

상황

  • 아래 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 공식문서에 따르면,

  1. 클러스터의 샤드 수는 노드 수에 기반한 소프트 제한이 있으며, 이것은 클러스터를 불안정하게 할 수 있는 작업을 방지하기 위함입니다.
  2. 클러스터 샤드 제한은 하드웨어 구성과 부하량에 따라 안정적인 샤드 수가 다릅니다.
  3. closed index는 위 max_shards_per_node 에 포함되지 않습니다.
  4. 새 인덱스 생성, 인덱스 스냅샷 복원, closed index 열기와 같은 작업으로 샤드 수가 초과하게 되면 위와 같은 maximum normal shards open 에러가 발생합니다.
  5. 클러스터가 이미 샤드 제한을 초과한 경우, 일부 인덱스가 closed 되거나 삭제될 때까지 새로운 인덱스 생성이나 closed index 열기 작업이 실패합니다.
  6. cluster.max_shards_per_node 설정으로 클러스터 샤드 제한을 동적으로 조정할 수 있으며, 이는 노드당 최대 수를 제한합니다.
  7. 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": "원하는 샤드 수"
  }