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). Для алгоритмаbalance_networkпорог определяется через соотношение сетевой нагрузки между наиболее и наименее загруженными гипервизорами: если фактическое соотношение (actual_ratio) превышает значение параметраratio_between_max_and_min_loaded_hypervisors, наиболее загруженный гипервизор нуждается в разгрузке. Если нагрузка гипервизора не меньше порога (например, 80% от всех ресурсов гипервизора), DRS пытается планировать миграции виртуальных машин с такого гипервизора.Если после предыдущей миграции ВМ прошло менее
live_migration_cooldownсекунд, то она не включается в рекомендации.При выборе целевого гипервизора для виртуальной машины учитываются предполагаемая нагрузка на целевом гипервизоре после миграции и свободные ресурсы гипервизора. Динамическая балансировка виртуальных машин в рамках определённой группы гипервизоров учитывает загрузку CPU гипервизора, памяти гипервизора и сетевых интерфейсов.
Если расчётная нагрузка целевого гипервизора ниже установленного порога — создаётся рекомендация. Если эта нагрузка выше порога, но ниже разрешённого лимита (
target_hypervisor_soft_limit) — рекомендация также создаётся. В ином случае продолжается поиск целевого гипервизора.DRS поддерживает ограничение по зонам доступности и группам серверов. При наличии группы c отрицательным сходством (anti-affinity group) DRS не предлагает миграции, из-за которой ВМ из одной такой группы оказались бы на одном гипервизоре. Если же несколько ВМ принадлежат к одной группе (affinity group), эти ВМ остаются на одном гипервизоре. Кроме того, в группы серверов можно добавлять и удалять ВМ непосредственно при работе гипервизоров.
Если расчётная нагрузка изначального гипервизора становится ниже порога после генерации очередной рекомендации — оптимизация для данного гипервизора прекращается.
Результат выполнения оптимизации — список рекомендаций по миграции виртуальных машин. Если ни один гипервизор не соответствует критериям, заданным в конфигурации, рекомендации не будут созданы.
Фильтр AggregateMultiTenancyIsolation¶
Фильтр AggregateMultiTenancyIsolation обеспечивает изоляцию виртуальных машин по проектам (тенантам) при миграции. При использовании этого фильтра DRS выполняет миграцию ВМ только на те гипервизоры, у которых в агрегатах в поле filter_tenant_id указан идентификатор проекта (project_id) мигрирующей виртуальной машины.
Гипервизор может входить в агрегаты с несколькими значениями filter_tenant_id или не иметь этого параметра вовсе. Если filter_tenant_id не указан, такой гипервизор считается общедоступным и может принимать виртуальные машины из любых проектов.
Фильтр применяется к списку гипервизоров, уже прошедших фильтрацию по зоне доступности, и определяет допустимые целевые узлы для миграции конкретной ВМ.
Включение фильтра¶
Для включения фильтра AggregateMultiTenancyIsolation в DRS выполните следующие действия:
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Отредактируйте файл конфигурации
config/drs.ini, добавив в параметрenabled_nova_filtersзначениеAggregateMultiTenancyIsolationчерез запятую:enabled_nova_filters = AggregateMultiTenancyIsolation,AvailabilityZoneFilter,ComputeFilter,...
Сохраните изменения.
В левой панели меню выберите раздел .
В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t drs.Запустите пайплайн, нажав кнопку New pipeline.
Подробнее о настройке DRS см. в разделе Настройка и управление DRS.
Механизм вычисления нагрузки гипервизоров (hard/soft limit)¶
Для вычисления нагрузки используются метрики Prometheus, а именно среднее значение нагрузки за последние N минут (где N — это значение metric_time_duration_in_minutes в конфигурации) по CPU, RAM, сети для каждого гипервизора. Данные из Prometheus умножаются на заданный коэффициент, который указан в конфигурации (параметры cpu_weight, ram_weight, network_weight). Полученные значения складываются.
С помощью параметра target_hypervisor_soft_limit в конфигурации можно повысить лимит прогнозируемой нагрузки на гипервизоры. Для этого в параметре выставляется достаточно высокое значение, чтобы гипервизор переехал, и разгрузка сработала. В результате будут рекомендованы новые миграции, которых не было бы в случае нагрузки по CPU выше назначенного лимита (move_syn_threshold).
Для алгоритма balance_network механизм вычисления нагрузки отличается от других алгоритмов. DRS использует сетевые метрики гипервизоров за последние N минут (где N — значение metric_time_duration_in_minutes, по умолчанию 5 минут). За одну итерацию алгоритм берёт только максимально и минимально нагруженный гипервизоры и вычисляет их соотношение по формуле: нагрузка максимально загруженного гипервизора делится на нагрузку минимально загруженного (actual_ratio). Если значение ratio_between_max_and_min_loaded_hypervisors (по умолчанию 2.0) меньше actual_ratio, наиболее загруженный гипервизор нуждается в разгрузке, и создаётся одна рекомендация по миграции ВМ с него на наименее загруженный гипервизор. Алгоритм повторяется до тех пор, пока ratio_between_max_and_min_loaded_hypervisors не станет больше actual_ratio.