Remote Desktop Services High Availability на Windows Server 2019

Обновлено 03.08.2020

rds windows server 2019 logoДобрый день! Уважаемые читатели и гости 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 и заменить их на более новые.

Из каких компонентов состоит RDS ферма смотрите по ссылке, я на этом не хочу останавливаться

Требования по развертыванию RD Connection Broker High Availability

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

  1. Наличие двух серверов или виртуальных машин с Windows Server 2019, на которые мы будем устанавливать роли посредников подключений (RD Connection Broker)
  2. Создание группы безопасности Active Directory, в которую необходимо поместить сервера RD Connection Broker
  3. Установка MS SQL 2012 и выше, для базы Connection Broker, лучше в режиме Always On.
  4. Предоставление группы безопасности с серверами RD Connection Broker, прав на создание баз данных
  5. Установка на сервера посредников подключений SQL Server Native Client, если SQL 2016, то Client Tools Connectivity
  6. Создание записи в DNS, которое будет использоваться в качестве имени RDS фермы, с помощью механизма DNS round robin.
  7. Настройка алиаса в cliconfg.exe для SQL базы и упрощенного переноса в случае необходимости
  8. Подготовка одного или более сервера с Windows Server 2016 для установки роли Remote Desctop Session Host и RD Web
  9. Выпуск SSL сертификата безопасности
  10. Создание и настройка коллекции на RDS ферме
  11. Установка и настройка сервера лицензирования терминальных сессий
  12. Дополнительные правки реестра для подключений через стандартное приложение "Подключение к удаленному рабочему столу"

Тестовый стенд с виртуальными машинами фермы Remote Desktop Services

  1. Две виртуальные машины с установленной Windows Server 2019, RDCB01.root.pyatilistnik.org (ip-адрес 192.168.31.20) и RDCB02.root.pyatilistnik.org (ip-адрес 192.168.31.21)
  2. Две виртуальные машины с установленной Windows Server 2016, RDHC01.root.pyatilistnik.org
  3. (ip-адрес 192.168.31.22и RDSH02.root.pyatilistnik.org (ip-адрес 192.168.31.23)
  4. Виртуальная машина SQL01.root.pyatilistnik.org с установленной MS SQL 2016, но напоминаю у вас должен быть отказоустойчивый кластер SQL.

Уверен, что вы произвели настройку Windows Server 2019 и 2016 серверов, дали им статические IP-адреса и установили все доступные обновления безопасности

Стандартная установка 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 вам необходимо указать в каком домене вы будите производить поиск, в поле "Имя (Общие)" находим нужные вам сервера.

Добавление серверов в список диспетчера серверов

Выбираем нужные сервера и переносим их в раздел "Выбрано".

Добавление серверов для установки Remote Desktop Services High Availability

Нажимаем "Ok".

Подготовка серверов для установки Remote Desktop Services High Availability

В итоге в вашей оснастке "Диспетчер серверов" вы увидите все добавленные хосты. которые будут участниками Remote Desktop Services High Availability на Windows Server 2019.

Если у ваших серверов будет статус "В сети: счетчики производительности не запущены", то запустите их через правый клик

Запуск счетчиков производительности RDS

В результате все должно быть в статусе "В сети".

Успешно добавленные сервера в диспетчер серверов Windows Server 2019

Стандартное развертывание службы удаленных рабочих столов

Перед тем как создавать высоко доступную ферму RDS, вы должны произвести базовую инсталляцию, а именно нам необходимо установить три роли на текущие сервера, для этого в правом верхнем углу выберите пункт "Управление - Добавить роли и компоненты".

Стандартный тип развертывания - это лучший метод развертывания, и вы должны выбрать этот тип развертывания в производственной среде

Базовая установка RDS фермы на Windows Server 2019

В мастере добавления ролей выберите пункт "Установка служб удаленных рабочих столов (Remote Desktop Services Installation)" и нажимаем далее.

Установка служб удаленных рабочих столов

Выбираем первый пункт "Стандартное развертывание (Standard Deployment)" - данный тип развертывания позволяет устанавливать роли Remote Desktop Services на нескольких серверах одновременно.

Стандартное развертывание служб удаленных рабочих столов

Выбираем второй пункт "Развертывание рабочих столов на основе сеансов (Session-based desktop deployment)"

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

Развертывание рабочих столов на основе сеансов

Список компонентов устанавливаемых при стандартной конфигурации RDS фермы. Тут будет установлен:

  • Посредник подключений к удаленным рабочим столам (Connection Broker)
  • Веб-доступ к удаленным рабочим столам
  • Узел сеансов удаленных рабочих столов

Список устанавливаемых компонентов Remote Desktop Services

На следующем шаге вам нужно выбрать и перенести в правую область сервер, который будет нести на себе роль "Посредник подключений к удаленным рабочим столам (RD Connection Broker)". В моем примете, это первый сервер RDCB01.root.pyatilistnik.org.

Второй сервер на данном этапе добавлять не нужно

Установка роли Посредник подключений к удаленным рабочим столам на выбранный сервер

Далее у нас идет выбор сервера для установки роли "Веб-доступ к удаленным рабочим столам (RD Web Access)", так как я пока не планирую использовать веб доступ RemoteApp, а настрою это потом, то я воспользуюсь галкой "Установить службу веб-доступа к удаленным рабочим столам на сервере посреднике подключений к удаленному рабочему столу (Install the RD Web Access role service on the RD Connection Broker server)"

Данную роль нельзя пропустить в мастере стандартной установки служб Remote Desktop Services, но она нам пригодится еще очень сильно

Установка роли веб доступ к удаленным рабочим столам

Последним идет пункт по установке роли на сервера к которым вы будите непосредственно подключаться, выбираем нужные сервера и инсталлируем на них роль "Узел сеансов удаленных рабочих столов (RS Session Host)". В моем примере, это два сервера rdsh01 и rdsh02.

Установка роли RS Session Host

Процесс установки ролей подразумевает, что потребуется перезагрузка сервера, для этого вам необходимо выставить галку "Автоматически перезапускать конечный сервер, если это потребуется (Restart the destination server automatically if required )" и нажать кнопку "Развернуть"

Подтверждение на перезагрузку серверов при установке ролей Remote Desktop Services

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

Процесс установки службы удаленных рабочих столов

У вас должна произойти успешная установка службы "службы удаленных рабочих столов". Все необходимые сервера будут перезагружены.

Успешная установка службы "службы удаленных рабочих столов"

Давайте убедимся, что все серверы получили свои роли. Для этого на сервере, где вы добавляли сервера в оснастку "Диспетчер серверов (Производили установку)", откройте оснастку и перейдите в раздел "Службы удаленных рабочих столов".

раздел "Службы удаленных рабочих столов".

Кстати никто вам не мешает собрать оснастку управления службами Remote Desktop Services на другом компьютере, посмотрите как это делать

На вкладке "Общие сведения" посмотрите в разделе "Серверы развертывания", кто и какие роли себе установил.

Обзор развертывания служб Remote Desktop Services

Перейдите в раздел "Коллекции" и убедитесь, что список пуст, но зато присутствуют два ваших хоста узла сеансов удаленных рабочих столов, к котором будут подключаться конечные пользователи. Они будут иметь статус "Истина (True)", что говорит о разрешении подключаться (Режим стока выключен)

Просмотр коллекций в Remote Desktop Services

Следующим шагом мы создадим новую коллекцию для подключения к службам Remote Desktop Services High Availability на Windows Server 2019.

Создание коллекции для отказоустойчивой терминальной фермы

Следующим шагом идет создание коллекции или коллекций, к ресурсам которых будут подключаться пользователи. Коллекция Remote Desktop Services - это некое объединение серверов RDSH, RD Web под определенные задачи, отделы и другие варианта разграничения. Приведу пример, у вас есть отдел продаж, есть отдел разработчиков 1С. Логично предположить, что пользователям из отдела продаж не нужны всякие программные продукты для разработчиков, а разработчикам не нужен специфический софт, который установлен у отдела продаж. Отсюда следует, что будет создано две коллекции, и каждая из них будет иметь на борту, только свои определенные сервера "Службы удаленных рабочих столов", со своим набором программного обеспечения, а доступ к коллекциям будет осуществляться исключительно по группам безопасности Active Directory.

Так, что подытожим, коллекции RDS призваны решать две задачи:

  • Они позволяют нам разделять RD Session Hosts на отдельные фермы
  • Второе, что они делают, это позволяют администраторам организовывать ресурсы, по отделам или другим критериям

Для создания новой коллекции сеансов службы удаленных рабочих столов, выберите  раздел "Коллекции" и нажмите кнопку "Задачи - Создать коллекцию сеансов"

Создание коллекции сеансов RDS

Придумываем любое имя для вашей коллекции, в моем примере это root-collection

Задаем имя коллекции Remote Desktop Services

Теперь вам необходимо определиться какие серверы с ролью узлов сеансов (RDSH) вам нужно включить в коллекцию, у меня это RDSH01 и RDSH02

Добавление узлов RDSH в коллекцию

Указываем каким пользователям или группам разрешен доступ к данной терминальной ферме, я удалю группу "Пользователи домена" и добавлю другую.

Настройка доступа к коллекции RDS

У меня получился вот такой список доступа, потом его так же можно изменить.

Настройка доступа к Remote Desktop Services

Я снимаю галку "Включить диски профилей пользователей" так как не планирую использовать UDP диски.

Отключаю "Включить диски профилей пользователей"

Смотрим сводную информацию по создаваемой коллекции и нажимаем "Создать".

Проверка свойств создаваемой коллекции RDS

Дожидаемся создания коллекции службы удаленных рабочих столов.

Успешно созданная коллекция Remote Desktop Services

Если у вас выскочит ошибка: unable to configure the rd session host server, то она легко устранима

Не удается настроить сервер удаленных рабочих столов. Недопустимая операция

В общем списке у вас будет ваша коллекция.

Список коллекций RDS фермы

Про описание свойств коллекции RDS я уже писал пост, можете к нему обратиться. Теперь у системного администратора, кто первый раз развернул стандартную установку службы удаленных рабочих столов возникает вопрос, как ему подключиться к новой коллекции и это правильный вопрос, так как если вы сейчас попытаетесь подключиться  брокеру, то вас не перекинет на хост из коллекции, вы просто попадете на сам RDCB хост. Чтобы это поправить нам нужно сделать две вещи:

  1. Скачать специальный файл RDP с RD Web хоста
  2. Поправить ветку реестра на сервере с ролью 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.

Создание записи dns для подключения к отказоустойчивой фермы RDS

В запись terminal.root.pyatilistnik.org успешно создана.

Создание имени для подключения к Remote Desktop Services

Проверяем ее через утилиту PING

Проверка узла через утилиту Ping

Теперь, чтобы наш сервер посредник подключений к удаленным рабочим столам перебрасывал нас на RDSH сервера, нам необходимо подключиться к RD Web серверу и скачать RDP-файл с конфигурацией. Данный файл будет нести в себе параметры, о наименовании коллекции, при обращении к которой вы попадете на один из конечных серверов.

Напоминаю, что в моем тестовом окружении сервером веб-доступа к удаленным рабочим столам выступает брокер RDCB01.root.pyatilistnik.org

Стандартный адрес для подключения к вашему серверу RD Web, это:

https://dns имя вашего сервера с данной ролью/rdweb в моем примере https://rdcb01.root.pyatilistnik.org/rdweb

Проверить наличие данного адреса вы можете открыв диспетчер IIS.

RDweb сайт на IIS

У вас должна открыться вот такая страница с авторизацией.

Запуск RDWeb страницы

Но бывают ситуации, что вы можете получить ошибки "HTTP Error 503. The service is unavailable" или "ERR_SSL_PROTOCOL_ERROR".

Теперь нам нужно получить значение loadbalanceinfo из свойств вашей коллекции, оно будет прописано в реестре брокеров. Для этого выполним публикацию приложения RemoteApp. Переходим в коллекцию службы удаленных рабочих столов и находим раздел "Удаленные приложения RemoteApp". Нажимаем на задачи и произведем публикацию удаленного приложения RemoteApp.

Публикация RemoteApp приложения

Выберите для примера обычный калькулятор

Публикация приложения в Remote Desktop Services

Нажимаем "Опубликовать".

Публикация удаленного приложения в Remote Desktop Services

Дожидаемся публикации приложения в коллекции Remote Desktop Services.

Успешно опубликованное приложение RemoteApp

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

Запуск приложения RemoteApp

Теперь полученный файл RDP нужно открыть через блокнот.

Открытие файла RDP через блокнот

Вам нужно найти строку loadbalanceinfo:s:tsv://MS Terminal Services Plugin.1.root-collection, она то нам и нужна для прописывания ее в реестре сервера несущего роль посредника подключений к удаленным рабочим столам (Connection Broker).

Строка подключения к коллекции RDS

Переходим на сервер с ролью RD COnnection Broker и открываем реестр Windows. Переходим в раздел:

HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\ClusterSettings

Создаем тут ключ реестра с типом REG_SZ (Строковый) и именем DefaultTsvUrl. В качестве содержимого вставляем tsv://MS Terminal Services Plugin.1.root-collection

Настройка RDS брокера

Настройка сервера посредника подключений к удаленным рабочим столам

Перезагрузите на всякий случай ваш брокер. Пробуем теперь произвести подключение по имени terminal.root.pyatilistnik.org.

Проверка подключения к терминальной ферме

Как видите нам ответил rdcb01.root.pyatilistnik.org

Проверка работы службы удаленных рабочих столов

Но как и было задумано посредник подключений к удаленным рабочим столам перекину нас на конечный хост с ролью RDSH. Я для теста сделал три подключения, все отлично работает. Можно сказать, что мы успешно установили и настроили стандартную Remote Desktop Services ферму на базе Windows Server 2019. Теперь можно превращать ее в высоко доступную, о чем и пойдет речь ниже.

Успешное подключение к RDS ферме

Создание группы безопасности для RD Connection Broker

Следующим шагом нам необходимо в Active Directory создать группу безопасности в которую мы поместим наши сервера с ролью RD Connection Broker. Необходимо, это для того, чтобы мы этой группе безопасности назначили необходимые права на нашем SQL сервере.

Открываем оснастку ADUC и создаем в нужном вам расположении группу безопасности RD-Connection-Broker. Я выставлю область действия группы (Локальная в домене).

Создание группы безопасности для RD Connection Broker

Добавим в группу RD-Connection-Broker два сервера с ролью посредника подключений к удаленным рабочим столам. В моем случае, это RDCB01 и RDCB02.

Не забудьте перезагрузить оба сервера, чтобы обновился их ACL с членством в группе

Группа безопасности для RD Connection Broker

Установка SQL Native Client

Следующим шагом вам необходимо на обоих серверах с ролью RD Connection Broker установить бесплатного клиента SQL Native Client, это необходимое требование. Где скачать SQL Native Client и как его установить я подробно рассказывал, на этом я останавливаться не буду, посмотрите по ссылке.

Установка и настройка MS SQL 2016

Следующим подготовительным требованием идет установка общей базы для наших брокеров, в моем примере это будет MS SQL 2016 Standard. Сам процесс инсталляции я подробно разбирал, так что так же советую посмотреть мою статью. Еще я вам советую делать всегда вашу базу данных отказоустойчивой, в режиме Always On.

Автор - Сёмин Иван

17 Responses to Remote Desktop Services High Availability на Windows Server 2019

  1. Максим:

    SQL Server Express можно использовать?

  2. Иван Семин:

    Не пробовал но думаю да, единственное там будет ограничение на размер БД

  3. Олег:

    В пункте 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»?

  4. Иван Семин:

    Да входит в состав дистрибутива, можно дистрибутив взять там, или скачать msi отдельно. На RDCB можете просто смонтировать ISO

  5. Дмитрий:

    Я так понимаю мы добрались до пункта 5 общего списка задач. А есть вторая часть мануала?

  6. Иван Семин:

    Да скоро будет, просто из-за болезни мамы я сильно подзабил пока на публикации, приношу свои извинения, что статья заянулась

  7. Сергей:

    Иван, добрый день, подскажите когда ожидать продолжение?

  8. Иван Семин:

    Да доделаю

  9. Вадим:

    Коллеги, здравствуйте, проверено, SQL Express можно использовать в данной связке, только доступность его по TCP/IP настраивайте сразу, включая правила в файерволе.

  10. Вадим:

    Автору спасибо большое за развернутую статью по настройке, но у меня возникла проблема при создании нескольких коллекций с брокерами в режиме высокой доступности, а именно: одна коллекция из 3х серверов Session Hosts режим удаленных рабочих столов работает прекрасно, но стоило создать коллекцию для RemoteApp и тут начались проблемы, был сгенерирован сертификат для сервера приложений через сертификационный центр, но при обращении к удаленным приложениям — все соединения так и шли через брокеры высокой доступности, как я ни старался напрямую попасть на сервер приложений, меня все равно кидает на брокеры и там получается чехарда с сертификатами, вплоть до того что удаленные приложения не запускаются м сеансы не создаются. Единственным выходом стало отдельное развертывание всех терммнальных служб на сервере приложений, тогда все проблемы исчезли.

  11. Евгений:

    Очень хочется увидеть продолжение…

  12. Reindez:

    Где можно найти продолжение?

  13. Кирилл:

    Если мы вносим в реестр параметр DefaultTsvUrl, то как быть если необходима новая коллекция. Я в своей ферме добавил новый узел сеансов, завел его в новую коллекцию, дал опр группе доступ к этой коллекции, но когда подключаюсь к ферме, брокер не видит вторую коллекцию и перенаправляет на коллекцию по умолчанию, к которой у пользователя нет доступа… Как быть в этой ситуации?

  14. Эдуард:

    В абзаце «Тестовый стенд с виртуальными машинами фермы Remote Desktop Services»

    (ip-адрес 192.168.31.22) и RDSH02.root.pyatilistnik.org (ip-адрес 192.168.31.23)

    В начале строки пропущено имя машины RDSH01.root.pyatilistnik.org

  15. Иван Семин:

    Спасибо, поправлю

  16. Сергей:

    Доброго дня ! Вопрос к автору, если сейчас имеем в продакшене 2012 ферму с терминальными серверами, можно ли рядом в этом же домене разворачивать ферму на 2019 по этой статье ? Не повиляет на работу текущей старой фермы ? Просто хочется плавно переместить пользователей на новую ферму

  17. Иван Семин:

    Можно, не повлияет

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *