DBAtlas · Атлас эксплуатации баз данных

Кластер Elasticsearch red/yellow и неназначенные шарды

Симптом

_cluster/health 'red' или 'yellow'; неназначенные шарды; чтение/запись ограничены или данные недоступны.

1. Цвет и причина

yellow = реплики шардов не назначены (данные есть, отказоустойчивость снижена). red = отсутствует хотя бы один PRIMARY-шард (эти данные недоступны). Сначала определите, какой случай и почему.

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) Disk watermark → выше low узел не получает новые шарды; на flood_stage индексы переходят в режим только для чтения. 2) Узел упал / вышел из кластера. 3) Allocation оставлен отключённым. 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 и primary действительно потерян

Восстановите затронутый индекс из snapshot или переиндексируйте его из исходных данных (_reindex). Навсегда: оповещения по disk watermark, подходящее число реплик (≥1) и мониторинг состояния узлов.

Открыть в DBAtlas →