Dynamic Resource Scheduler (DRS) — Планировщик распределения ресурсов
DRS представляет собой автоматическую оптимизацию нагрузки гипервизоров внутри облака для поддержания стабильной и эффективной работы.
Основные функции
Автоматическое перемещение виртуальных машин с перегруженных гипервизоров на менее нагруженные, что обеспечивает более равномерное использование ресурсов;
Равномерное распределение ЦПУ, ОЗУ, сетевой нагрузки между гипервизорами путем миграции виртуальных машин;
Создание рекомендаций для миграций виртуальных машин в процессе выполнения оптимизации, которая запускается в соответствии с заданием по расписанию;
Возможность исключить отдельные виртуальные машины или проекты, в том числе по ряду параметров;
При балансировке нагрузки учитывается логика фильтров Nova, а также распределение по зонам доступности (availability zones) и группам серверов (server group);
Возможность одновременно выполнять несколько заданий с разными периодами запуска, разными конфигурациями и автоматическим запуском миграций;
Поддержка отправки уведомлений о состоянии миграций в Prometheus и Zabbix;
Возможность использовать авторизацию Keystone;
Работа в режиме High Availability с синхронизацией нескольких виртуальных машин (ВМ).
Краткое описание процесса
Ключевые термины:
Конфигурация (config) — набор параметров для балансировки. Основным параметром является алгоритм. В зависимости от алгоритма определяется набор остальных параметров.
Задание (job) — использует определенную конфигурацию и периодически запускает оптимизации для балансировки нагрузки (в рамках указанной зоны доступности (availability_zone) или на всем регионе).
Оптимизация (optimization) — один цикл работы задания.
Рекомендация (recommendation) — параметры для миграции ВМ между гипервизорами. Рекомендации генерируются в процессе выполнения оптимизации. Рекомендация содержит идентификатор виртуальной машины, данные об исходном и целевом гипервизорах, в том числе об их текущей и предполагаемой нагрузке. В зависимости от настроек задания, рекомендации могут применяться вручную или автоматически.
Миграция (migration) — живая миграция виртуальной машины, которая была запущена для применения определенной рекомендации.
Основные алгоритмы:
help_overloaded_hypervisors
— помогает разгрузить перегруженные гипервизоры путем переноса с него виртуальных машин на менее нагруженные гипервизоры.equal_hypervisors_load
— равномерно распределяет нагрузку между гипервизорами путем распределения виртуальных машин на гипервизорах.balance_network
— распределяет нагрузку между гипервизорами путем сбалансированного распределения их сетевой нагрузки.
Порядок работы:
Конфигурация задает параметры для оптимизации.
DRS определяет набор гипервизоров для переноса с них виртуальных машин в случае превышения определенного порога нагрузки (
hard limit
). Для алгоритмаhelp_overloaded_hypervisors
этот порог указывается пользователем в конфигурации. Для алгоритмаequal_hypervisors_load
порог вычисляется как сумма среднего значения текущей нагрузки всех гипервизоров и разрешенного превышения средней нагрузки (allowed_load_above_average
). Если нагрузка гипервизора не меньше порога (например, 80% от всех ресурсов гипервизора), DRS пытается планировать миграции виртуальных машин с такого гипервизора.При выборе целевого гипервизора для виртуальной машины учитываются предполагаемая нагрузка на целевом гипервизоре после миграции и свободные ресурсы гипервизора. Динамическая балансировка виртуальных машин в рамках определённой группы гипервизоров учитывает утилизацию ЦПУ гипервизора, памяти гипервизора и сетевых интерфейсов.
Если расчетная нагрузка целевого гипервизора ниже установленного порога — создается рекомендация. Если эта нагрузка выше порога, но ниже разрешенного лимита (
target_hypervisor_soft_limit
) — рекомендация также создается. В ином случае продолжается поиск целевого гипервизора.DRS поддерживает ограничение по зонам доступности и группам серверов. При наличии группы c отрицательным сходством (anti-affinity group) DRS не предлагает миграции, из-за которой ВМ из одной такой группы оказались бы на одном гипервизоре. Если же несколько ВМ принадлежат к одной группе (affinity group), эти ВМ остаются на одном гипервизоре. Кроме того, в группы серверов можно добавлять и удалять ВМ непосредственно при работе гипервизоров.
Если расчетная нагрузка изначального гипервизора становится ниже порога после генерации очередной рекомендации — оптимизация для данного гипервизора прекращается.
Результат выполнения оптимизации — список рекомендаций по миграции виртуальных машин. Если ни один гипервизор не соответствует критериям, заданным в конфигурации, рекомендации не будут созданы.
Работа планировщика
Планировщик контролирует добавление, удаление, изменение заданий в расписании и их запуск. Одновременное выполнение оптимизаций не допускается.
Механизм вычисления нагрузки гипервизоров (hard/soft limit)
Для вычисления нагрузки используются метрики prometheus, а именно среднее значение нагрузки, за последние N минут (где N — это значение METRIC_RESOLUTION
/metrics_time_duration_in_minutes
в конфигурации) по ЦПУ, ОЗУ, сети для каждого гипервизора. Данные из prometheus умножаются на заданный коэффициент, который указан в конфигурации (параметры METRIC_WEIGHT_CPU
/cpu_weight
, METRIC_WEIGHT_MEM
/ ram_weight
, network_weight
). Полученные значения складываются.
Как результат, мы получаем синтетическое значение нагрузки для каждого гипервизора. В сумме они должны равняться единице. Как результат, мы получаем синтетическое значение нагрузки для каждого гипервизора. Рекомендаций по конкретному значению нагрузки нет, поскольку это нужно подбирать под каждый конкретный ответ для нового алгоритма балансировки.
С помощью параметра target_hypervisor_soft_limit
в конфигурации можно повысить лимит нагрузки на гипервизоры. Для этого в параметре выставляется достаточно высокое значение, чтобы гипервизор переехал, и разгрузка сработала. В результате будут рекомендованы новые миграции, которых не было бы в случае нагрузки по ЦПУ выше назначенного лимита (move_syn_threshold
).
Пример для алгоритма help_overloaded_hypervisors
Заданные параметры конфигурации:
Hypervisor |
RAM |
CPU |
---|---|---|
HV1 |
100 |
60 |
HV2 |
100 |
80 |
HV3 |
70 |
30 |
HV4 |
30 |
50 |
Вычисленная отсортированная синтетическая нагрузка гипервизоров:
Hypervisor |
Score |
---|---|
HV2 |
90 |
HV1 |
80 |
HV3 |
50 |
HV4 |
40 |
Нагрузка на гипервизорах 1 и 2 не меньше заданного порога, и гипервизоры считаются перегруженными. После проведения оптимизации нагрузка на гипервизорах:
Hypervisor |
Score |
---|---|
HV1 |
70 |
HV2 |
70 |
HV3 |
60 |
HV4 |
60 |
Пример для алгоритма equal_hypervisors_load
Заданные параметры конфигурации:
Hypervisor |
CPU |
---|---|
HV1 |
100 |
HV2 |
60 |
HV3 |
80 |
HV4 |
50 |
Вычисленная отсортированная синтетическая нагрузка гипервизоров:
Hypervisor |
Score |
---|---|
HV1 |
100 |
HV3 |
80 |
HV2 |
60 |
HV4 |
40 |
Средняя нагрузка составляет 70 ((100 + 80 + 60 + 40) / 4). Гипервизор нуждается в разгрузке, если его нагрузка не меньше
суммы средней нагрузки и allowed_load_above_average
. В данном случае порог составляет 70 (70 + 0). Гипервизоры 1 и 2
будут разгружаться.
После проведения оптимизации нагрузка на гипервизорах:
Hypervisor |
Score |
---|---|
HV1 |
70 |
HV2 |
70 |
HV3 |
70 |
HV4 |
70 |
API
Сервис поддерживает:
Создание, просмотр, редактирование, удаление конфигураций (config) и заданий (job);
Применение рекомендаций в ручном режиме (если в задаче выключено автоматическое применение рекомендаций);
Получение информации об оптимизациях, рекомендациях и миграциях.