Remote Desktop Services High Availability на Windows Server 2019
- Постановка задачи
- Требования по развертыванию RD Connection Broker High Availability
- Тестовый стенд с виртуальными машинами фермы Remote Desktop Services
- Стандартная установка RDS фермы в Windows Server 2019
- Создание пула серверов на сервере посредника подключений (RD Connection Broker)
- Стандартное развертывание службы удаленных рабочих столов
- Создание коллекции для отказоустойчивой терминальной фермы
- Настройка RD Connection Broker для подключений к ферме RDS
- Создание группы безопасности для RD Connection Broker
- Установка SQL Native Client
- Установка и настройка MS SQL 2016
Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами разобрали ситуацию, когда ваш жесткий диск виделся в формате RAW и не позволял получить доступ к данным, мы это благополучно решили. Сегодня мы рассмотрим задачу установки отказоустойчивой терминальной фермы Remote Desktop Services, где посредники подключений (RD Connection Broker) работают в режиме высокой доступности (High Availability) и все это дело будет работать на Windows Server 2019 в связке с хостами подключений (RDSH) на базе Windows Server 2016. Давно хотелось у себя на сайте иметь такую инструкцию, тем более что давно стояла задача перехода с W2012R2.
Постановка задачи
Необходимо организовать высоко доступную ферму RDS (Remote Desktop Services), где в качестве брокеров подключения будут выступать операционные системы с Windows Server 2019. В качестве хостов подключений, на которых будут работать конечные пользователи требуется иметь операционную систему Windows Server 2016. Развернуть сервер лицензирования, раздающий лицензии на пользователя или устройства. Чем хорошо использовать в качестве посредников подключений именно Windows Server 2019, все просто, когда большинство клиентского программного обеспечения станет поддерживаться данной ОС, можно будет легко вывести из эксплуатации сервера с W2016 и заменить их на более новые.
Требования по развертыванию RD Connection Broker High Availability
Прежде, чем мы начнем к поэтапному приготовлению к установке вашей отказоустойчивой RDS ферме, я бы хотел выделить пункты, которые нам потребуется выполнить.
- Наличие двух серверов или виртуальных машин с Windows Server 2019, на которые мы будем устанавливать роли посредников подключений (RD Connection Broker)
- Создание группы безопасности Active Directory, в которую необходимо поместить сервера RD Connection Broker
- Установка MS SQL 2012 и выше, для базы Connection Broker, лучше в режиме Always On.
- Предоставление группы безопасности с серверами RD Connection Broker, прав на создание баз данных
- Установка на сервера посредников подключений SQL Server Native Client, если SQL 2016, то Client Tools Connectivity
- Создание записи в DNS, которое будет использоваться в качестве имени RDS фермы, с помощью механизма DNS round robin.
- Настройка алиаса в cliconfg.exe для SQL базы и упрощенного переноса в случае необходимости
- Подготовка одного или более сервера с Windows Server 2016 для установки роли Remote Desctop Session Host и RD Web
- Выпуск SSL сертификата безопасности
- Создание и настройка коллекции на RDS ферме
- Установка и настройка сервера лицензирования терминальных сессий
- Дополнительные правки реестра для подключений через стандартное приложение "Подключение к удаленному рабочему столу"
Тестовый стенд с виртуальными машинами фермы Remote Desktop Services
- Две виртуальные машины с установленной Windows Server 2019, RDCB01.root.pyatilistnik.org (ip-адрес 192.168.31.20) и RDCB02.root.pyatilistnik.org (ip-адрес 192.168.31.21)
- Две виртуальные машины с установленной Windows Server 2016, RDHC01.root.pyatilistnik.org
- (ip-адрес 192.168.31.22) и RDSH02.root.pyatilistnik.org (ip-адрес 192.168.31.23)
- Виртуальная машина SQL01.root.pyatilistnik.org с установленной MS SQL 2016, но напоминаю у вас должен быть отказоустойчивый кластер SQL.
Стандартная установка RDS фермы в Windows Server 2019
Перед тем, как мы сделаем высокодоступное подключение к ферме Remote Desktop Services, нам необходимо произвести установку стандартной конфигурации служб удаленных рабочих столов, включающей в себя:
- Установку посредника подключений (RD Connection Broker) на сервер RDCB01.root.pyatilistnik.org
- Установка роли удаленного подключения (RD Session Host) на сервера RDHC01.root.pyatilistnik.org и RDCH02.root.pyatilistnik.org
- Установка роли RD Web на сервера RDHC01.root.pyatilistnik.org или RDCH02.root.pyatilistnik.org, если планируете использовать RemoteApp, то ставьте на все нужные хосты.
Создание пула серверов на сервере посредника подключений (RD Connection Broker)
Пул серверов, это удобное объединение серверов в общий список для быстрого управления и развертывания на них ролей и компонентов. Все манипуляции производятся из единой консоли управления "Диспетчер серверов". Откройте оснастку "Диспетчер серверов" раздел "Все серверы". Щелкните по нему правым кликом и нажмите "Добавление серверов".
На вкладке Active Directory вам необходимо указать в каком домене вы будите производить поиск, в поле "Имя (Общие)" находим нужные вам сервера.
Выбираем нужные сервера и переносим их в раздел "Выбрано".
Нажимаем "Ok".
В итоге в вашей оснастке "Диспетчер серверов" вы увидите все добавленные хосты. которые будут участниками Remote Desktop Services High Availability на Windows Server 2019.
В результате все должно быть в статусе "В сети".
Стандартное развертывание службы удаленных рабочих столов
Перед тем как создавать высоко доступную ферму RDS, вы должны произвести базовую инсталляцию, а именно нам необходимо установить три роли на текущие сервера, для этого в правом верхнем углу выберите пункт "Управление - Добавить роли и компоненты".
В мастере добавления ролей выберите пункт "Установка служб удаленных рабочих столов (Remote Desktop Services Installation)" и нажимаем далее.
Выбираем первый пункт "Стандартное развертывание (Standard Deployment)" - данный тип развертывания позволяет устанавливать роли Remote Desktop Services на нескольких серверах одновременно.
Выбираем второй пункт "Развертывание рабочих столов на основе сеансов (Session-based desktop deployment)"
Список компонентов устанавливаемых при стандартной конфигурации RDS фермы. Тут будет установлен:
- Посредник подключений к удаленным рабочим столам (Connection Broker)
- Веб-доступ к удаленным рабочим столам
- Узел сеансов удаленных рабочих столов
На следующем шаге вам нужно выбрать и перенести в правую область сервер, который будет нести на себе роль "Посредник подключений к удаленным рабочим столам (RD Connection Broker)". В моем примете, это первый сервер RDCB01.root.pyatilistnik.org.
Далее у нас идет выбор сервера для установки роли "Веб-доступ к удаленным рабочим столам (RD Web Access)", так как я пока не планирую использовать веб доступ RemoteApp, а настрою это потом, то я воспользуюсь галкой "Установить службу веб-доступа к удаленным рабочим столам на сервере посреднике подключений к удаленному рабочему столу (Install the RD Web Access role service on the RD Connection Broker server)"
Последним идет пункт по установке роли на сервера к которым вы будите непосредственно подключаться, выбираем нужные сервера и инсталлируем на них роль "Узел сеансов удаленных рабочих столов (RS Session Host)". В моем примере, это два сервера rdsh01 и rdsh02.
Процесс установки ролей подразумевает, что потребуется перезагрузка сервера, для этого вам необходимо выставить галку "Автоматически перезапускать конечный сервер, если это потребуется (Restart the destination server automatically if required )" и нажать кнопку "Развернуть"
Начинается процесс установки службы удаленных рабочих столов, может занимать несколько минут.
У вас должна произойти успешная установка службы "службы удаленных рабочих столов". Все необходимые сервера будут перезагружены.
Давайте убедимся, что все серверы получили свои роли. Для этого на сервере, где вы добавляли сервера в оснастку "Диспетчер серверов (Производили установку)", откройте оснастку и перейдите в раздел "Службы удаленных рабочих столов".
На вкладке "Общие сведения" посмотрите в разделе "Серверы развертывания", кто и какие роли себе установил.
Перейдите в раздел "Коллекции" и убедитесь, что список пуст, но зато присутствуют два ваших хоста узла сеансов удаленных рабочих столов, к котором будут подключаться конечные пользователи. Они будут иметь статус "Истина (True)", что говорит о разрешении подключаться (Режим стока выключен)
Следующим шагом мы создадим новую коллекцию для подключения к службам Remote Desktop Services High Availability на Windows Server 2019.
Создание коллекции для отказоустойчивой терминальной фермы
Следующим шагом идет создание коллекции или коллекций, к ресурсам которых будут подключаться пользователи. Коллекция Remote Desktop Services - это некое объединение серверов RDSH, RD Web под определенные задачи, отделы и другие варианта разграничения. Приведу пример, у вас есть отдел продаж, есть отдел разработчиков 1С. Логично предположить, что пользователям из отдела продаж не нужны всякие программные продукты для разработчиков, а разработчикам не нужен специфический софт, который установлен у отдела продаж. Отсюда следует, что будет создано две коллекции, и каждая из них будет иметь на борту, только свои определенные сервера "Службы удаленных рабочих столов", со своим набором программного обеспечения, а доступ к коллекциям будет осуществляться исключительно по группам безопасности Active Directory.
Так, что подытожим, коллекции RDS призваны решать две задачи:
- Они позволяют нам разделять RD Session Hosts на отдельные фермы
- Второе, что они делают, это позволяют администраторам организовывать ресурсы, по отделам или другим критериям
Для создания новой коллекции сеансов службы удаленных рабочих столов, выберите раздел "Коллекции" и нажмите кнопку "Задачи - Создать коллекцию сеансов"
Придумываем любое имя для вашей коллекции, в моем примере это root-collection
Теперь вам необходимо определиться какие серверы с ролью узлов сеансов (RDSH) вам нужно включить в коллекцию, у меня это RDSH01 и RDSH02
Указываем каким пользователям или группам разрешен доступ к данной терминальной ферме, я удалю группу "Пользователи домена" и добавлю другую.
У меня получился вот такой список доступа, потом его так же можно изменить.
Я снимаю галку "Включить диски профилей пользователей" так как не планирую использовать UDP диски.
Смотрим сводную информацию по создаваемой коллекции и нажимаем "Создать".
Дожидаемся создания коллекции службы удаленных рабочих столов.
В общем списке у вас будет ваша коллекция.
Про описание свойств коллекции RDS я уже писал пост, можете к нему обратиться. Теперь у системного администратора, кто первый раз развернул стандартную установку службы удаленных рабочих столов возникает вопрос, как ему подключиться к новой коллекции и это правильный вопрос, так как если вы сейчас попытаетесь подключиться брокеру, то вас не перекинет на хост из коллекции, вы просто попадете на сам RDCB хост. Чтобы это поправить нам нужно сделать две вещи:
- Скачать специальный файл RDP с RD Web хоста
- Поправить ветку реестра на сервере с ролью RD Connection Broker
Настройка RD Connection Broker для подключений к ферме RDS
Как я писал выше в текущей конфигурации посредник подключений к удаленным рабочим столам вас не будет перебрасывать в коллекцию, он просто будет подключаться к брокеру по RDP, ниже мы это поправим.
Для подключения к ферме Remote Desktop Services в отказоустойчивой конфигурации создают две записи DNS и направляют их на сервера с ролью RD Connection Broker, кто-то балансирует иначе, но мы в данном окружении воспользуемся именно DNS и механизмом перебора Round Robin. Откройте оснастку и создайте A-запись с нужным именем вашей RDS фермы у меня это будет DNS имя "terminal".
Я пока создам одну A-запись с таким именем и в качестве IP-адреса укажу адрес моего первого сервера с ролью RD Connection Broker.
В запись terminal.root.pyatilistnik.org успешно создана.
Проверяем ее через утилиту PING
Теперь, чтобы наш сервер посредник подключений к удаленным рабочим столам перебрасывал нас на RDSH сервера, нам необходимо подключиться к RD Web серверу и скачать RDP-файл с конфигурацией. Данный файл будет нести в себе параметры, о наименовании коллекции, при обращении к которой вы попадете на один из конечных серверов.
Стандартный адрес для подключения к вашему серверу RD Web, это:
Проверить наличие данного адреса вы можете открыв диспетчер IIS.
У вас должна открыться вот такая страница с авторизацией.
Теперь нам нужно получить значение loadbalanceinfo из свойств вашей коллекции, оно будет прописано в реестре брокеров. Для этого выполним публикацию приложения RemoteApp. Переходим в коллекцию службы удаленных рабочих столов и находим раздел "Удаленные приложения RemoteApp". Нажимаем на задачи и произведем публикацию удаленного приложения RemoteApp.
Выберите для примера обычный калькулятор
Нажимаем "Опубликовать".
Дожидаемся публикации приложения в коллекции Remote Desktop Services.
Далее вы переходите в веб интерфейс RDWEb и авторизуетесь, у вас будет доступно приложение калькулятор. Щелкните по нему и у вас будет запущено скачивание RDP пакета.
Теперь полученный файл RDP нужно открыть через блокнот.
Вам нужно найти строку loadbalanceinfo:s:tsv://MS Terminal Services Plugin.1.root-collection, она то нам и нужна для прописывания ее в реестре сервера несущего роль посредника подключений к удаленным рабочим столам (Connection Broker).
Переходим на сервер с ролью RD COnnection Broker и открываем реестр Windows. Переходим в раздел:
Создаем тут ключ реестра с типом REG_SZ (Строковый) и именем DefaultTsvUrl. В качестве содержимого вставляем tsv://MS Terminal Services Plugin.1.root-collection
Перезагрузите на всякий случай ваш брокер. Пробуем теперь произвести подключение по имени terminal.root.pyatilistnik.org.
Как видите нам ответил rdcb01.root.pyatilistnik.org
Но как и было задумано посредник подключений к удаленным рабочим столам перекину нас на конечный хост с ролью RDSH. Я для теста сделал три подключения, все отлично работает. Можно сказать, что мы успешно установили и настроили стандартную Remote Desktop Services ферму на базе Windows Server 2019. Теперь можно превращать ее в высоко доступную, о чем и пойдет речь ниже.
Создание группы безопасности для RD Connection Broker
Следующим шагом нам необходимо в Active Directory создать группу безопасности в которую мы поместим наши сервера с ролью RD Connection Broker. Необходимо, это для того, чтобы мы этой группе безопасности назначили необходимые права на нашем SQL сервере.
Открываем оснастку ADUC и создаем в нужном вам расположении группу безопасности RD-Connection-Broker. Я выставлю область действия группы (Локальная в домене).
Добавим в группу RD-Connection-Broker два сервера с ролью посредника подключений к удаленным рабочим столам. В моем случае, это RDCB01 и RDCB02.
Установка SQL Native Client
Следующим шагом вам необходимо на обоих серверах с ролью RD Connection Broker установить бесплатного клиента SQL Native Client, это необходимое требование. Где скачать SQL Native Client и как его установить я подробно рассказывал, на этом я останавливаться не буду, посмотрите по ссылке.
Установка и настройка MS SQL 2016
Следующим подготовительным требованием идет установка общей базы для наших брокеров, в моем примере это будет MS SQL 2016 Standard. Сам процесс инсталляции я подробно разбирал, так что так же советую посмотреть мою статью. Еще я вам советую делать всегда вашу базу данных отказоустойчивой, в режиме Always On.
SQL Server Express можно использовать?
Не пробовал но думаю да, единственное там будет ограничение на размер БД
В пункте 5 сказано: «Установка на сервера посредников подключений SQL Server Native Client, если SQL 2016, то Client Tools Connectivity».
В моём случае хранение базы предполагается организовать на Microsoft SQL Server 2017. Если я правильно понял, «Client Tools Connectivity» входит в состав SQL-сервера. Как его установить на серверах посредников подключений (Windows Server 2019)? Или будет достаточно «SQL Server Native Client»?
Да входит в состав дистрибутива, можно дистрибутив взять там, или скачать msi отдельно. На RDCB можете просто смонтировать ISO
Я так понимаю мы добрались до пункта 5 общего списка задач. А есть вторая часть мануала?
Да скоро будет, просто из-за болезни мамы я сильно подзабил пока на публикации, приношу свои извинения, что статья заянулась
Иван, добрый день, подскажите когда ожидать продолжение?
Да доделаю
Коллеги, здравствуйте, проверено, SQL Express можно использовать в данной связке, только доступность его по TCP/IP настраивайте сразу, включая правила в файерволе.
Автору спасибо большое за развернутую статью по настройке, но у меня возникла проблема при создании нескольких коллекций с брокерами в режиме высокой доступности, а именно: одна коллекция из 3х серверов Session Hosts режим удаленных рабочих столов работает прекрасно, но стоило создать коллекцию для RemoteApp и тут начались проблемы, был сгенерирован сертификат для сервера приложений через сертификационный центр, но при обращении к удаленным приложениям — все соединения так и шли через брокеры высокой доступности, как я ни старался напрямую попасть на сервер приложений, меня все равно кидает на брокеры и там получается чехарда с сертификатами, вплоть до того что удаленные приложения не запускаются м сеансы не создаются. Единственным выходом стало отдельное развертывание всех терммнальных служб на сервере приложений, тогда все проблемы исчезли.
Очень хочется увидеть продолжение…
Где можно найти продолжение?
Если мы вносим в реестр параметр DefaultTsvUrl, то как быть если необходима новая коллекция. Я в своей ферме добавил новый узел сеансов, завел его в новую коллекцию, дал опр группе доступ к этой коллекции, но когда подключаюсь к ферме, брокер не видит вторую коллекцию и перенаправляет на коллекцию по умолчанию, к которой у пользователя нет доступа… Как быть в этой ситуации?
В абзаце «Тестовый стенд с виртуальными машинами фермы Remote Desktop Services»
(ip-адрес 192.168.31.22) и RDSH02.root.pyatilistnik.org (ip-адрес 192.168.31.23)
В начале строки пропущено имя машины RDSH01.root.pyatilistnik.org
Спасибо, поправлю
Доброго дня ! Вопрос к автору, если сейчас имеем в продакшене 2012 ферму с терминальными серверами, можно ли рядом в этом же домене разворачивать ферму на 2019 по этой статье ? Не повиляет на работу текущей старой фермы ? Просто хочется плавно переместить пользователей на новую ферму
Можно, не повлияет