Экстренное масштабирование VMware Horizon: с 50 до 200 десктопов за выходные
Добавляем Connection Server, настраиваем Instant Clone пулы, упираемся в лицензии и ресурсы хоста: реальный кейс масштабирования VDI-фермы под COVID-нагрузку.
VMware Horizon и Citrix Virtual Apps взлетают по спросу: компании экстренно лицензируют VDI для сотрудников на личных устройствах
В пятницу вечером клиент написал в чат: «Руководство говорит, надо перевести ещё 150 человек на VDI к понедельнику. Сейчас у нас 50 десктопов работают нормально, нужно 200». Мы пообещали разобраться к утру воскресенья. Это был оптимизм.
У клиента стоит VMware Horizon 7 на трёх ESXi-хостах с vCenter. Инфраструктура поднималась год назад под небольшой пилот - финансовый отдел, человек пятьдесят. Работало стабильно, никто особо не трогал. И вот теперь карантин, BYOD, личные ноутбуки - и задача на порядок увеличить ёмкость пула за уикенд.
Что было и чего не хватало
Начали с аудита того, что есть. Один Connection Server, один пул Full Clone десктопов, лицензии Horizon Standard на 50 конкурентных пользователей. Full Clone - это когда каждый виртуальный десктоп это полная копия мастер-образа. Быстро разворачивать новые машины так не получится: провизионинг одного Full Clone занимает минут 15-20, а у нас задача поднять 150 новых за разумное время.
Первые три проблемы стали видны сразу:
- Лицензии. 50 конкурентных пользователей - это жёсткий лимит. Horizon 7 Standard при исчерпании лицензионного пула начинает отказывать новым подключениям. Нужно либо докупать, либо активировать временный лицензионный grace-период (в Horizon он есть - 30 дней для evaluation, но это не производственное решение).
- Один Connection Server. Для масштабирования и отказоустойчивости нужна реплика. VMware рекомендует минимум два Connection Server в кластере - они работают в режиме active-active, клиент подключается к любому, состояние синхронизируется между ними через LDAP-репликацию.
- Вычислительные ресурсы. Три ESXi-хоста с текущими Full Clone десктопами уже загружены примерно на 60-65% по RAM. Четыре раза по 50 там физически не помещаются.
Connection Server номер два
Начали с добавления второго Connection Server - это относительно быстро и меняет архитектуру в хорошую сторону независимо от решения по лицензиям и ресурсам.
Установка стандартная: Windows Server 2016 VM, установщик VMware Horizon Connection Server в режиме «Replica» (не Standalone - это важно, иначе поднимется отдельный независимый экземпляр со своей базой). При установке указываешь адрес существующего Connection Server, реплика подхватывает конфигурацию через LDAP. Процесс занял около часа включая настройку балансировщика - клиент использует F5 LTM, там добавили второй член в pool с health-monitor по порту 443.
Один нюанс, который мы поймали: SSL-сертификат. У первого Connection Server стоял корпоративный сертификат, у нового - сначала самоподписанный. Horizon Clients ругаются на несоответствие. Пришлось сразу выпустить сертификат с тем же SAN-именем и установить на реплику. Полчаса потеряли на это, но лучше сразу.
Instant Clone вместо Full Clone
Параллельно начали переход на Instant Clone пулы. Instant Clone - технология VMware, при которой новый десктоп создаётся как «заморозка» родительской VM с последующим fork-ом. Провизионинг занимает секунды, не минуты, что критично когда нужно быстро поднять много машин.
Создали новый Automated Desktop Pool с типом Instant Clone. Мастер-образ взяли тот же, что был для Full Clone пула - Windows 10 с корпоративным ПО. Настройки пула:
- Provisioning. Минимальный размер - 30 машин (всегда готовы), максимальный - 80 (потолок по ресурсам одного пула).
- Headroom. 5 машин в состоянии Available поверх текущих подключённых - чтобы пользователи не ждали провизионинга при пиковой нагрузке.
- Floating assignment. Пользователи не привязаны к конкретной VM - получают любую свободную. Для клиентов, которым важна персистентность данных, есть App Volumes, но это отдельная история.
Провизионинг 80 машин с Instant Clone занял около 8 минут. Для сравнения - 50 Full Clone в своё время разворачивались почти час.
Лицензии: стена
Вот тут приятная техническая часть закончилась. Под 200 пользователей нужно было докупить лицензии Horizon. Связались с партнёром VMware - постоянные лицензии есть, но оформление и активация через My VMware занимает рабочие дни, не часы. Выходные не в счёт.
VMware Horizon поддерживает grace-период при нехватке лицензий - Connection Server выдаёт предупреждение в консоли, но временно разрешает подключения сверх лицензионного лимита. Это не официальный механизм для production, но в кризисной ситуации - рабочий вариант на несколько дней пока оформляется постоянная лицензия. Зафиксировали в тикете, клиент подтвердил понимание ситуации письменно.
Вычислительные ресурсы: упёрлись в железо
Третья проблема оказалась твёрдой. RAM на трёх хостах, считая Instant Clone overhead и balloon memory, не тянет 200 одновременных десктопов с Windows 10. Виртуальные машины для Instant Clone легче Full Clone, но не в разы.
Клиент поднял на выходных четвёртый хост из резерва - он был куплен для расширения кластера, но стоял нераспакованным. Добавили в vCenter, подключили к тому же vDS, включили DRS. Horizon видит ресурсный пул через vCenter, так что новые Instant Clone машины начали размещаться в том числе на четвёртом хосте автоматически.
Итог выходных
К воскресному вечеру: два Connection Server за балансировщиком, два пула (старый Full Clone для тех кто уже работал, новый Instant Clone для новых пользователей), четыре хоста в кластере, 170 машин в пулах. До 200 не дотянули - не хватило RAM даже с четвёртым хостом под полную нагрузку, остановились на 170 как на рабочем максимуме.
Лицензионный вопрос пока висит в grace-режиме, постоянные лицензии оформляются через партнёра - ждём подтверждения активации.
В managed-сопровождении таких «экстренных выходных» за последние две недели у нас уже три. Инфраструктура, которая проектировалась под нормальный режим работы, сейчас проходит стресс-тест, к которому никто не готовился. Хорошо хоть Instant Clone придумали заранее.