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).