Индексы OpenSearch хранятся в шардах, а каждый шард, в свою очередь, хранит данные на диске в виде сегментов. В результате процессов OpenSearch, таких как обновление и удаление, на диске может быть создано множество небольших сегментов, которые OpenSearch объединяет в сегменты большего размера, чтобы оптимизировать использование диска. Процесс объединения использует ресурсы процессора, памяти и диска, что может замедлить скорость отклика кластера.
Как исправить
В общем случае процесс объединения OpenSearch управляется в фоновом режиме, учитывая другие потребности кластера в ресурсах, такие как поиск и индексирование. Поэтому вмешиваться в эти процессы не нужно и нежелательно.
Однако если вы временно хотите уменьшить или ограничить процессы слияния, у вас есть два варианта.
Менее агрессивный метод - уменьшить значение max_thread_count для планировщика слияния.
Это уменьшит максимальное количество потоков, которые OpenSearch будет выделять для работы слияния (это число не может быть уменьшено до нуля).
1 2 | PUT my_index/_settings {"index.merge.scheduler.max_thread_count":1} |
Если вы считаете необходимым предпринять этот шаг, настоятельно рекомендуется восстановить значение по умолчанию как можно скорее, чтобы избежать других проблем, таких как избыток дескрипторов файлов на узлах.
1 2 | PUT my_index/_settings {"index.merge.scheduler.max_thread_count":null} |
Другой вариант - "свернуть" индекс, чтобы остановить дальнейшую запись в него, а затем напрямую отменить задачи слияния, которые были запущены на этом индексе, в соответствии со следующими шагами.
Свернуть индекс
Чтобы свернуть индекс, необходимо использовать псевдонимы индексов.
Чтобы создать индекс, использующий псевдонимы, вам нужно либо создать индекс с псевдонимом:
1 2 3 4 5 6 | PUT /logs-000001 { "aliases": { "my_log_alias": {} } } |
Или добавьте псевдоним к существующему индексу:
1 2 3 4 5 6 7 | POST /_aliases { "actions" : [ { "add" : { "index" : "logs-000001", "alias" : "my_log_alias","is_write_index":true } } ] } |
Ваше приложение должно будет писать в псевдоним, а не напрямую в индекс.
Создав псевдоним, вы можете принудительно перевернуть его, создав новый индекс и изменив индекс записи следующим образом:
1 | PUT logs-000002 |
1 2 3 4 5 6 7 | POST /_aliases { "actions" : [ { "add" : { "index" : "logs-000001", "alias" : "my_log_alias","is_write_index":false } }, { "add" : { "index" : "logs-000002", "alias" : "my_log_alias","is_write_index":true } } ] } |
Отмена задачи слияния
Обычно вы стараетесь не отменять задачи слияния, поскольку это оптимизационная операция, автоматически регулируемая кластером. Однако в крайнем случае, чтобы освободить ресурсы для выполнения тяжелых операций поиска или индексирования, вы можете отменить задачу следующим образом:
1 | POST _tasks/aitueURTfdu58VeiohTt8A:12345/_cancel |
Как предотвратить сильную активность слияния
Сильная активность слияния обычно возникает для индексов, которые активно индексируются или обновляются. Сильная активность слияния также может быть признаком того, что в вашем кластере что-то не в порядке. В частности, это может быть слишком большой размер ваших шардов. Подробнее о том, как это происходит и как решить эту проблему, вы можете узнать здесь: Слишком большие шарды в OpenSearch - полное руководство.