Периодически кластер уходит из нормального состояния по причине недоступности мастер-ноды с дата-нод. Возможные причины:

  1. Проблемы с сетью
  2. Мастер-нода перегружена
  3. На мастер-ноде лютует GC

Каждая из причин имеет свое отражение в логах. Внимательно читаем логи, устраняем её и если кластер не переходит в состояние green - читаем дальше.

Cluster status “RED”

Все грустно. Primary шарды не удалось аллоцировать для части индексов. Но не все так плохо. Самое первое - проверяем наличие места на дисках. Если настройки кластера дефолтные, то необходимо не менее 15% свободного места на дисках. Читаем внимательно про disk watermarks. Как только место на дисках освобождено, можно воспользоваться следующей командой

POST /_cluster/reroute?retry_failed

Этим магическим действием мы говорим мастеру кластера попробовать найти и аллоцировать шарды (как primary, так и replica). В большинстве случаев все будет хорошо и начнется восстановление кластера.

Важно: вызывать reroute может понадобиться несколько раз. Если количество unassigned шардов уменьшается - мы на верном пути. Повторяем до получения требуемого результата.

Если же шарды не аллоцируются, имеет смысл посмотреть причину:

GET /_cluster/allocation/explain

В большинстве случаев причина будет понятна из листинга аллокатора (читаем тут), но периодически бывает довольно печальная ситуация, когда в причине невозможности аллоцировать висят сообщения с подобным содержанием:

java.io.IOException: failed to obtain in-memory shard lock

Решение тут довольно печальное - надо будет руками копаться в файловой системе и удалять “лишние” файлики.

Берем из листинга номер шарда shard_mun и название индекса index_name и информацию о ноде, на котрой не получилось аллоцировать шард. Дальшее с помощью

GET _cat/indices/index_name?v

получаем uuid проблемного индекса. После этого идем в

data_path/nodes/0/indices/{index_uuid}/{shard_num}/index

и удаляем файлик write.lock. И рестартуем ноду. Данный шард должен успешно аллоцироваться. Радуемся и повторяем вышеописанное до получаения необходимого результата)

Cluster status “YELLOW”

Полный комплект данных у нас доступен, но есть проблемы с репликами. В подавляющем большинстве случаев причина - нехватка места. Освобождаем место и пинаем

POST /_cluster/reroute?retry_failed

Профит.