Желтый статус OpenSearch (Yellow) - как решить проблему, с примером кода

Желтый статус означает, что один или несколько шардов-реплик в кластере OpenSearch не выделены узлу. Не стоит паниковать! Существует несколько причин, по которым желтый статус может быть совершенно нормальным, и во многих случаях OpenSearch сам восстановится до зеленого, так что хуже всего начинать что-то настраивать, не зная точно, в чем причина. Пока статус желтый, операции поиска и индексирования по-прежнему доступны.

OpenSearch logo

Как решить проблему

Почему кластер OpenSearch показывает желтый статус?

Существует несколько причин, по которым кластер OpenSearch может показывать желтый статус:

  1. У вас только 1 узел
  2. Вы перезапустили узел
  3. Произошел сбой узла
  4. Проблемы с сетью
  5. Проблемы с дисковым пространством
  6. Осведомленность о распределении узлов
  7. Шард превысил максимальное количество повторных попыток

У вас только 1 узел

(Или количество реплик >= количество узлов)

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

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

Вы перезапустили узел

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

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

Однако если вы видите, что этот процесс повторяется, значит, какая-то другая проблема вызывает нестабильность кластера и требует расследования.

Сбои в работе узлов

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

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

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

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

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

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

Вы также можете получить:

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

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

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

Шард превысил максимальное количество повторных попыток

Если ошибка содержит: "шард превысил максимальное количество повторных попыток [5] при неудачных попытках выделения - вручную вызовите [/_cluster/reroute?retry_failed=true] для повторной попытки", необходимо выполнить повторную попытку выделения, используя:

Поиск причины невыделения

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

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

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

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