воскресенье, 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. График распределения сессий между терминальными серверами позволяет своевременно заметить сбои в балансировки и принять соответствующие меры для их устранения.

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

суббота, 23 января 2010 г.

Смена файловых ассоциаций на терминальном сервере

Введение

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

Данная статья посвящена смене файловых ассоциаций на терминальном сервере. В результате этой операции изменяются приложения, используемые пользователем для открытия заданных типов файлов. Описание процесса изменения файловых ассоциаций основано на примере файлов изображений *.tif и программы Imagine.

Немного предыстории. В связи с нестабильной работой фотоальбома Windows на терминальных серверах, было принято решение об использовании альтернативного программного обеспечения для просмотра изображений. На серверах уже был установлен Microsoft Office 2007. Однако, Microsoft Office Picture Manager не подходил из-за отсутствия поддержки просмотра многостраничных tif-файлов. Кроме того, при попытке печати из Microsoft Office Picture Manager и фотоальбома Windows возникала загадочная ошибка о недостатке оперативной памяти.

error

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

В качестве такового было выбрано Imagine

http://en.wikipedia.org/wiki/Imagine_(graphics_software)

Из его плюсов можно отметить:

· низкие требования к ресурсам сервера,

· отсутствие предпросмотра при печати изображений (на терминальных серверах это приводит к излишней трате трафика),

· русскоязычный интерфейс,

· поддержку просмотра многостраничных tif,

· интеграция с проводником Windows.

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

Смена ассоциаций

Стандартными утилитами для выполнения подобного рода операций являются:

assoc и ftype.

Для смены ассоциации для открытия файлов с расширением .tif достаточно выполнить следующие команды:

assoc .tif=Imagine.Document

ftype Imagine.Document="E:\Program Files\Imagine\Imagine.exe" "%1"

вместо Imagine.Document можно задать любой другой новый тип файлов.

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

http://blogs.technet.com/heyscriptingguy/archive/2009/03/27/quick-hits-friday-the-scripting-guys-respond-to-a-bunch-of-questions-03-27-09.aspx

в которой рекомендовалось создать vbs-скрипт подобного содержания:

Set objShell = WScript.CreateObject("WScript.Shell")

objShell.Run("%comspec% /K ftype TIFImage.Document =""C:\Program Files\MSPVIEW.exe"" ""%1"""), 1, True

Там же приводилась ссылка на официальную документацию:

http://technet.microsoft.com/ru-ru/library/ee156605(en-us).aspx

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

В качестве еще одного способа моей задачи предлагалось использование Group Policy Prefferences. Однако этот подход меня смутил, т.к. там ассоциации для файла создавались в разделе конфигурации компьютера и требовали указания массы параметров.

В итоге, решил попробовать сменить ассоциации через реестр. Для этого запустил Process Monitor и с его помощью отследил изменения, производимые в реестре. Они происходили в двух местах.

В ветке: HKEY_CURRENT_USER\Software\Classes\Applications создавался куст реестра, соответствующий Imagine, а ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif

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

Собрав все изменения в один reg-файл, проверил его работу по изменению ассоциации. Для этого вручную выбрал Microsoft Office Picture Manager для открытия данного типа файлов и импортировал созданный ранее reg-файл. В результате, получил ошибку о том, что не все данные были импортированы.

error2

Причиной подобной ошибки послужил запрет на изменение значений ветки реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice.

Этот запрет автоматически создавался системой после "ручного" выбора программы для открытия tif-файлов.

registry

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

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice]

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

После небольшой модификации получил скрипт и reg-файл, который добавил в логон-скрипт групповой политики при входе на терминальный сервер.

В заключении прилагаю содержимое reg-файла и vbs-скрипта

imagine.reg:

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice]

[HKEY_CURRENT_USER\Software\Classes\Applications\Imagine.exe]

[HKEY_CURRENT_USER\Software\Classes\Applications\Imagine.exe\shell]

[HKEY_CURRENT_USER\Software\Classes\Applications\Imagine.exe\shell\open]

[HKEY_CURRENT_USER\Software\Classes\Applications\Imagine.exe\shell\open\command]

@="\"E:\\Program Files\\Imagine\\Imagine.exe\" \"%1\""

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\OpenWithList]

"a"="Imagine.exe"

"MRUList"="a"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\OpenWithProgids]

"TIFImage.Document"=hex(0):

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice]

"Progid"="Applications\\Imagine.exe"

imagine.vbs:

Dim i,Shell,KeyValue,Keys(1,4)

set Shell = WScript.CreateObject("WScript.Shell")

Keys(0,0)="Progid"

Keys(0,1)="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice\"

Keys(0,2)="Applications\Imagine.exe"

Keys(0,3)="REG_SZ"

On Error Resume Next

For i=0 To UBOUND(Keys)-1

Shell.RegRead(Keys(i,1)&Keys(i,0))

if Err.Source="WshShell.RegRead" then

Set objShell = CreateObject("Wscript.Shell")

objShell.Run ("regedit /s E:\Program Files\Imagine\imagine.reg")

KeyValue=Keys(i,2)

else

KeyValue= Shell.RegRead(Keys(i,1)&"\"&Keys(i,0))

end if

Err.Clear

If KeyValue<>Keys(i,2) then

Set objShell = CreateObject("Wscript.Shell")

objShell.Run ("regedit /s E:\Program Files\Imagine\imagine.reg")

End If

Next

Обзор Служб Терминалов в Windows 2008 Server

Введение
Организация удаленного доступа к информационным ресурсам является одной из наиболее актуальных задач системных администраторов крупных и средних предприятий. Этот сервис наиболее востребован для пользователей удаленных офисов и филиалов, а также для сотрудников, работающих за пределами корпоративной сети. В большинстве случаев данную проблему можно решить путем внедрения системы терминальных серверов. С их помощью пользователи могут работать с корпоративными приложениями, а также сетевыми ресурсами, расположенными в локальной сети предприятия. Новые компоненты, появившиеся в Windows Server 2008, позволяют выйти за рамки традиционных представлений об удаленном доступе и значительно расширить функциональность терминальных серверов. В качестве ключевых технологий для работы с удаленным рабочим столом можно выделить:

  • TS Session Broker;
  • TS Gateway;
  • TS RemoteApp;
  • TS Web Access;
  • TS Easy Print;
  • Single Sign-on.

Рассмотрим их более подробно.

TS Session Broker
Если удаленный доступ требуется одновременно многим пользователям, то одного терминального сервера может быть недостаточно. В этом случае можно организовать подключение с помощью Terminal Services Session Broker (посредник сеансов служб терминалов). Эта служба обеспечивает балансировку сеансов между терминальными серверами, находящимися в ферме. Кроме того, в случае если пользователь отсоединился, не завершив работы, при следующем подключении его перенаправит в существующий сеанс. Дополнительным преимуществом является возможность подключения по единому имени. Другими словами, пользователи не должны каждый раз выбирать имя сервера к которому они подключаются. Достаточно в настройках клиента удаленного рабочего стола указать имя фермы терминальных серверов. Всю дальнейшую работу по подключению возьмет на себя TS Session Broker.


TS Gateway
Для пользователей, работающих за пределами корпоративной сети, стало возможно более безопасное подключение к терминальному серверу без установки vpn-подключения. В этом случае Terminal Services Gateway (шлюз служб терминалов) выполняет роль посредника. Принимая соединения из вне, он перенаправляет их на нужный пользователю терминальный сервер. С помощью настроек безопасности возможно ограничить набор терминальных серверов к которым разрешено подключаться подобным образом. Интеграция с NAP позволяет задать требования к компьютеру пользователя и перед подключением проверить на нем: актуальность системных обновлений и базы антивируса, состояние брандмауэра. Отдельно следует отметить, что для подключения по умолчанию необходим лишь 443 порт. Это особенно актуально при работе в публичных местах где разрешен лишь доступ по ограниченному набору портов.


TS RemoteApp
Terminal Services RemoteApp (удаленные приложения) упрощают работу с приложениями, установленными на терминальном сервере. Теперь они могут использоваться практически так же как и локально установленные программы. Удаленные приложения могут распространяться с помощью msi-пакетов и интегрироваться с локальной операционной системой. В частности, ярлыки этих приложений будут находиться в меню "Пуск" или на рабочем столе локального компьютера, а также использоваться при открытии ассоциированных с ними типов файлов.


TS Web Access
Для предоставления доступа к удаленным приложениям можно использовать TS Web Access (веб-доступ к службам терминалов). В этом случае пользователи могут запускать опубликованные приложения из окна браузера, зайдя на внутренний сайт организации. Это значительно упрощает процесс распространения приложений и делает их доступней для конечного пользователя. Для работы через TS Web Access необходим доступ к терминальному серверу и клиент удаленного рабочего стола (версии не меньше 6.1).


TS Easy Print
Поддержка системы печати на терминальных серверах традиционно является "головной болью" системных администраторов. Установка различных версий драйверов для множества разнообразных принтеров зачастую приводит к частым сбоям службы диспетчера очереди печати, а в некоторых случаях даже к остановке самого сервера. Технология Terminal Services Easy Print позволяет избежать этого, используя универсальный драйвер. С его помощью, задания на печать формируются в виде xps-файлов и передаются на клиентский компьютер. На компьютере пользователя задание обрабатывается с помощью локально установленных драйверов и посылается на нужный принтер.


Single Sign-on
Одним из основных неудобств для пользователя, при использовании удаленных подключений, является необходимость ввода учетных данных при подключении к серверу. С помощью технологии Single Sign-on возможна автоматическая подстановка логина и пароля, введенных пользователем при локальном входе в систему. Это особенно удобно при использовании удаленных приложений. С помощью групповых политик можно определить для каких серверов может применяться данный способ аутентификации.


Заключение
В статье рассмотрены компоненты, входящие в состав служб терминалов Windows Server 2008. С их помощью значительно расширены возможности использования удаленного доступа. За счет использования новых технологий улучшена стабильность работы терминальных серверов. Кроме того, для конечного пользователя упрощен процесс использования как самих терминальных серверов, так и приложений опубликованных на них.
Данная статья носит обзорный характер. Более подробная информация о способе установке и настройке каждого из описанных элементов, а также опыт их практического использования будут изложены в следующих статьях цикла.


Дополнительные ресурсы
При подготовке статьи были использованы следующие интернет-ресурсы:


понедельник, 4 января 2010 г.

Публикация статей с конкурса Oszone.net

Хочу добавить ссылки на статьи, опубликованные мной ранее на сайте oszone.net в рамках конкурса Наш Выбор - Windows 7. Хотя занять призовое место и не получилось, участие принесло массу положительных эмоций. Особенно хотелось бы поблагодарить организатора конкурса - Вадима Стеркина. Его рецензии позволили значительно улучшить содержание статей и выявить в них массу грамматических ошибок.
Список статей:
Новые возможности подключения к удаленному рабочему столу в Windows 7 и Windows 2008 R2

Windows 7 в корпоративной среде Часть 1: Активация системы

Windows 7 в корпоративной среде Часть 2: Организация системы печати

Windows 7 в корпоративной среде Часть 3: Обзор системы обновлений


Технология BranchCache. Часть 1. Краткий обзор.


Технология BranchCache. Часть 2. Distributed Cache Mode.

Технология BranchCache. Часть 3. Hosted Cache Mode.


Технология BranchCache. Часть 4. Настройка брандмауэра клиентских рабочих станций.


Технология BranchCache. Часть 5. Настройка серверов.


Прозрачное кэширование и автономные файлы в Windows 7 и Windows 2008 R2