Привет, Хабр!

Это — третья часть «Внедрения VMware Horizon глазами инженера». В этот раз разберёмся с сетевой связностью, из чего вообще состоит Horizon и как именовать весь этот «зоопарк».

Часть 1.

Часть 2.

Сетевое оборудование

В прошлой статье я обещал слегка окунуться в мир сетевого оборудования.

Закрыть тему vSAN, не разобравшись со схемой сети, невозможно. Предполагается, что читатель уже знаком с базовыми принципами сетевой модели ESXi/vSphere — иначе только этой теме пришлось бы посвящать отдельный цикл статей.

Существует множество подходов к построению сети для кластеров VDI. Мы рассмотрим один из практических вариантов — тот, который используем сами в ПИК — и на его основе набросаем типовую схему подключения ESXi к коммутаторам. Нам потребуется как минимум три отдельных сети. Две из них (для ВМ и vSAN) должны быть высокоскоростными — 10, а лучше 25 гигабит.

Сеть IPMI

Для управления серверами на уровне железа используется отдельная сеть управления, куда подключаются интерфейсы IPMI/iDRAC/iLO. Как правило, она уже существует в инфраструктуре и подключается обычной витой парой.

На логическом уровне эта сеть никак не участвует в работе ESXi, поскольку находится за пределами операционной системы. Поэтому подробно останавливаться на ней нет смысла.

Сеть ВМ и хостов (Mgmt + VM Network)

С помощью этой сети осуществляется управление серверами (например, коммуникация с vCenter), и здесь проходит трафик виртуальных машин. Через неё осуществляется выход в интернет. На физическом уровне это два аплинка из разных сетевых адаптеров в два независимых коммутатора, подключённых к сети предприятия.

Логический уровень этой сети подразумевает наличие как минимум двух виртуальных портгрупп: одна — для самих серверов, вторая — для виртуальных машин. Хорошей практикой принято считать разделение этих сетей по VLAN. Даже если VLAN по каким-то причинам не используются, экономить на портгруппах не стоит: логическое разделение упрощает эксплуатацию и диагностику.

Сеть vSAN

Эта сеть выполняет одну задачу — обеспечить максимально быструю и стабильную коммуникацию между узлами кластера.

На физическом уровне — то же самое, что и сеть ВМ/хостов. С той разницей, что здесь связь с сетью предприятия не обязательна. В целях экономии допустимо использовать отдельные порты на тех же коммутаторах, что и для сети ВМ/хостов. Главное здесь — обеспечить единый высокоскоростной домен коммутации для всей сети vSAN, чтобы исключить узкие места на пути трафика. На практике это в большинстве случаев означает подключение всех серверов к одному стеку или паре коммутаторов. Разнести узлы по разным стекам возможно, но межстековый линк становится потенциальной точкой отказа и легко превращается в «бутылочное горлышко». 

На логическом уровне для сети vSAN потребуется по отдельному VMK-адаптеру на хост. Также для них крайне рекомендуется отдельный VLAN.

vMotion / Provisioning

Ещё один VMK-адаптер потребуется для трафика vMotion/Provisioning. Разместить его можно как в сети vSAN, так и в сети ВМ/хостов в зависимости от ваших предпочтений.

Схема сети

Рис. 1. Пунктиром обозначены логические сущности, сплошными линиями — физические.
Рис. 1. Пунктиром обозначены логические сущности, сплошными линиями — физические.

Такая схема подключения обеспечивает отказоустойчивость: сбой любого сетевого адаптера или коммутатора не приводит к потере связности. Трафик vSAN/vMotion/Provisioning и VM/Mgmt разделяется на физическом уровне.

LACP или не LACP

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

Наиболее распространённый способ — протокол LACP. Он позволяет динамически формировать агрегированный канал и быстро исключать отказавшие линки.

Однако LACP несовместим с vSAN over RDMA: RDMA-трафик требует прямого соответствия между сетевым интерфейсом и физическим линком, тогда как агрегация скрывает эту связь за логическим интерфейсом. Для RDMA это — непреодолимое препятствие.

Альтернативный вариант — отказ от агрегации на стороне коммутатора и балансировка средствами гипервизора. В такой конфигурации использование RDMA возможно, правда, только с двумя стратегиями балансировки: Route based on originating virtual port и Route based on source MAC hash. Отработка отказа в таком случае осуществляется медленнее, чем с LACP.

И это не единственная сложность, связанная с RDMA. Для работы этой технологии требуются коммутаторы с её поддержкой, а также опытный специалист, способный корректно настроить lossless-сеть и QoS-механизмы. Без этого RDMA превращается в источник трудно уловимых проблем.

В итоге придётся определиться, хотите вы использовать RDMA, позволяющий сократить задержки на уровне сети и повысить скорость работы vSAN, или же воспользоваться надёжным и проверенным механизмом LACP. В наших кластерах мы сознательно отказались от RDMA в пользу более простой и устойчивой конфигурации.

Альтернативы

Описанная схема — лишь один из рабочих вариантов. Возможны вариации, где все четыре порта сетевых плат объединены в один большой канал. Или же где портов только два, а для vSAN используются два VMK-адаптера на отдельных, неагрегированных аплинках, полный air-gap и тому подобное. Все они жизнеспособны, но в рамки этой статьи просто не поместятся. 

Нейминг и его важность

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

Об этом необходимо подумать заранее, поскольку, например, Horizon при создании пулов ориентируется в структуре vSphere исключительно по именам объектов. Это значит, что переименовать дата-центр или кластер на «живом» развёртывании стандартными средствами, без удаления пулов, будет невозможно. Так, мы живём восемь лет с дата-центром, имя которого не соответствует правилам, принятым уже после его создания. Решили, что лучше так, чем устраивать масштабные технические работы ради его переименования.

Я могу выделить три подхода к неймингу, с которыми сталкивался на практике.

Подход стихийный

Используется неопытными администраторами повсеместно. Суть подхода — в его отсутствии. Объекты получают имя в момент создания: то, которое первым пришло в голову. Компоненты инфраструктуры начинают называться буквами греческого алфавита, именами античных богов, кличками домашних животных и чем угодно ещё. 

Подход безопасный

Распространён в компаниях, где ИБ направляет админов в «правильную» сторону, и там, где ИТ живёт в атмосфере регламентов и таблиц. Порядка здесь больше: есть реестр сущностей, всё сопоставлено с функциями. Но сами имена при этом неотличимы друг от друга. В лучшем случае нейминг может намекать на роль: db82, app212, dtc4. В худшем это будут цифровые индексы или бессмысленные комбинации символов. Такой подход немного усложняет жизнь потенциальному злоумышленнику, сканирующему сеть. Однако он одновременно усложняет жизнь администраторам.

Подход осмысленный

Этого подхода придерживаюсь я сам. Для каждого типа объектов на всех уровнях: кластер, хост, виртуальная машина, распределённый ресурс — заранее задаются шаблоны нейминга. При этом имена выбираются в рамках шаблона так, чтобы по ним с первого взгляда была понятна функция объекта. Шаблоны, в свою очередь, составляются таким образом, чтобы имена объектов всегда отражали наиболее важную информацию о его свойствах.

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

Пример правил нейминга

Примеры ниже основаны на субъективном опыте автора, носят рекомендательный характер и не являются исчерпывающими.

  • Дата-центр: dtc-sl.
    dtc — дата-центр, sl — имя дата-центра.

  • Кластер: cls-sl-vdi01.
    cls — кластер, sl — имя дата-центра, vdi — имя системы/имя кластера.

  • Хост виртуализации: sv-vdi-esxi018.
    sv — физический сервер, vdi — имя системы, esxi — функция, 018 — сквозная нумерация по всем хостам vdi.

  • Серверная ВМ: vm-vdi-view01.
    vm — виртуальная машина, vdi — имя системы, view — функция. 

  • Балансировщик нагрузки: vm-vdi-view-lb01.
    vm — виртуальная машина, vdi — имя системы, view-lb — функция. 

  • Пул VDI: pool-sl-vdi01-8-dev.
    pool — пул, sl-vdi01 — имя дата-центра и кластера, 8 — номер пула, dev — функция.

  • ВМ VDI: vd-sl-vdi01-80001. vd — ВМ VDI, sl-vdi01 — имя кластера, 8 — номер пула, 0001 — номер ВМ.

  • dSwitch: ds-sl01-LAN.
    ds — dswitch, sl01 — имя дата-центра, LAN — функция.

  • Портгруппа на dSwitch:
    VL1017-Desktops — номер VLAN + функция.

Вопросы и ответы о правилах нейминга

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

— Зачем в имени ВМ VDI указывать кластер?
— Для корректной работы App Volumes в имени ВМ требуется уникальный идентификатор, указывающий на кластер. Имя кластера — лучший кандидат на эту роль.

— Зачем везде номера, если у меня один кластер или один пул?
— Потому что невозможно предугадать, в какой момент появится второй.

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

— Почему в имени хоста не упоминается кластер? Почему у хостов сквозная нумерация?
— Потому что хосты могут перемещаться между кластерами. Коллизии имён хостов между разными кластерами разрешаются сквозной нумерацией.

— Почему в таком случае упоминаются система и функция? Ведь они тоже могут меняться.
— Потому что при смене функции сервера его зачастую переустанавливают, и несложно сменить имя в этот момент.

— Почему шаблон имени пула или портгруппы не похож на остальные шаблоны?
— Шаблоны для разных типов объектов могут различаться, и составлять их нужно исходя из их функций.

Компоненты Horizon

Теперь, когда мы обсудили нейминг и необходимость его строго соблюдать, попробуем собрать воедино схему развёртывания — опишем полный список компонентов, которые нам понадобятся. 

В нашем примере, чтобы избежать путаницы, разместим все компоненты VDI в одном кластере, на единственном датасторе vSAN. Это допустимо, но на практике лучше всего размещать серверные ВМ, в особенности vCenter, в других кластерах или в частном облаке, чтобы не потерять управление системой в случае неполадок на vSAN.

Здесь и далее будем рассчитывать на пул из 1000 ВРМ (виртуальных рабочих мест), для других объёмов ресурсы серверных ВМ и их количество могут быть другими.

vSphere

  • Дата-центр — как минимум один. Здесь мы будем размещать наши кластеры (в этом примере один кластер) и сетевую логику.

  • Кластер — для размещения ВРМ.

  • Датастор vSAN в кластере. Все данные ВРМ и серверных ВМ будут храниться на нём.

  • Политика хранения данных vSAN.

  • Ресурс-пул — как минимум два. Мы будем использовать ресурс-пулы не по их прямому назначению, а для поддержания порядка в админпанели vSphere.

  • Фолдеры для ВМ — раздельные для инфраструктурных и пользовательских машин.

  • dSwitch — как минимум два. dSwitch LAN — для трафика хостов, серверных ВМ и ВРМ; dSwitch SAN — для трафика vSAN, vMotion, Provisioning.

  • Хосты — по ранее составленному плану.

Horizon

  • View Connection Server — как минимум два. Это основной компонент Horizon. Отсюда производится управление всеми ВРМ, их развёртывание и удаление. Тут же находится админпанель системы.

  • БД PostgreSQL — для хранения событий View (допускается MS SQL). Позволяет отслеживать работу системы из админпанели.

  • Балансировщик нагрузки View — как минимум два. Обеспечивает отказоустойчивость View Connection Server.

  • Syslog-сервер — для форварда логов View (опционально).

  • Unified Access Gateway — как минимум три. UAG является, по сути, реверс-прокси, специально адаптированным под работу с протоколами Horizon. Он обеспечивает возможность подключения пользователей к ВРМ через интернет.

  • Балансировщик нагрузки UAG — как минимум два. Обеспечивает отказоустойчивость UAG.

AppVolumes

  • AppVolumes Manager — как минимум два, для обеспечения отказоустойчивости. Менеджеры управляют системой доставки приложений и пользовательских данных. Там же находится админпанель AppVolumes.

  • БД MS SQL — для хранения данных менеджеров. Желательно, чтобы БД размещалась в отказоустойчивом кластере, но в нашем примере это будет просто отдельная ВМ.

  • Балансировщик нагрузки — как минимум два. Обеспечивает отказоустойчивость менеджеров.

Внешние сервисы

  • Домен Active Directory — для аутентификации пользователей и регистрации ВРМ.

  • Центр сертификации — потребуются сертификаты для компонентов VDI.

  • Сетевые сервисы — DNS, DHCP, NTP, KMS.

Пример таблицы серверных ВМ:

Компонент

Имя ВМ

Доп. имя

Ресурсы (500-1000)

ОС

Интернет IP

VRRP IP

vCenter

vm-vdi-vc01

vdi-vc.domain.loc

Medium

Appliance

Horizon View 1

vm-vdi-view01

6 ЦП / 16 ОЗУ

Windows

Horizon View 2

vm-vdi-view02

6 ЦП / 16 ОЗУ

Windows

Horizon View Event DB

vm-vdi-view-edb01

2 ЦП / 4 ОЗУ

Linux

Horizon View LB 1

vm-vdi-view-lb01

view.domain.loc

2 ЦП / 4 ОЗУ

Linux

10.10.10.10

Horizon View LB 2

vm-vdi-view-lb02

2 ЦП / 4 ОЗУ

Linux

AppVolumes Manager 1

vm-vdi-av01

4 ЦП / 8 ОЗУ

Windows

AppVolumes Manager 2

vm-vdi-av02

4 ЦП / 8 ОЗУ

Windows

AppVolumes DB

vm-vdi-av-db01

6 ЦП / 16 ОЗУ

Windows

AppVolumes LB 1

vm-vdi-av-lb01

av.domain.loc

2 ЦП / 4 ОЗУ

Linux

10.10.10.11

AppVolumes LB 2

vm-vdi-av-lb02

2 ЦП / 4 ОЗУ

Linux

UAG 1

vm-vdi-uag01

uag01.domain.ru

8 ЦП / 10 ОЗУ

Appliance

123.123.12.34

UAG 2

vm-vdi-uag02

uag02.domain.ru

8 ЦП / 10 ОЗУ

Appliance

123.123.12.35

UAG 3

vm-vdi-uag03

uag03.domain.ru

8 ЦП / 10 ОЗУ

Appliance

123.123.12.36

UAG LB 1

vm-vdi-uag-lb01

vdi.domain.ru

2 ЦП / 4 ОЗУ

Linux

123.123.12.30

10.10.10.12

UAG LB 2

vm-vdi-uag-lb02

2 ЦП / 4 ОЗУ

Linux

Учётные записи

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

Тип

Ресурс

Имя

Домен

Назначение

AD

AD

vdi-horizon

domain.loc

Взаимодействие Horizon с AD

AD

AD

vdi-appvol

domain.loc

Взаимодействие AppVolumes с AD (только чтение)

AD

AD

vdi-vsphere

domain.loc

Взаимодействие vSphere с AD (только чтение)

vSphere

vdi-vc.domain.loc

administrator

vsphere.local

Локальный администратор vsphere

vSphere

vdi-vc.domain.loc

horizon

vsphere.local

Учётная запись Horizon для управления ВМ

vSphere

vdi-vc.domain.loc

appvol

vsphere.local

Учётная запись AppVolumes для монтирования дисков

vSphere

vdi-vc.domain.loc

readonly

vsphere.local

Учётная запись мониторинга (только чтение)

App

vm-vdi-view-edb01

horizon

Пользователь для аутентификации Horizon в Postgresql

App

vm-vdi-uag01
vm-vdi-uag02
vm-vdi-uag03

admin

Вход в админ-панель UAG

Заключение

Всё вышеперечисленное: нейминг, список компонентов и учётных записей — лучше подготовить до начала внедрения, чтобы не споткнуться в процессе. Чтобы не оказалось через неделю после начала работ, что дата-центр нужно срочно переименовать, а количества выделенных IP-адресов недостаточно для размещения всех ресурсов.

Третья часть на этом подходит к концу, а в четвёртой мы поговорим о сетевой связности компонентов, файрволах, балансировщиках нагрузки и общей сетевой схеме системы. А также, наконец, перейдём от теории к практике и начнём развёртывание.