DRS — Динамический планировщик ресурсов

Описание архитектуры DRS

KeyStack DRS (Dynamic Resource Scheduler, динамический планировщик ресурсов) — сервис, который осуществляет перераспределение нагрузки гипервизоров (вычислительных узлов) внутри облака с целью повышения эффективности использования ресурсов.

DRS состоит из API-сервиса drs, интерфейсов GUI и CLI для него, а также хранилища метрик Prometheus. Сервис drs запускается в кластере Control, отслеживает нагрузку на гипервизорах (кластер Compute) и при необходимости мигрирует виртуальные машины (ВМ) с сильно загруженного вычислительного узла на более свободные. Для работы DRS регион KeyStack должен включать не менее двух гипервизоров.

DRS взаимодействует с сервисами Prometheus и Nova API, для миграции ВМ использует механизм live-миграции libvirt.

Основные операции конфигурирования и управления сервисом DRS можно выполнять двумя способами:

  • через интерфейс командной строки DRS CLI;

  • в меню DRS Портала администрирования KeyStack (Admin UI).

Основные функции DRS

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

  • Равномерное распределение CPU, ОЗУ, сетевой нагрузки между гипервизорами путём миграции виртуальных машин.

  • Создание рекомендаций для миграций виртуальных машин в процессе выполнения оптимизации, которая запускается в соответствии с заданием (job) по расписанию.

  • Возможность исключить отдельные виртуальные машины или проекты, в том числе по ряду параметров.

  • При балансировке нагрузки учитывается логика фильтров Nova, а также распределение по зонам доступности (availability zones) и группам серверов (server group).

  • Возможность одновременно выполнять несколько заданий с разными периодами запуска, разными конфигурациями и автоматическим запуском миграций.

  • Поддержка отправки уведомлений о состоянии миграций в Prometheus и Zabbix.

  • Возможность использовать авторизацию Keystone.

  • Работа в режиме High Availability.

Ключевые термины DRS

  • Конфигурация (config) — набор параметров для балансировки. Основным параметром является алгоритм. В зависимости от алгоритма определяется набор остальных параметров.

  • Задание (job) — использует определенную конфигурацию и периодически запускает оптимизации для балансировки нагрузки (в рамках указанной зоны доступности или на всем регионе).

  • Оптимизация (optimization) — один цикл работы задания.

  • Рекомендация (recommendation) — параметры для миграции ВМ между гипервизорами. Рекомендации генерируются в процессе выполнения оптимизации. Рекомендация содержит идентификатор виртуальной машины, данные об исходном и целевом гипервизорах, в том числе об их текущей и предполагаемой нагрузке. В зависимости от настроек задания, рекомендации могут применяться вручную или автоматически.

  • Миграция (migration) — живая миграция виртуальной машины, которая была запущена для применения определенной рекомендации.

Работа планировщика

Планировщик контролирует добавление, удаление, изменение заданий в расписании и их запуск. Одновременное выполнение оптимизаций не допускается.

DRS API

API-интерфейс сервиса DRS поддерживает:

  • Получение информации об оптимизациях, рекомендациях и миграциях.

  • Создание, просмотр, редактирование, удаление конфигураций (config) и заданий (job) по запуску выбранного алгоритма.

  • Применение рекомендаций в ручном режиме (если в задании выключено автоматическое применение рекомендаций).

Алгоритмы DRS

Основные алгоритмы:

  • help_overloaded_hypervisors — помогает разгрузить перегруженные гипервизоры путём переноса с него виртуальных машин на менее нагруженные гипервизоры.

  • equal_hypervisors_load — равномерно распределяет нагрузку между гипервизорами путём распределения виртуальных машин на гипервизорах.

  • balance_network — распределяет нагрузку между гипервизорами путём сбалансированного распределения их сетевой нагрузки.

Порядок работы:

  • Конфигурация задает параметры для оптимизации.

  • DRS определяет набор гипервизоров для переноса с них виртуальных машин в случае превышения определенного порога нагрузки (hard limit). Для алгоритма help_overloaded_hypervisors этот порог указывается пользователем в конфигурации. Для алгоритма equal_hypervisors_load порог вычисляется как сумма среднего значения текущей нагрузки всех гипервизоров и разрешённого превышения средней нагрузки (allowed_load_above_average). Если нагрузка гипервизора не меньше порога (например, 80% от всех ресурсов гипервизора), DRS пытается планировать миграции виртуальных машин с такого гипервизора.

  • Если после предыдущей миграции ВМ прошло менее live_migration_cooldown секунд, то она не включается в рекомендации.

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

  • Если расчетная нагрузка целевого гипервизора ниже установленного порога — создается рекомендация. Если эта нагрузка выше порога, но ниже разрешенного лимита (target_hypervisor_soft_limit) — рекомендация также создается. В ином случае продолжается поиск целевого гипервизора.

  • DRS поддерживает ограничение по зонам доступности и группам серверов. При наличии группы c отрицательным сходством (anti-affinity group) DRS не предлагает миграции, из-за которой ВМ из одной такой группы оказались бы на одном гипервизоре. Если же несколько ВМ принадлежат к одной группе (affinity group), эти ВМ остаются на одном гипервизоре. Кроме того, в группы серверов можно добавлять и удалять ВМ непосредственно при работе гипервизоров.

  • Если расчётная нагрузка изначального гипервизора становится ниже порога после генерации очередной рекомендации — оптимизация для данного гипервизора прекращается.

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

Механизм вычисления нагрузки гипервизоров (hard/soft limit)

Для вычисления нагрузки используются метрики Prometheus, а именно среднее значение нагрузки за последние N минут (где N — это значение METRIC_RESOLUTION в конфигурации) по CPU, RAM, сети для каждого гипервизора. Данные из Prometheus умножаются на заданный коэффициент, который указан в конфигурации (параметры METRIC_WEIGHT_CPU, METRIC_WEIGHT_MEM, network_weight). Полученные значения складываются.

С помощью параметра target_hypervisor_soft_limit в конфигурации можно повысить лимит прогнозируемой нагрузки на гипервизоры. Для этого в параметре выставляется достаточно высокое значение, чтобы гипервизор переехал, и разгрузка сработала. В результате будут рекомендованы новые миграции, которых не было бы в случае нагрузки по CPU выше назначенного лимита (move_syn_threshold).

Использование DRS