Remote Desktop Connection Broker (RD Connection Broker) – это функционал роли терминального сервера Windows Server. RD Connection Broker позволяет равномерно распределить нагрузку между серверам в ферме Remote Desktop (при подключении к RDS пользователя перенаправляет на наименее загруженный сервер), обеспечить доступ пользователей к VDI и RemoteApp, а также реализует возможность переподключения пользователей к своим сессиям (при подключении к новому серверу RDS, RDCB проверяет наличие незавершенной сессии на других серверах фермы, и в случае ее обнаружения новая сессия не создается, а пользователь перенаправляется в старую сессию).
В этой статье мы рассмотрим процесс настройки отказоустойчивого высоко-доступного экземпляра RD Connection Broker, обеспечивающего свой функционал при выходе из строя одного из серверов с ролью RDCB.
В отличии от реализации RDCB в предыдущих версиях Windows Server, Connection Broker в Windows Server 2012 обеспечивает высокую доступность в режиме Active/Active, когда каждый из серверов RDCB является активным и обрабатывает входящие запросы. Это позволяет обеспечить высокую доступность и масштабируемость RDCB в больших фермах Remote Desktop. Для хранения данных RDCB используется БД на MS SQL Server.
Требования для внедрения отказоустойчивого RDCB
- Как минимум 2 сервера с ролью RDCB (под ОС Windows Server 2012 / 2012 R2)
- SQL Server ( редакция SQL server 2008 R2 Standard или выше) c минимум 4 Гб RAM
- Наличие установленного SQL Server Native Client
- Полные права серверов RD Connection Broker на БД SQL и каталог установки SQL
- Минимум один сервер с ролью Remote Desktop Session Host в ферме
- Разрешенные исключения для портов SQL server в фаерволе Windows
Всем серверам, на которых будут установлены роли RD Connection Broker необходимо назначить статические ip-адреса и включить в домен Active Drectory.
- RDCB1.domain.ru — 172.25.104.71
- RDCB2.domain.ru — 172.25.104.171
В Active Directory создадим отдельную группу безопасности RDS Connection Brokers, в которую нужно включить все сервера RDCB.
Далее на отдельном сервере (или SQL-кластере) устанавливается SQL Server версии 2008 R2 или 2012 Standard.
На SQL сервере с помощью SQL Server Management Studio в разделе Security нужно создать новый login и предоставить доменной группе RDCB права с возможностью создания и редактирования баз данных. Также этой группе нужно предоставить полные права на каталог установки SQL.
На SQL сервере нужно создать каталог, в котором будут храниться файлы БД, например, C:\SQLDB, и предоставить этой же группе полные права на каталог.
На всех серверах с ролью RDCB необходимо установить SQL Server Native Client. Его нужно скачать отдельно с сайта MS, либо запустить прямо с установочного диска (на установочном диске SQL Server 2012 он хранится в каталоге \1033_ENU_LP\x64\Setup\x64\sqlncli.msi).
Для SQL server 2008 R2 нужен SQL native client 10, для SQL Server 2012 — SQL Native client 11.
В брандмауэра SQL-сервера создадим новое правило, открывающее порт TCP 1433 для доменных машин. Сделать это можно так:
netsh advfirewall firewall add rule name = SQLSRVPort dir = in protocol = tcp action = allow localport = 1433 remoteip = localsubnet profile = DOMAIN
Следующий шаг – создание в DNS зоне A записей для реализации балансировки нагрузки (Round Robin) между серверами RD Connection Broker. Например, DNS имя нашей фермы RDCB будет RDCB_lb. Создадим две следующие A записи вида:
- A RDCB_lb.domain.ru 172.25.104.71 (ip адрес RDCB1)
- A RDCB_lb.domain.ru 172.25.104.171 (ip адрес RDCB2)
С помощью консоли Server Manager на первом из серверов RDCB устанавливаем роль RD Connection Broker (если еще не установлена).
После установки роли RDCB используется маленькая локальная база SQL, хранящаяся на локальном диске сервера RD Connection Broker в каталоге c:\windows\rdcbDb\.
В этой базе хранится информация о ферме и терминальный сессиях пользователей. Так как она расположена на локальной машине, другие сервера RDCB не смогут ее использовать. Для создания HA для RDCB нужно перенести ее на выделенный SQL сервер, на котором она будет доступна другим серверам.
Для переноса БД на выделенный SQL Server нужно перейти на вкладку управления Remote Desktop Services -> Overview. Для запуска мастера создания отказоустойчивой конфигурации RD Connection Broker, щёлкнем ПКМ по изображению роли RD Connection Broker и выбираем пункт Configure High Availability. Запустившийся мастер должен создать БД на MS SQL Server и перенести в нее локальную конфигурацию.
- Database Connection String – строка подключения с базе на SQL сервере.Для SQL 2008 R2:
DRIVER=SQL Server Native Client 10.0;SERVER=<SQL Server Name>;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;DATABASE=<DB Name>
Для SQL 2012:DRIVER=SQL Server Native Client 11.0;SERVER=<SQL Server Name>;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;DATABASE=<DB Name>
- Folder to store database files – каталог, в котором будут храниться файла БД: C:\SQLDB. Папка находится на SQL сервере, мы ранее ее создали и предоставили доступ группе серверов RDCB.
- DNS Round Robin name: FQDN имя фермы RDCB, для которой мы создавали записи в DNS для Round Robin (в нашем примере это RDCB_lb). Именно по этому адресу будут обращаться RDP клиенты при подключении к серверам RD Connection Broker.
Затем откроем SQL Server Manager на сервере СУБД и убедимся, что была создана новая база. Переходим на вкладку Security, выберем ранее добавленную группу — > свойства, и в качестве БД по-умолчанию выбираем базу RDS. Потом отмечаем роли db_owner и public.
Для обеспечения высокой доступности на случай выхода из строя первого сервера, необходимо в текущую конфигурацию добавить второй узел Connection Broker.
Для этого щелкаем ПКМ по иконке RD Connection Broker, и выбираем пункт Add RD Connection Broker Server.
Указываем имя второго сервера, на котором нужно установить роль Connection Broker и жмем Далее.
На этом настройка High Availability конфигурации Connection Broker завершена.
Итак, мы создали высоко доступный сервис RD Connection Broker на Windows Server 2012. Вы можете протестируйте доступность RDCB, отключив один из серверов фермы RDCB. В этом сценарии точкой отказа остается SQL server. Отказоустойчивость SQL сервера можно реализовать с помощью HA SQL кластера или зеркалирования базы SQL.
А никак нельзя использовать SQL Express? Я когда разворачивал WDS столкнулся, что для того, чтобы разворачиваемые машинки смогли брать параметры из этой базы надо было открыть своеобразный доступ к этой базе из сети, а не только с локально машинки. Разве так нельзя сделать? Эти манипуляции описаны в разделе «Настройка сервера SQL Server 2008 Express» статьи «http://www.oszone.net/11530/Windows-7-install-15».
Я к тому, что неужели требуется покупаться дорогущий SQL Server для такой малозатратной с точки зрения ресурсов задачи?
Требования в SQL Server Standart есть в спецификации, но думаю для этих целей подойдет и SQL Express.
Естественно к SQL Express нужно открыть сетевой доступ:
1) Включить прослушивание TCP/IP порта 1433 и службу SQL Server Browser
2) Открыть порт 1433 во входящих соединениях Брандмауэра Windows
3) В настройках экземпляра базы в разделе Connections поставить флажок «Allow remote connections to this server»
4) Насколько я помню, инстанс SQL Express как-то особенно назывался, так вот в строке подключения нужно правильно его указать.
«На SQL сервере с помощью SQL Server Management Studio в разделе Security нужно создать новый login и предоставить доменной группе RDCB права с возможностью создания и редактирования баз данных. Также этой группе нужно предоставить полные права на каталог установки SQL.»
Вот все понятно, кроме того как привязать созданную группу к этому SQL логину (я так понимаю в результате все запросы с брокеров будут обрабатываться от лица этого логина), ну вот хоть тресни не выходит у меня. Если несложно просветите нуба подробнее по этому пункту
Открываете SQL Server Management Studio. В разделе Security->Logins добавляете новый логин (в качестве Login Name находите свою доменную группу RDCB) c правами dbcreator и sysadmin (после создания БД права можно уменьшить, ограничив их только базой RDCB)
а в чем отказоустойчивость при роунд робине? если 1 сервер не доступен днс продолжит туду слать запросы. нужен nlb
Роунд робин + неотказоустойчивая SQL-база — аляповатая кластеризация от мягкотелых. Брр.. Придется оставаться на 2008-й
есть НА RDCB (2 шт) и 4 штуки RDSH
Если выключить 1й RDSH то все активные на нем юзеры не могут переподключиться к остальным RDSH 5 и более минут.
Как уменьшить задержку ??
Вот похожая проблема и решение.
Цитата с https://blog.it-kb.ru/2013/09/05/remote-desktop-services-rds-rd-session-host-and-web-access-in-farm-high-availability-rd-connection-broker-in-nlb-cluster-on-windows-server-2012/
Леонид / 01.04.2016 14:19
Коллеги, способ есть. Как правильно заметил AlektroNik, необходимо лезть в SQL базу CB. Нужно дать ему (брокеру) понять, что одного из серверов больше нет. В случае возникновения вышеописанной ситуации мне помогает небольшой скрипт. Здесь Servername — имя «упавшего» сервера.
delete from EnvironmentProperty where EnvironmentId in (select id from Environment where name=’Servername’);
delete from Environment where name=’Servername ‘;
delete from TargetProperty where targetid in (select id from target where name=’Servername ‘);
delete from TargetIp where targetid in (select id from target where name=’ Servername’);
delete from session where targetid in (select id from target where name=’ Servername’)
delete from target where name=’Servername ‘;
Используйте на свой страх и риск. Я проверял 3 раза, помогало.
Развернул точно такую схему, в итоге, при подключении через dns запись циклического перебора, которая ссылается на посредника пользователь подключается к посреднику, а не к хосту. ЧЯДНТ?
Вы не совсем правильно подключаетесь.
Для начала вам нужно через веб интерфейс хотя бы сохранить файлик подключения к коллекции. Если Вы его откроете в блокноте то там будет строчка с именем Вашей коллекции.
Например, loadbalanceinfo:s:tsv://MS Terminal Services Plugin.1.Collections-RDS
Спасибо! Добавил эту строчку в реестр посредника подключений — всё отлично работает, но столкнулся с большой проблемой: на RDP, начиная с win2008 и выше всё работает, на 2003 и тонких клиентах редирект перестаёт работать и продолжает кидать на сервер посредника. Возможно ли решить эту проблему?
Добрый день, пытаюсь настроить Настройка высокой доступности Посредника подключений (Connection Broker High Availability) по вашей инструкции, но у меня так и появляется сообщение о не возможности создать базу, хотя в sql сервере подключения я вижу, права группе дал максимальные, sqlncli одинаковой версии с сервером (я использую 2008 r2 sp3)
Может подскажете, где я мог накосячить?
Здравствуйте!
Ваша статья заканчивается очень интересным предложением: «Отказоустойчивость SQL сервера можно реализовать с помощью HA SQL кластера или зеркалирования базы SQL.» А не могли бы Вы поподробнее осветить данный момент. В частности, в нашей сети юыл развернут кластер терминальных серверов (RDCB), БД которого была размещена на отдельном SQL сервере, сейчас развернули у себя группу доступности AlwaysOn из двух серверов БД, и соответственно хотим изменить действующее подключение к базе RDCB с отдельного сервера БД, на группу доступности. То, что это делается через командлет Powershell нам известно, единственное, что смущает это параметр DataBasePath (путь к файлу БД), который на серверах группы доступности разный. И вопрос: какой путь к файлу БД необходимо указывать, в случае если БД развернута на 2-х серверах группы доступности?
Придется переместить БД RDCB так, чтобы на обоих узлах кластера AlwaysOn путь к базе был одинаковым. Посмотрите эту статью: там довольно подробно описан такой вариант конфигурации: _https://ryanmangansitblog.com/2014/02/24/rds-2012-sql-alwayson-considerations/
Здравствуйте!
Прошу сразу не кидаться тапками. Но немного, видимо, отстал от жизни. Есть различные варианты реализации: Как в статье (два выделенных RDSH и n-ное количество RDSH), объединенные на одном сервере роли RDSH и RSCB (при этом все серверы RDSH они же RDCB)..
Есть ли рекомендация по совмещению ролей RDSH и RDCB? В каких случаях рекомендуется их разносить на разные серверы, есть ли в этом смысл если, скажем, планируется ферма на 8-10 терминальных серверов (не проще на все серверы установить роли RDSH и RDCB и настроить ферму посредством DNS RR)?
При использовании DNS Round-robin, понимает ли RDP клиент, что нужно обращаться к следующему серверу из списка если первый недоступен?
Заранее благодарен за ответы.
Здравствуйте.
Проделал все эти операции. Всё получилось хорошо, но не могу остановить встроенный сервер sql express.
При его остановки останавливаются все службы удаленных рабочих столов. И запускаться без него не хотят. Мне необходимо, чтоб эти службы стали работать с базой расположенной на MSSQL, а не получается.
Нужно сначала изменить используемую SQL базу в настройках RDCB. А потом отказываться от локальной SQL Express, подозревая брокер сейчас завязан на ней.
Добрый день, большое спасибо за статью. Помогите пожалуйста разобраться. Настроил 2 CB в DNS RR в HA и 2 Terminal. Пока оба CB online, все работает нормально — сессии разбрасываются корректно.
Вопросы:
1. Однако, в логах видно, что сессии может разбрасывать не активный management server (MS). Те, активным указан, скажем CB1, а записи о редиректе в логах только на CB2 и кол-во редиректов не соответствует RR DNS, те, на CB2 их в разы больше. DNS отрабатывает нормально. Это нормальное поведение, почему так?
2. Основной вопрос: если оставить в дисконнекте 1 сессию на Term1, после чего выключить CB1 (активный MS) и подождать, пока ферма поймет, что CB1 оттопырился и сделает активным CB2 (минут 5), то после этого, при соединении уже на Term2, все равно бросит на Term1, где есть дисксессия. Это ожидаемое поведение. Однако, если после выключения CB1 не ждать,а подключиться сразу к Term2, то соединение пройдет уже на Term2, при этом в таблице БД и ServerManager появляется две сессии, одна в дисклнекте, а вторая активная. Это так и должно быть или я что-то не правильно настроил?
Спасибо.
Уточните редакцию Windows Server, на которой вы строите свою терминальную инфраструктуру.
1. Диспропорция в активных сесиях пользовтелях при этом есть? Что происходит при отключеннии одного из CB?
2. Если я правильно вас понял, у вас по сути могут быть две сессии для одного пользователя на двух разнных RDS серверах — так не должно быть.
Уважаемый автор, подскажите пож-ста, насколько схема описанная в сабже актуальна на конец 2019 года. Есть решения более эффективные или нет. Есть потребность пересобрать терминальные сервера на 2016 лицензии, а новых веяний не нахожу в поисковиках
В RDS 2016 мало что изменились. Microsoft уже давно буксует на месте в том числе в RDSH.
Роль Connection Broker осталась, так что можете пользоваться этой статьей. Изменений будет минимум.
Самое полезное — тепер все RDCB могут быть в режиме active-active.
Поправьте, пожалуйста, Database Connection String для SQL2012 — там двоеточие как часть строки запроса. Это сбивает с толку. Спасибо!
Исправлено