Красный статус OpenSearch: Почему он возникает и как убрать красный индекс

Красный статус означает, что один или несколько индексов не имеют выделенных первичных шардов. Причины могут быть аналогичны описанным в статусе Yellow, но, безусловно, указывают на то, что с кластером что-то не в порядке.

Что это означает

Красный статус означает, что не только потерян первичный шард, но и вместо него не создана реплика. Однако, как и в случае с желтым статусом, не стоит паниковать и начинать выполнять команды, не разобравшись в ситуации, поскольку в OpenSearch предусмотрены механизмы, позволяющие автоматически восстановить ситуацию.

Причины возникновения

Причин возникновения красного статуса может быть несколько:

Нет доступных реплик для продвижения.

Это может произойти потому, что у вас только один узел, или вы по ошибке указали number_of_replicas:0. В этом случае повреждение данных или потеря узла может привести к тому, что ваш узел станет красным, не пройдя через желтую стадию.

Аварии узлов

Если несколько узлов перегружены или перестают работать по какой-либо причине, например из-за ошибок "out of memory", то первым симптомом, вероятно, будет то, что узлы станут желтыми или красными, так как шарды не смогут синхронизироваться.

Сетевые проблемы

Если узлы не могут надежно связаться друг с другом, то узлы теряют связь друг с другом, и шарды рассинхронизируются, что приводит к красному или желтому статусу. Обнаружить такую ситуацию можно, обнаружив в журналах повторяющиеся сообщения о выходе или возвращении узлов из кластера.

Проблемы с дисковым пространством

Недостаток дискового пространства может помешать OpenSearch выделить шард узлу. Обычно это происходит, когда загрузка диска превышает указанное ниже значение:

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

Также можно получить:

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

Осведомленность о распределении узлов

Иногда в правилах распределения, созданных на кластере, могут возникать специфические проблемы, не позволяющие кластеру распределять шарды. Например, можно создать правила, требующие, чтобы реплики шарда были распределены по определенному набору узлов ("allocation awareness"), таких как зоны доступности AWS или различные хост-машины в системе kubernetes. В некоторых случаях эти правила могут вступать в конфликт с другими правилами (например, дискового пространства) и препятствовать выделению шардов.

Поиск причины

Вы можете использовать API распределения кластера:

Выполнив приведенную выше команду. Вы получите объяснение статуса выделения первого найденного нераспределенного шарда.

Приведенный выше api возвращает :

  • "unassigned_info" => Причина, по которой шард стал не назначенным.
  • "node_allocation_decision" => Список объяснений для каждого узла, объясняющих, может ли он потенциально получить шард.
  • "deciders" => Решение и объяснение этого решения.

Как восстановить потерянный первичный шард

Потерянный первичный шард обычно должен быть восстановлен автоматически путем продвижения его реплики. Однако при объяснении api распределения кластеров может оказаться, что это невозможно

В этом случае возможны следующие варианты:

Подождите, пока узел вернется в сеть

Если потерянный узел вышел из строя или перезагрузился, то перезапуск узла и восстановление доступности шарда может занять некоторое время.

Восстановить моментальный снимок

Как правило, предпочтительнее восстановить снимок в известном состоянии (например, 30 минут назад), чем пытаться восстановить поврежденные данные в неизвестном состоянии.

Восстановление из поврежденного шарда

В крайнем случае, если нет возможности восстановить узел, а моментальный снимок недоступен, можно восстановить поврежденный шард. Однако это означает, что данные будут потеряны, а в случае восстановления потерянного узла данные будут перезаписаны на "черные". Команда для восстановления выглядит следующим образом:

Понравилась статья? Поделиться с друзьями:
Добавить комментарий