Переподписка — способ разместить на сервере больше виртуальных машин, чем позволяет простая арифметика. Вопрос «как у вас задаётся overcommit» звучит почти на каждой встрече с заказчиками. Разбираем, что это такое, где переподписка задаётся в Inscale, как на неё влияет режим балансировщика и как выбирать значения.

Что такое переподписка ресурсов

Переподписка (overcommit) — это ситуация, когда виртуальным машинам суммарно выделено больше ресурсов, чем физически есть на сервере. Она работает потому, что машины редко нагружены одновременно: пока одна простаивает, её процессорное время и память может использовать другая.

Переподписка полезна, когда пики нагрузки разных машин не совпадают. Если все машины загружены одновременно, ресурсов на всех не хватит — и чем выше коэффициент, тем заметнее это для пользователей. Поэтому главный вопрос не «какой коэффициент поставить», а «каким машинам можно уступать ресурсы, а каким нельзя».

Общий коэффициент и чего он не говорит

Обычно переподписку описывают одним числом на сервер или кластер: например, «процессор — 4 к 1». Такое число удобно для планирования: по нему считают, сколько машин поместится на сервер. Но оно ничего не говорит о том, какая машина уступит ресурсы, когда их не хватит. На одном сервере могут работать второстепенный служебный сервис, которому не страшно подождать, и рабочие места сотрудников, для которых задержка заметна сразу. Общее число заставляет выбирать: либо осторожное значение для всех и недогруженные серверы, либо высокое — и риск для важных машин.

Как это сделано в Inscale: гарантированные и максимальные ресурсы

В Inscale общего коэффициента на сервер или кластер нет. Для каждой виртуальной машины указываются два значения — отдельно для процессора и для памяти:

  • Гарантированные ресурсы — то, что балансировщик нагрузки платформы закрепляет за машиной. На них не претендуют другие машины, и они остаются за ней при любой нагрузке на сервер. Платформа не даст создать машину, если гарантированных ресурсов на сервере уже не хватает.
  • Максимальные ресурсы — потолок, до которого машина может вырасти, если в общем пуле есть свободные ресурсы. Машина берёт их на время пиковой операции и возвращает обратно.

Например, некритичному сервису можно гарантировать одно ядро и разрешить рост до десяти: гостевая система видит десять ядер и использует их, когда сервер свободен, а под нагрузкой за машиной остаётся её гарантированное ядро.

Коэффициент переподписки в такой схеме — это отношение максимальных ресурсов к гарантированным, и у каждой машины он свой. Изменения в пределах заранее заданных максимумов применяются без остановки машины, если гостевая система поддерживает горячее добавление ресурсов.

Как платформа ограничивает ресурсы внутри сервера — в статье Управление ресурсами виртуальных машин через cgroups.

Атмосфера отраслевого ИТ-мероприятия

Режим балансировщика: насколько переподписка используется

Значения у машины задают, сколько ресурсов она может получить. Насколько переподписка используется на деле, зависит ещё от режима балансировщика нагрузки, который настраивается в кластере:

  • Максимальная производительность — машины распределяются по большему числу серверов, у каждой остаётся больше свободных ресурсов, переподписка используется меньше.
  • Максимальная плотность — машины размещаются плотнее, серверы загружаются по максимуму; так экономят на электропитании и охлаждении, когда нагрузка невелика.

У профилей балансировки есть расписание. Например, днём кластер VDI работает в режиме производительности, чтобы пользователям было комфортно, а ночью переходит в режим плотности, когда работают немногие сотрудники и сервисы.

Как выбирать значения

Общего «правильного» коэффициента нет — реальную плотность подбирают под рабочие сценарии. Практические ориентиры, которые команда Inscale называет на встречах:

  • второстепенным сервисам, которые могут подождать, допустима высокая переподписка — в несколько раз;
  • важным пользовательским машинам потолок лучше держать близко к гарантии: больше двукратного превышения ставить не стоит.

Три правила, которые стоит соблюдать при любом значении:

  1. Проверять на реальной нагрузке. Эффект оценивают по времени входа пользователей, отклику приложений, памяти и задержкам хранилища, а не по загрузке процессора.
  2. Оставлять резерв под отказ сервера. При уплотнении нужно сохранить ресурсы, на которых перезапустятся машины отказавшего узла.
  3. Повторять тест с отключённым сервером. Если при потере одного узла пользователи укладываются в согласованные требования по отклику — значения выбраны верно.

Переподписка диска: политика на золотой реплике

В VDI есть второй вид переподписки — по диску. Рабочие столы в пуле создаются из золотой реплики, и место на хранилище расходуется по мере того, как диски машин растут. Сколько им разрешено вырасти — это и есть политика переподписки диска.

В Inscale эта политика задаётся не на хранилище, а на золотой реплике. Причина — в типичной ситуации: заказчику выделено одно хранилище на несколько терабайт, и на нём живут очень разные машины. Массовые пулы работают на перемещаемых профилях — данные пользователей лежат отдельно, диски самих машин почти не растут, и ограничение им не нужно. Рядом — машины системных администраторов, которым без жёсткого лимита хватит времени занять всё место. Одна политика на всё хранилище не подходит ни тем, ни другим; политика на реплике позволяет задать каждому пулу своё правило.

Итог

Переподписка — это не один коэффициент, а решение для каждой группы машин. В Inscale по процессору и памяти она задаётся на уровне виртуальной машины через гарантированные и максимальные ресурсы, а по диску в VDI — на уровне золотой реплики. Насколько она используется, определяет режим балансировщика в кластере. Значения подбирают на реальной нагрузке и с запасом под отказ сервера.

Как это выглядит в интерфейсе — в документации Inscale. Чтобы посмотреть платформу на своих задачах — оставьте заявку.