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

Заданные параметры конфигурации:

METRIC_WEIGHT_CPU = 0.5
METRIC_WEIGHT_MEM = 0.5
METRIC_RESOLUTION = 5
MOVE_SYN_THRESHOLD = 80
MOVE_SYN_DIFF_AFTER = 10

Метрики гипервизоров (числа показывают процентное использование ресурсов определенного типа гипервизора):

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

Заданные параметры конфигурации:

cpu_weight = 1.0
ram_weight = 0.0
network_weight = 0.0
metrics_time_duration_in_minutes = 5
allowed_load_above_average = 0

Метрики гипервизоров (числа показывают процентное использование ресурсов определенного типа гипервизора):

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

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

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