shard_lock_obtain_failed_exception: Obtaining shard lock timed out
Elasticsearch의미
Elasticsearch가 샤드 작업에 필요한 로컬 디렉터리 락(shard lock)을 타임아웃 내에 획득하지 못했다. 샤드를 시작하거나 재할당할 수 없었다.
원인
같은 샤드의 이전 복사본(close/relocation 후)이 아직 락을 해제하지 않았거나, 느리거나 멈춘 I/O, 디스크 문제, 빠른 노드 재시작 후 정리되지 않은 오래된 샤드 상태가 원인이다. 보통 일시적이지만 지속되면 샤드가 UNASSIGNED 상태로 남는다.
해결 방법
샤드가 할당되지 않은 이유 확인: GET _cluster/allocation/explain. 대부분 락이 곧 해제되고 클러스터가 스스로 재시도한다. 필요하면 POST _cluster/reroute?retry_failed=true로 재할당을 트리거한다. 지속되면 영향을 받은 노드의 로그에서 I/O/디스크 오류를 확인하고 디스크 상태를 점검한다. 문제 노드를 깔끔하게 재시작하면 락이 해제될 수 있다.
같은 데이터베이스의 다른 항목
- receive_timeout_transport_exceptionRequest timed out waiting for a response from another node (다른 노드의 응답 대기 중 요청 타임아웃)
- routing_missing_exceptionRouting value is required for this document (이 문서에는 routing 값이 필요)
- too_many_buckets_exceptionTrying to create too many buckets
- parsing_exceptionFailed to parse the search request / query DSL (검색 요청 / query DSL 파싱 실패)
- max_bytes_length_exceeded_exceptionDocument contains at least one immense term that is too long (너무 긴 거대한 term이 문서에 포함됨)
- illegal_argument_exception_total_fieldsLimit of total fields has been exceeded
- verification_exceptionverification_exception: Found N problem(s) — Unknown column / Unknown index (ES|QL, SQL, EQL) (N개 문제 발견 — 알 수 없는 컬럼/인덱스)