Балансировщик — это сервис, позволяющий автоматически выравнивать загрузку узлов кластера за счёт перераспределения виртуальных машин (ВМ) между узлами. Процедура распределения ВМ выполняется автоматически с периодичностью, заданной в настройках балансировщика.
Ограничения
Функция балансировщика доступна только:
- в версии VMmanager Infrastructure;
- в кластерах с типом виртуализации KVM;
- в кластерах с типом настройки сети "Коммутация" и IP-fabric.
Логика работы
Настройки балансировщика применяются на уровне кластера. Для разных кластеров могут быть заданы разные настройки балансировщика.
При включении балансировщика устанавливается периодичность, с которой он проверяет узлы на перегруженность. По умолчанию узел считается перегруженным, если загрузка его CPU или RAM выше 70%. При необходимости пороги загрузки CPU и RAM могут быть изменены через API-запрос.
По умолчанию балансировщик действует на все ВМ в кластере. Вы можете выбрать ВМ, к которым не должны применяться действия балансировщика.
Балансировщик переносит ВМ между узлами с помощью механизма живой миграции. Условия, при которых живая миграция не может быть выполнена, указаны в статье Миграция виртуальных машин. Дополнительно накладываются следующие ограничения:
- недоступна миграция между кластерами;
- недоступна миграция на узлы, находящиеся в режиме обслуживания;
- недоступна опция переназначения сетевых интерфейсов при их несовпадении.
Работа балансировщика состоит из итераций. В каждой итерации балансировщик:
-
Запрашивает у сервиса статистики информацию по средней загрузке CPU и RAM за установленный период проверки баланса. Например, если администратор установил периодичность проверки в 10 минут, балансировщик запросит данные за последние 10 минут.
При большом количестве узлов в кластере возможна ситуация, когда сервис статистики не успеет собрать данные со всех узлов за период проверки баланса. В этом случае балансировщик будет принимать решения на основе частичных данных. Список узлов, статистика с которых не учитывалась, записывается в лог сервиса. - Составляет список перегруженных узлов на основе данных статистики. Чем выше средняя загрузка CPU и RAM на узле, тем более перегруженным он считается. Если перегруженных узлов нет, перенос ВМ в текущей итерации не выполняется.
- Сортирует список в порядке от наиболее загруженного узла к наименее загруженному.
- Составляет список ВМ, которые можно перенести с первого узла в списке. Из кандидатов для переноса исключаются:
- выключенные ВМ;
- ВМ, для которых не применяются действия балансировщика;
- ВМ, к которым подключён ISO-образ;
- ВМ, для которых были созданы снимки;
- ВМ, которые были созданы или перемещены на узел в течение пяти последних итераций.
- Сортирует список в порядке от наименее загруженной ВМ к наиболее загруженной. Если ВМ для переноса не найдена, поиск повторяется на следующем узле в списке. Если подходящая ВМ не найдена ни на одном узле, перенос выполняться не будет.
- Выбирает первую ВМ в списке для переноса.
- Определяет узел, на который можно перенести ВМ. При выборе узла учитывается:
- возможность живой миграции ВМ;
- станет ли узел перегруженным после переноса ВМ.
- Выполняет миграцию ВМ на выбранный узел. Если подходящий узел не найден, для переноса выбирается следующая ВМ в списке. Для этой ВМ повторяется процедура выбора узла. Если ни для одной ВМ не найден подходящий узел, перенос выполняться не будет.
- Дожидается окончания миграции ВМ и записывает её результат в таблицу истории.
- Планирует запуск следующей итерации через установленный период проверки баланса.
Управление балансировщиком
Для управления балансировщиком в кластере перейдите в раздел Кластеры → выберите кластер → кнопка Параметры → раздел Балансировщик.
Интерфейс раздела
Включение и отключение
Чтобы включить балансировщик:
- Нажмите кнопку Включить балансировщик.
- Укажите Периодичность проверки баланса в минутах.
Кластер с включённым балансировщиком отображается в таблице кластеров со значком .
Чтобы отключить балансировщик в кластере, нажмите кнопку Отключить балансировщик.
Чтобы отключить балансировщик для определённой ВМ, перейдите в раздел Виртуальные машины → выберите ВМ → кнопка Параметры → раздел Балансировщик → переключатель Применять Балансировщик к данной VM. ВМ с отключённым балансировщиком отображаются в таблице ВМ со значком .
Изменение настроек
Чтобы изменить пороговые значения CPU и RAM, при превышении которых узел считается перегруженным:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Если на сервере не установлена утилита curl, установите её:
dnf install curl || apt install curl
-
Получите токен авторизации:
curl -k -X POST -H "accept: application/json" -H "Content-Type: application/json" 'https://example.com/api/auth/v4/public/token' -d '{"email": "admin_email", "password": "admin_pass"}'
Пояснения к командеВ ответ придёт сообщение вида:
Пример ответа в JSON{ "confirmed": true, "expires_at": null, "id": "6", "token": "4-e9726dd9-61d9-2940-add3-914851d2cb8a" }
Сохраните полученное значение параметра token — токен авторизации.
-
Выполните API-запрос:
curl -k -H "x-xsrf-token: <token>" -X POST "https://domain.com/vm/v3/cluster/<cluster_id>/internal_edit" -d '{"balancer_config": {"high_threshold_cpu": <cpu_value>, "high_threshold_mem": <ram_value>}}'
Пояснения к команде
Мониторинг
На вкладке Мониторинг отображаются линейки загрузки CPU и RAM на узлах кластера и индикатор сбалансированности. Чем ближе индикатор находится к центру линейки, тем лучше сбалансирован кластер по CPU или RAM.
Если индикатор находится:
- в левой части линейки — кластер скорее недозагружен по данному ресурсу;
- в правой части линейки — кластер скорее перегружен по данному ресурсу.
На величину отклонения индикатора от центра влияет количество перегруженных узлов кластера. Если нагрузка каждого узла кластера находится в пределах порога потребления, то величина отклонения будет минимальной.
Пример перегрузки кластера
Просмотр истории
На вкладке История отображаются действия балансировщика по переносу ВМ между узлами кластера.
Вкладка "История"
Лог-файлы
Действия балансировщика выполняет сервис balancer в контейнере balancer. Лог-файл сервиса — /var/log/balancer.log.
Для выявления проблем в работе балансировщика могут быть полезны логи связанных сервисов: