DBAtlas · データベース運用アトラス

Elasticsearch の red/yellow クラスタと未割り当てシャード

症状

_cluster/health が 'red' または 'yellow'。未割り当てシャード。読み取り/書き込みが制限されているか、データにアクセスできない。

1. 色と原因

yellow = レプリカシャードが未割り当て (データは存在するが、冗長性が低下している)。red = 少なくとも 1 つのプライマリシャードが欠落している (そのデータにはアクセスできない)。まずどちらか、そしてその理由を特定する。

Elasticsearch

GET _cluster/health?level=indices
GET _cluster/allocation/explain

2. 未割り当てシャードとその理由を一覧表示する

unassigned.reason 列が根本原因を示す (NODE_LEFT、ALLOCATION_FAILED、DISK など)。

Elasticsearch

GET _cat/shards?v&h=index,shard,prirep,state,unassigned.reason&s=state

3. 一般的な原因に対処する

1) ディスクウォーターマーク → low を超えるとノードは新しいシャードを受け取らず、flood_stage ではインデックスが読み取り専用になる。2) ノードがダウンした / 離脱した。3) 割り当てが無効のまま放置された。4) レプリカ数 > 割り当て可能なノード数。

4. 修正する

該当する原因に応じてブロックを解除する。

Elasticsearch

# If disk space was freed, remove the read-only block (7.4+ also lifts it automatically once below the high watermark):
PUT _all/_settings {"index.blocks.read_only_allow_delete": null}
# If allocation was left restricted, return it to the default (all):
PUT _cluster/settings {"persistent":{"cluster.routing.allocation.enable":null}}
# Retry failed allocations:
POST _cluster/reroute?retry_failed=true

5. それでも red で、プライマリが本当に失われた場合

影響を受けたインデックスをスナップショットからリストアするか、ソースデータから再インデックスする (_reindex)。恒久対策: ディスクウォーターマークのアラート、適切なレプリカ数 (≥1)、ノードのヘルス監視。

DBAtlas で開く →