воскресенье, 24 января 2010 г.

TS Session Broker (Посредник служб терминалов)

Введение

Terminal Services Session Broker (посредник сеансов служб терминалов) - служба, позволяющая объединить несколько терминальных серверов в ферму. В предыдущей версии операционной системы подобной функциональностью обладала служба Terminal Server Session Directory. Она позволяла восстанавливать незавершенные сеансы при повторном соединении пользователя. В Windows Server 2008 эта служба была переименована, а также в ней добавился функционал по балансировке подключений. С помощью TS Session Broker можно обеспечить не только равномерную (по числу сессий) нагрузку на терминальные сервера, но и задать удельный вес сервера в ферме. Это позволяет направить большее число сессий на более производительные серверы.

Принцип работы

При подключении пользователя к ферме терминальных серверов следует разделять два этапа балансировки. На этапе первоначального подключения терминальные сессии распределяются на один или несколько серверов фермы. Это можно сделать встроенными средствами ДНС при использовании технологии round robin. В этом случае создается несколько записей с одним и тем же именем, ссылающихся на IP-адреса различных терминальных серверов. Также можно использовать NLB-кластер или аппаратную балансировку нагрузки.

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

При выборе сервера проверяется наличие у пользователя незавершенного сеанса. Если такой сеанс найден, терминальная сессия восстанавливается. Если у пользователя нет сеансов ни на одном из серверов фермы, он будет перенаправлен на сервер с наименьшим числом сессий. Сравнение числа сессий происходит с учетом удельного веса каждого сервера. Например, если в ферме находится два сервера с удельными весами 50 и 100, то на первый сервер будет перенаправляться в два раза меньше сессий чем на второй.

Файлы TS Session Broker находятся в каталоге: %systemroot%\system32\tssesdir. Информация о текущих соединениях хранится в базе данных tsesdir.edb. Для каждого сеанса определены:

  • имя сервера на котором установлена сессия,
  • идентификатор этой сессии (присваивается терминальным сервером в момент установки соединения),
  • логин пользователя,
  • домен, которому принадлежит пользователь,
  • протокол, использованный при соединении (RDP, ICA и.т.п.),
  • дата и время создания сессии,
  • дата и время отключения сеанса,
  • параметры разрешения (число пикселей по ширине и высоте),
  • глубина цвета,
  • идентификатор, определяющий является ли соединение полноэкранным рабочим столом или оно настроено на запуск единственной программы при открытии сеанса.

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

Расположение базы данных tsesdir.edb можно изменить с помощью ключа реестра WorkingDirectory, находящегося в ветке: HKLM\System\CurrentControlSet\Services\Tssdis\Parameters.

Иногда терминальные сервера приходится перезагружать в процессе технического обслуживания или по причине сбоя. Посредник сеансов служб терминалов должен определять такие ситуации и прекращать распределять сессии на недоступные сервера. Происходит это по следующему алгоритму.

  1. Посредник сеансов служб терминалов обнаруживает неудачное перенаправление сессии.
  2. Через некоторый интервал времени (по умолчанию минуту) он начинает пинговать "подозрительный" сервер.
  3. Если сервер остается не доступен (не отвечает на пинги) в течении заданного числа попыток, он удаляется из базы данных посредника сеансов служб терминалов.
  4. При перезапуске службы tssdis состояние базы данных восстанавливается.

Параметры этого процесса можно гибко настроить с помощью ключей реестра, находящихся в ветке: HKLM\System\CurrentControlSet\Services\Tssdis\Parameters. Рассмотрим их более подробно.

  • PingMode. По умолчанию равен 0. Рекомендуется не изменять этот параметр. Остальные значения используются исключительно в целях отладки.
  • TimeServerSilentBeforePing. По умолчанию равен 60. Определяет промежуток времени в секундах по истечении которого посредник сеансов служб терминалов начинает пинговать терминальный сервер после неудачной попытки подключения.
  • TimeBetweenPings. По умолчанию равен 10. Устанавливает число секунд между попытками пинга.
  • NumberFailedPingsBeforePurge. По умолчанию равен 3. Задает число попыток пропинговать сервер перед удалением из базы данных.
  • RecoverWhenStart. По умолчанию равен 1. Определяет необходимость восстановления базы данных при перезапуске службы tssdis.

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

Установка и настройка

Подробную инструкцию по установке и настройке посредника сеансов служб терминалов можно найти на сайте Microsoft Technet. Условно его можно разбить на три основных этапа.

  1. Установить роль терминального сервера со службой TS Session Broker.
  2. Добавить терминальные сервера в группу Session Directory Computers (локальная группа на сервере с установленным TS Session Broker).
  3. Настроить терминальные сервера на использование TS Session Broker.

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

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

"Подключение не удается установить, поскольку удаленный компьютер, с которым установлена связь, отличается от указанного пользователем. Это может быть связано с тем, что запись в кэше DNS устарела. Попробуйте использовать IP-адрес вместо имени компьютера."

Подключение по имени сервера возможно лишь в случае если балансировка не потребует перенаправления. При подключении по IP-адресу сервера или по имени фермы сеанс будет распределен посредником сеансов служб терминалов. Единственный способ подключения, минуя балансировку - использование mstsc с ключом /admin. Этот метод аналогичен подключению к консоли на сервере Windows 2003 и требует наличия у пользователя административных прав.

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

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

Особенности практического использования

Этот раздел посвящен практическим нюансам использования TS Session Broker. Информация получена из практического опыта автора и обсуждений на форумах Technet.

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

http://social.technet.microsoft.com/Forums/en-US/winserverTS/thread/ed624e86-c692-481c-84eb-f9026b574dd9

http://social.technet.microsoft.com/Forums/en/winserverTS/thread/53cdb3ee-7c73-4cda-aff9-afffec4b94f3

Проблема связана с тем, что сервер, получив учетные данные пользователя при первоначальном соединении, перенаправляет его на другой терминальный сервер. При этом учетные данные не передаются и для входа на перенаправленный сервер пользователь вынужден вводить их второй раз. Для Windows XP с пакетом обновлений SP3 и более старших версий операционных систем это может быть решено с помощью Cred SSP. Данная технология позволяет программам передавать учетные данные пользователя с локального компьютера. Прочитать об этом можно в статье: KB951608

Более подробно это будет рассмотрено в одном из следующих материалов.

Иногда возникает ситуация когда посредник сеансов служб терминалов перестает направлять соединения на один или несколько серверов в ферме. Помогает перезапуск службы tssdis, но через некоторое время проблема возникает снова. Для устранения этого можно воспользоваться статьей KB955365.

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

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

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

В качестве решения можно увеличить число одновременных подключений. Это устанавливается ключом реестра LB_MaxNumberOfPendingRedirections, находящегося в ветке

HKLM\SYSTEM\CurrentControlSet\Services\Tssdis\Parameters

Если такого ключа нет, его необходимо создать.

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

Для сохранения лога в файл необходимо добавить ключ TraceOutputMode со значением 3 в ветку HKLM\SYSTEM\CurrentControlSet\Services\Tssdis\Parameters

и перезапустить службу. Файл лога по умолчанию находится в каталоге: : %systemroot%\system32\tssesdir. Туда заносятся следующие события:

  • Запуск службы TS Broker;
  • Остановка службы;
  • Присоединение сервера к ферме;
  • Выход сервера из фермы;
  • Вход пользователя;
  • Отключение пользователя;
  • Восстановление сеанса;
  • Выход пользователя;
  • Сообщения системного журнала событий связанные с работой посредника сеансов служб терминалов.

В обычном режиме работы логирование лучше отключать. Для этого параметр TraceOutputMode надо установить равным 0.

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

Посредник сеансов служб терминалов необязательно устанавливать на терминальный сервер. Это может быть любой другой Windows 2008 сервер организации.

Контроль за корректным распределением терминальных сессий удобно осуществлять с помощью пакета управления терминальными серверами в System Center Operations Manager. График распределения сессий между терминальными серверами позволяет своевременно заметить сбои в балансировки и принять соответствующие меры для их устранения.

Дополнительные ресурсы

6 комментариев:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Спасибо за статью! Очень толково написано!

    ОтветитьУдалить
  4. А можно автору задать вопрос ?

    Есть 2 домена
    Один "ikg.local" старый на 2000 серввере
    Второй "newikg.local" новый на 2012
    недавно поставили.
    Между доменами сделали доверительные отношения в две стороны. Оно тоже работает.
    В старом домена есть 3 терминальних сервера и все работает
    При попытке даль доступ пользователям из нового домена "newikg.local" доступ к опупликованым прилодения на терминальном сервере 2012 который находится в старом домене "ikg.local"
    пишет о ошибке доверия и в журнале
    TS Session Broker (Посредник служб терминалов) появляется ошибка с кодом 1306

    Тут вот пока читаю как с етим боротся
    http://www.stollfus.com/?p=519

    ОтветитьУдалить
  5. Я так благодарен Elegantloanfirm за помощь в получении кредита в размере 600 000 долларов США, помогая специалисту по кредитам Рассу Гарри, и я всегда благодарен вам. Моя жизнь изменилась, мои деньги закончились, теперь у меня есть коммерческий бизнес, который я использовал, чтобы заботиться о потребностях моей семьи. Я благодарен вам, мистер Русь, и Бог благословит вас. Вы можете связаться с ними для получения финансовой помощи по электронной почте: Elegantloanfirm@hotmail.com для получения финансовой помощи.

    ОтветитьУдалить