Pull to refresh

Comments 32

тяжелому, непонятному Remote Connection Broker от MS
коммерческие продукты с таким же функционалом, такие как упоминались выше, стоят приличных денег.

Хм… ничего не имею против HAProxy, но справедливости ради — брокер от MS штатно является частью винды (т.е. при уже имеющихся лицензиях на N серверов, на которых крутятся роли удаленных рабочих столов, попросту бесплатен), ставится по "Next-Next-Next, и работает", ресурсов практически не потребляет и не обладает рядом озвученных для HAProxy проблем.

Судя по всему имеет ровно те же проблемы. Штатно нет резервирования брокера, и соответсвенно нет резервирования активных сессий. Для резервирования брокера нужен выделенный MS SSQL сервер в редакции Standart.
О проблемах невозможности подключиться к ферме, когда вышел из строя сервер на котором был пользователь, в сети тоже полно сообщений.

Из минусов Remote Connection Broker от MS отмечу необходимость специально подготавливать rdp файлы и невозможность разделять сервера в ферме как в примере.

Но в целом, я не называл бы проблемами отсутствие резервирования брокера, это недостатки. Основная функция брокера на мой взгляд — это горизонтальная масштабируемость.
Из минусов Remote Connection Broker от MS отмечу необходимость специально подготавливать rdp файлы и невозможность разделять сервера в ферме как в примере.

Разве?
Для каждой группы, далается своя RDP Collection, в которую включены необходимые для нее сервера.
Про подготавливать rdp файлы — честно говоря не понял что под эти имеется ввиду.
В RDP файле необходимо явно указывать параметр loadbalanceinfo. Это не всегда удобно.
Если я правильно понимаю, о чем идет речь, то эта настройка балансировки меняется через GUI Server Manager'а, в RDP Session Collection, с возможностью выставить relative weigth и session limit для каждого из входящих в коллекцию серверов.
У меня есть ферма, которую я назвал farm.local. Если я зайду через mstsc на farm.local то попаду на брокер. Если открою специальный RDP файл, где есть строчка loadbalanceinfo — попаду на RDSH из фермы
Если на ферме одна коллекция рабочих столов, то даже без loadbalanceinfo вас бросит на наименее нагруженный (по сеансам) RDSH.
Случаи с несколькими коллекциями не тестил, возможно там и работает так, как вы описали.
У меня одна коллекция и так не работает.
А какую версию RDS используете? Что то мне это сильно напоминает 2008/2008 R2 — там ярлычки нужно было генерить.

Начиная с 2012 с определенного патча или 2012 R2 все очень сильно поменялось. Правильный способ коннекта — через веб каталог. Ярлычки туда публикуются автоматом. Так же он отлично пристегуется к RemoteApp and Desktop в Win7-10. Без проблем работает как в корп сети, так и за ее пределами через Gateway при правильном сетапе. Балансирует нормально.
Сетап следующий:
2xRD Gateway (Windows NLB)
2xRD Web (Windows NLB)
2xConnection Broker (DNS Round Robin) + External SQL cluster
2xSOFS for user profile vhds
3 коллекции по 2 сервера для RDSH
2 коллекции по 2 сервера для RemoteApp

Gateway и Web прекрасно живут совместно, но были вопросы от IT Security, так что разнесли в разные сети DMZ.

Ну а брокер — он есть всегда. Даже при Single Server — без него это не рабоатет и не инсталлится.
У нас своя сборка тонких клиентов, через веб это работает излишне сложно для пользователя. Сервер 2012R2, два брокера.
Все верно.
Только стоит упомянуть, что автоматически сформированные RDP файлы, как для полноценных RDP сессий так и для RemoteApp, публикуются на RD Web Access и «ручками» ничего править не надо. ))
Штатно нет резервирования брокера, и соответсвенно нет резервирования активных сессий. Для резервирования брокера нужен выделенный MS SSQL сервер в редакции Standart.

У нас, видимо, разные представления о том, что такое "штатно нет". У MS как раз "штатно есть" документированная Active-Active конфигурация, а вот у HAProxy вам придется колхозить скрипты вручную. И SQL Standard там не нужен, а просто рекомендован, на практике же для не слишком монструозных инсталляций ничто не мешает бесплатный использовать. Плюс брокер от MS штатно не страдает от проблемы "резетнули хост — потеряли базу сессий", поэтому требования к резервированию менее жесткие.


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

У любого брокера будут подобные проблемы просто в силу самого принципа работы — если один из серверов лежит, это надо как-то обнаружить и принять меры, чтобы брокер об этом узнал. Для HAProxy вам надо опять вручную прикручивать некий мониторинг, а вот у MS определение живых серверов все-таки работает из коробки. Ситуаций, когда один из серверов в ферме по тем или иным причинам ложился, у меня за почти 10 лет работы с терминальными фермами от MS было достаточно, и я так сразу не вспомню связанных с этим проблем. Охотно верю, что у кого-то они были, но там уже надо разбираться в причинах.


необходимость специально подготавливать rdp файлы

Нет такой необходимости.


невозможность разделять сервера в ферме как в примере

Возможность есть, только реализована в другом компоненте — RD Gateway. А HAProxy в некотором роде сочетает возможности и того, и другого (в усеченном виде, хотя опять-таки кастомными скриптами можно много чего докрутить).

>Нет такой необходимости.

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

Брокер, вообще говоря, не предназначен для того, чтобы точкой входа быть. Вариантов сходу три:


  1. RD Gateway (хоть от MS, хоть еще какой)
  2. Выделенный RDSH в drain mode (или пара с общим DNS именем для отказоустойчивости). Работает исключительно как точка входа, сам никакой нагрузки не несет.
  3. Совсем просто и сердито — добавить для каждого сервера в ферме в DNS A запись вида terminal.domain.name и подключаться по этому адресу непосредственно на них.
>У нас, видимо, разные представления о том, что такое «штатно нет». У MS как раз >«штатно есть» документированная Active-Active конфигурация, а вот у HAProxy вам >придется колхозить скрипты вручную.
Ниже в комментариях написали, что таки есть, штатное средство в HAproxy для горячего резервирования!, в отличии все таки, нештатного(не средствами сервиса) резервирования от MS(если придираться).

К тому же говоря о штатных средствах и «колхозных скриптах», хочется отметить что Unix Way — это использование стольких средств(сервисов, скрипитов, программ и тп), сколько необходимо для достижения цели. Корче для unix это нормально, и это доказано, и это работает, в этом мире, и хорошо :)

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


А на сайте Microsoft написано:


To safely remove the server from your RDS deployment, contact Microsoft Customer Support Services. For a complete list of Microsoft Customer Support Services telephone numbers and information about support costs, visit the following Microsoft website

Important
We do not recommend that you manually edit the database that is used by the RDS deployment.

https://support.microsoft.com/en-us/help/2925854/cannot-remove-an-rd-host-from-an-rds-deployment

По вашей ссылке описана ситуация, когда сервер аж из AD удалили, а про ферму позабыли. :) Выстрелить себе в ногу всегда можно, это бесспорно.

Вы немного передергиваете. Удалить выключенный сервер из фермы можно, само удаление проходит с предупреждениями, но доходит до конца.
В статье говорится про ситуацию, когда в ферме есть выключенный сервер и его учетка удалена в AD. Вы часто такое делаете?
Да, дезинформировал всех. Сервер действительно выходит удалить. Может еще сессии научите гасить на зависшем сервере?

Маленькие уточнения


Так как клиент mstsc не передаёт в куки больше 9 символов, нет смысла делать длинну более девяти


stick-table type string len 9 size 10240k expire 48h peers loadbalancer_replication

причем будет происходить реплика между пирами stick-table


peers loadbalancer_replication
peer spb-ts-haproxy-11 10.101.255.11:7778
peer spb-ts-haproxy-12 10.101.255.12:7778
peer spb-ts-haproxy-13 10.101.255.13:7778
peer spb-ts-haproxy-14 10.101.255.14:7778

Для резервирования HAproxy используйте keepalived (aka VRRP) назначаете общий IP адрес (так как это VRRP между хостами должен бегать мультикаст)


Чекать сервера можно таким образом (в одну строку)


server spb-ts-des-102 10.101.251.102:3389 weight 1 check inter 2000 rise 2 fall 3 minconn 0 maxconn 0 on-marked-down shutdown-sessions verify none

Если коллекция одна то можно заюзать ключ реестра DefaultTsvUrl
а что делать если коллекций 2+ и нужно что б юзерыдля подключния использовали только RR DNS имени брокера ??

На совсем понимаю зачем костыли, если все работает «из коробки»? На чем экономить собираетесь? Если у вас мимнимум — 2 железяки — подымите на них виртуализацию и на каждом из них по шлюзу+броекру+вебу и вторым — сессионный хости либо приложения. Лицензия Windows Server Standard покрывает 2 виртуалки на хосте. Эконом-вариантов — море. Только на DC не навесьте много. Из RDS инфраструктуры на них вполне нормально работают Licensing server — проверено.

Есть N групп юзеров. На кажду группу по 6-10 хостов. Хочу в рамках 1го НА-брокера получить 1 (ну накрайняк N штук) адрес входа для юзеров который они будут вводить в RPD-клиенте. Как? Поднимать на каждую группу свою ферму?

повести разные ИП адреса на HAproxy и с помощью DNS разрулите

Публикация созданных для каждой из групп, RD Collection, состоящих из нужных хостов, на RD Web Access (1 адрес входа).
Штатные средства WS 2012R2.
прошу прощения, данная штукенция в 2012 сдюжит полторашку (1500) клиентов? А-то в 2012 без r2 web был узким местом, ещё и его приходилось балансировать.
Разумеется, Web Access, нужно будет балансировать через NLB, не только для разпределения нагрузки, но и, в первую очередь — для отказоустойчивости.

нет Remote App — есть полноценные сеансы на RDSH

в данном решении нет UDP и heathcheck, из-за этого я остановился на nginx.
а чё тут рассказывать, хотя бы тупой tcp heathcheck github.com/yaoweibin/nginx_upstream_check_module (некоторые заморачиваются с рдп клиентом), и stream помимо TCP 3389 ещё и на udp, прокатывает даже для NComputing vSpace, а уж HA на линуксах изобразить — проще простого.
Sign up to leave a comment.

Articles