Облачная платформаAdvanced

Настройка изоляции запросов большого объёма для кластера Elasticsearch

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Сценарий

Вы можете изолировать запросы, которые потребляют большой объём памяти или занимают длительное время. Таким образом вы обеспечиваете доступность сервиса для остальных запросов. Если использование heap‑памяти узла слишком высоко, будет запущена программа управления прерываниями для завершения большого запроса в соответствии с настроенными политиками. Вы также можете настроить глобальную длительность тайм‑аута запросов. Длинные запросы будут перехвачены нативным API отмены Elasticsearch.

Изоляция запросов большого объёма может эффективно решить следующие проблемы и повысить производительность поиска в кластерах:

  • Небольшое количество запросов занимает большие фрагменты heap‑памяти узла, вызывая частый Garbage Collection (GC) и даже исключения out of memory (OOM).
  • Частый GC приводит к отключениям узлов. В результате запросы не получают ответ и могут завершиться с ошибкой.
  • Использование CPU высоко из‑за большой нагрузки запросов, что влияет на онлайн‑сервисы.

Ограничения

Только кластеры Elasticsearch 7.6.2 и Elasticsearch 7.10.2 поддерживают изоляцию запросов большого объёма.

Вход в Kibana

Войдите в Kibana и перейдите на страницу выполнения команд. Кластеры Elasticsearch поддерживают несколько методов доступа. В этом разделе в качестве примера используется Kibana для описания процедур эксплуатации.

  1. Войдите в консоль управления CSS.
  2. В навигационной панели слева выберите Clusters > Elasticsearch.
  3. В списке кластеров найдите целевой кластер и щелкните Kibana в Операция столбце, чтобы войти в консоль Kibana.
  4. В левой навигационной панели выберите Dev Tools.

    Левая часть консоли — это поле ввода команд, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.

Enabling Large Query Isolation

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

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

PUT _cluster/settings
{
"persistent": {
"search.isolator.enabled": true,
"search.isolator.time.enabled": true
}
}

У каждой из двух функций есть независимый переключатель. Таблица 1 описаны их параметры.

Таблица 1 Параметры настройки изоляции крупного запроса и глобального таймаута запроса

Переключатель

Параметр

Описание

search.isolator.enabled

search.isolator.memory.task.limit

search.isolator.time.management

Пороговые значения для идентификации задачи запросов одного шарда как крупного запроса.

search.isolator.memory.pool.limit

search.isolator.memory.heap.limit

search.isolator.count.limit

Пороговые значения использования ресурсов для изоляции. Если использование ресурсов задачей запроса превышает один из этих порогов, задача будет приостановлена.

NOTE:

search.isolator.memory.heap.limit Определяет предел использования памяти кучи, потребляемой записью, запросом и другими операциями узла. Если этот предел превышен, крупные задачи запросов в пуле изоляции будут приостановлены.

search.isolator.strategy

search.isolator.strategy.ratio

Политика выбора задач запросов для приостановки в пуле изоляции.

search.isolator.time.enabled

search.isolator.time.limit

Глобальный тайм‑аут для задач запросов.

Настройка порогов изоляции крупных запросов

  • Выполните следующие команды, чтобы настроить пороги для определения крупной задачи запроса:
    PUT _cluster/settings
    {
    "persistent": {
    "search.isolator.memory.task.limit": "50MB",
    "search.isolator.time.management": "10s"
    }
    }
    Таблица 2 Параметры настройки порогов изоляции больших запросов

    Параметр

    Тип

    Описание

    search.isolator.memory.task.limit

    String

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

    • Диапазон значений: 0b до максимальной кучи памяти узла
    • Значение по умолчанию: 50MB

    search.isolator.time.management

    String

    Порог продолжительности запроса (начинается, когда ресурсы кластера используются для запроса). Если продолжительность запроса превышает порог, запрос будет изолирован и наблюдаться.

    • Диапазон значений: ≥ 0ms
    • Значение по умолчанию: 10s
  • Настройте пороги использования ресурсов для запуска изоляции задач запросов.
    PUT _cluster/settings
    {
    "persistent": {
    "search.isolator.memory.pool.limit": "50%",
    "search.isolator.memory.heap.limit": "90%",
    "search.isolator.count.limit": 1000
    }
    }
    Таблица 3 Параметры настройки порогов пула изоляции

    Параметр

    Тип

    Описание

    search.isolator.memory.pool.limit

    String

    Порог процента памяти кучи текущего узла. Если общий объём памяти, запрашиваемый большими задачами запросов в пуле изоляции, превышает порог, будет запущена программа управления прерываниями для отмены одной из задач.

    • Диапазон значений: 0.0 до 100.0%
    • Значение по умолчанию: 50%

    search.isolator.memory.heap.limit

    Строка

    Порог heap‑памяти текущего узла. Если heap‑память узла превышает порог, будет запущена программа управления прерываниями для отмены крупной задачи запроса в пуле изоляции.

    • Диапазон значений: 0.0 по 100.0%
    • Значение по умолчанию: 90%

    search.isolator.count.limit

    Целое

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

    • Диапазон значений: 1050000
    • Значение по умолчанию: 1000
    Note

    В дополнение к search.isolator.memory.pool.limit и search.isolator.count.limit параметры, вы можете настроить search.isolator.memory.task.limit и search.isolator.time.management для контроля количества задач запросов, попадающих в изоляционный пул.

  • Настройте политику выбора задач запросов для паузы в изоляционном пуле.
    PUT _cluster/settings
    {
    "persistent": {
    "search.isolator.strategy": "fair",
    "search.isolator.strategy.ratio": "0.5%"
    }
    }
    Таблица 4 Параметры конфигурации политики отмены запросов

    Параметр

    Тип

    Описание

    search.isolator.strategy

    String

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

    ПРИМЕЧАНИЕ:

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

    Значения: справедливый, mem-first, или time-first

    • mem-first: Задача запроса, использующая наибольшее количество памяти кучи в пуле изоляции, прерывается.
    • time-first: Задача запроса, работающая дольше всего во времени в пуле изоляции, прерывается.
    • справедливый: Если разница между памятью кучи запросов шарда меньше чем Maximum_heap_memory x search.isolator.strategy.ratio, запрос, который занимает самое длительное время, должен быть прерван. В противном случае запрос, использующий наибольший объём кучи памяти, прерывается.

    Значение по умолчанию: справедливо

    search.isolator.strategy.ratio

    String

    Порог справедливо политика. Этот параметр вступает в силу только если search.isolator.strategy установлен в справедливо. Если разница между использованием памяти больших задач запросов не превышает порог, запрос, который занимает самое длительное время, должен быть прерван. Если разница между использованием памяти больших задач запросов превышает порог, запрос, использующий наибольший объём памяти, прерывается.

    • Диапазон значений: 0.0 до 100.0%
    • Значение по умолчанию: 1%

Настройка глобального тайм‑аута запросов

Выполните следующую команду, чтобы установить глобальный тайм‑аут задач запросов:

PUT _cluster/settings
{
"persistent": {
"search.isolator.time.limit": "120s"
}
}
Таблица 5 Описание

Параметр

Тип

Описание

search.isolator.time.limit

String

Глобальная продолжительность тайм‑аута запросов. Любая задача запроса, превышающая эту продолжительность, будет отменена.

  • Диапазон значений: ≥ 0ms
  • Значение по умолчанию: 120s

Настройка максимального количества записей журнала для отменённых запросов

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

PUT _cluster/settings
{
"persistent": {
"search.isolator.log.count": "100"
}
}

Параметр

Тип данных

Описание

search.isolator.log.count

Целое

Максимальное количество записей отменённых запросов, которое может быть сохранено в памяти.

  • Диапазон значений: 0–5000
  • Значение по умолчанию: 100
NOTE:

Вы можете использовать следующие API для запроса отменённых запросов:

  • GET /_isolator_metrics: Запрашивает все узлы.
  • GET /_isolator_metrics/{nodeId}: Запрашивает один узел.
  • GET /_isolator_metrics? detailed: Запрашивает детали отмены запросов всех узлов.
  • GET /_isolator_metrics/{nodeId}?detailed: Запрашивает детали отмены запросов одного узла.

В приведённых выше командах, nodeId указывает ID узла.