СТАНИСЛАВ ШПАК, более 5 лет занимается сопровождением Active Directory и Windows-серверов. Имеет сертификаты MCSE по Windows Server 2000/2003
Терминальные службы
Установка, печать и балансировка нагрузки
Технология терминального сервера и тонких клиентов была уже далеко не новой в год выхода Windows 2000, где она впервые появилась как часть операционной системы от Microsoft (лицензированной, кстати, у Citrix). В клиентской ОС встроенная возможность удаленного подключения на базе терминального сервиса появилась впервые в Windows XP (клиентские части для Windows 98 и Windows 2000 устанавливались отдельно). В Windows 2003 реализация терминальных служб не очень далеко ушла от предшественницы. Но в Windows Server 2008 решили это исправить. По крайней мере, в старый добрый терминальный сервис внесли столько новшеств, что на их полное рассмотрение потребуется книга, а не статья. Поэтому тут я расскажу только о том, что мне показалось наиболее важным и, главное, что уже успел проверить на практике. Те, кто работает с продуктами Citrix, могут справедливо сказать, что многие из «новшеств» уже были реализованы до Microsoft, но речь мы будем вести не о Citrix.
Терминальный сервер: апгрейд или чистая установка?
Разумеется, чистая установка всегда лучше, так как позволяет начать жизнь с нового листа. Однако иногда хочется, или даже необходимо, сохранить настройки и ПО сервера. В любом случае надо иметь в виду, что для терминального сервера с Windows Server 2008 потребуется сервер лицензий также под управлением Windows Server 2008. Существует обратная совместимость: сервер лицензий Windows Server 2008 может обслуживать серверы терминалов под Windows 2008, 2003, 2003 R2 и 2000, однако обратное неверно. Как вариант решения этой проблемы можно произвести апгрейд и сервера лицензирования, но затем потребуется его повторная активация [2].
Требования к клиентскому компьютеру
Для подключения к терминальному серверу в Windows XP, 2003, Vista используется программа Remote Desktop Connection («Подключение к удаленному рабочему столу»), ярлык которой обычно располагается в «Пуск -> Программы -> Стандартные -> Связь» (версия RDC 6.1 держит свой ярлык уже в «Пуск -> Программы -> Стандартные»). Можно подключаться к терминальному серверу с помощью любой версии RDC (если на самом сервере не настроены ограничения), однако чтобы воспользоваться всеми новшествами Windows Server 2008, потребуется версия RDC 6.0 или 6.1 (версии 6.0.6000 или 6.0.6001). Кроме того, если вы захотите использовать новые возможности печати, то придется установить .NET Framework 3.0 SP1 или выше. Все это можно свободно скачать с сайта Microsoft.
Установка терминального сервера
Если вы выполнили чистую установку Windows Server 2008 на новый компьютер, то по умолчанию на этом сервере не установлено ни одной роли, в том числе и терминального сервера. Чтобы сервер начал обслуживать клиентов в качестве терминального, нужно добавить соответствующую роль через оснастку Server management («Управление сервером») или вручную запустить мастер добавления роли сервера. Здесь и далее предполагается, что вы используете полную версию Windows Server 2008, а не Core Server. В качестве роли следует выбрать Terminal Services и далее выбрать необходимую службу роли (role service) из доступного списка (см. рис. 1). Для установки основного функционала терминального сервера достаточно выбрать первую опцию – Terminal Server («Сервер Терминалов»). При выборе каждого пункта справа появляется краткое описание, что особо удобно для тех, кто сначала предпочитает устанавливать что-то, а лишь потом читать инструкцию.
Рисунок 1. Установка терминального сервера
Далее следует предупреждение о том, что если на сервере установлены какие-то программы, то они могут не работать в многопользовательской среде, и рекомендуется в этом случае провести удаление и повторную установку таких программ. Далее нужно выбрать, хотим ли мы использовать Network Level Authentication («Проверка подлинности на уровне сети»). Выбор этой опции повышает безопасность, однако в качестве клиентов можно использовать только ОС Windows Vista или Server 2008. Вопрос на следующем экране о режиме лицензирования можно отложить на потом, в течение 120 дней вы будете иметь полнофункциональный терминальный сервер, а за это время можно определиться и с режимом лицензирования, и с установкой сервера лицензий. На последнем шаге можно выбрать пользователей или группы пользователей, которым будет разрешен вход на сервер через удаленный рабочий стол. Группа «Администраторы» сюда уже включена. Так же, как и в Windows Server 2003, если вы планируете использовать удаленный рабочий стол только для администрирования, то совсем не обязательно устанавливать на него роль терминального сервера. Два удаленных подключения от членов группы локальных администраторов допустимы и без этого, достаточно разрешить подключение через удаленный рабочий стол в свойствах системы (там же, где и в Windows Server 2003).
Нажав Install и дождавшись установки компонентов, вам потребуется перезагрузить сервер.
После перезагрузки у вас будет полноценный терминальный сервер с базовым функционалом. В Windows Server 2008 теперь поддерживаются такие приятные мелочи, как пользовательское разрешение экрана (вплоть до размера 4096x2048), поддержка нескольких мониторов, сглаживание шрифтов, функция приоритезации данных (которая выделяет более высокий приоритет трафику от экрана, клавиатуры и мыши над трафиком печати и передачи файлов, что не дает терминальной сессии «замораживаться» при печати больших файлов) и многое другое [3]. Однако особо я бы отметил два новшества – Single Sign-On (единый вход) и печать.
Первое позволяет доменным пользователям, войдя в систему, производить вход на сервер терминалов, не вводя дополнительно учетных данных. Почему это может быть важно, я скажу чуть ниже, а вот новшества печати заслуживают того, чтобы поговорить о них отдельно.
Печать из терминальной сессии
Когда количество клиентов терминального сервера превышает несколько десятков и при этом используется парк из различных моделей принтеров, то это начинает создавать головную боль администратору. Ведь для того чтобы клиент мог печатать из своей терминальной сессии на свой локальный принтер, на сервере должен быть установлен драйвер этого принтера. Чем больше используемых моделей – тем больше драйверов. А это плохо сказывается не только на быстродействии, но и на стабильности сервера. Отчасти положение можно спасти так, как было описано в статье [4], отчасти – используя универсальный драйвер печати (для некоторых моделей принтеров HP), отчасти – осуществив подстановку драйверов на уровне сервера [5], однако эти методы кардинально не исправляют ситуацию. Похоже, в Microsoft тоже озадачились этой проблемой, и в результате в Windows Server 2008 Terminal Services появился универсальный драйвер печати Terminal Services Easy Print.
Теперь при подключении клиента к серверу терминалов система просматривает установленные на клиентском компьютере принтеры и пытается сначала установить для них в удаленном сеансе драйвер Terminal Services Easy Print. Только если это не удается, будет произведен поиск драйвера на сервере, и в случае его отсутствия принтер подключен не будет. Это поведение можно изменить через групповую политику Use Terminal Services Easy Print printer driver first («Использовать в первую очередь драйвер принтера Easy Print служб терминалов») в разделе Computer Configuration -> Administrative Templates -> Windows Components -> Terminal Services -> Terminal Server -> Printer Redirection («Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы терминалов -> Сервер терминалов -> Перенаправление принтеров»). Если перевести ее в состояние Disabled («Отключено»), сначала будет произведен поиск драйвера на сервере и только потом попытка установить для принтера драйвер TS Easy Print. В этом же разделе есть полезная политика Redirect only the default client printer («Перенаправлять только используемый по умолчанию принтер клиента»), в состояние Enabled («Включено») она позволяет подключать при входе на сервер только принтер по умолчанию клиента.
Что касается драйвера TS Easy Print, то, по заверениям Microsoft, он должен обеспечивать тот же набор возможностей, что и локальный драйвер, поскольку при вызове окна настроек принтера в удаленном сеансе вызывается окно с локальными настройками (см. рис. 2). На рисунке видно, что окно свойств принтера располагается поверх окна удаленного подключения, то есть оно открывается локально у клиента.
Рисунок 2. Из удаленного сеанса открывается окно настроек локального принтера
Из неприятностей, которые могут вас ожидать с печатью из Windows Server 2008 Terminal Server, можно отметить то, что не происходит перенаправления LPT-порта при подключении к удаленному рабочему столу. Тем, кому нужна именно поддержка LPT, можно попробовать обратиться к странице [6], где рассматривается решение этой проблемы.
Попытка подключения принтера через драйвер TS Easy Print при входе на сервер включена по умолчанию, поэтому если этого не происходит, проверьте, установлен ли на клиентском компьютере .NET Framework (версия 3.0 SP1 или выше) и RDC 6.1 (именно 6.1, версия 6.0 TS Easy Print не поддерживает).
Однако, кроме новшеств основной функциональности терминального сервера, в Windows 2008 появились и некоторые дополнительные нововведения, реализованные через дополнительные службы ролей. Мы их видели при установке роли терминального сервера, к ним относятся:
TS Licensing – лицензирование служб терминалов;
TS Session Broker – посредник сеансов служб терминалов;
TS Gateway – шлюз служб терминалов;
TS Web Access – веб-доступ к службам терминалов.
Некоторые из этих служб уже так или иначе были реализованы ранее (например, лицензирование и посредник служб терминалов), остальные являются совершенно новыми. Обратимся сначала к старым знакомым службам и посмотрим, что нового предлагает нам в их реализации Server 2008.
TS Licensing
Эта служба присутствовала и в более ранних версиях Windows Server, поэтому не буду на ней останавливаться очень подробно. Из нового, о чем стоит упомянуть, появилось следующее:
- возможность отзыва выданных лицензий;
- возможность отслеживания выданных лицензий в режиме Per-User (если сервер лицензирования работает в доменном режиме, а не в режиме рабочей группы).
Ну и, конечно же, надо помнить о том, что для лицензирования сервера терминалов под управлением Windows Server 2008 нужен сервер лицензирования, также работающий под этой версией ОС.
TS Session Broker
Это логическое продолжение службы, известной в Windows Server 2003 как Terminal Services Session Directory, которая по умолчанию присутствовала в любой системе, но была отключена, так как становилась полезной только при работе кластера из нескольких терминальных серверов. Достаточно было включить эту службу и настроить каждый из терминальных серверов на работу с ней (через оснастку Terminal Server Configuration в разделе Server Settings). В результате при переподключении клиента к кластеру служба всегда перенаправляла его на тот сервер, где уже существовала запущенная от имени этого пользователя сессия, если таковая имелась. Это было удобно при разрывах связи между клиентом и сервером и исключало возможность запуска нескольких терминальных сессий на разных серверах кластера от имени одного и того же пользователя.
В реализации Windows Server 2008 пошли несколько дальше. Во-первых, служба была переименована в Terminal Server Session Broker (Посредник служб терминалов), во-вторых, она становится доступной только после установки соответствующей сервисной роли, а в-третьих, что самое важное, на мой взгляд, в функционал службы добавлена балансировка нагрузки кластера.
Итак, как это работает.
Допустим, у вас есть несколько терминальных серверов и вы хотите включить балансировку нагрузки так, чтобы сессии пользователей равномерно распределялись между серверами. Сделать это можно несколькими способами:
- Самый простой – это использовать DNS Round Robin (включено по умолчанию в каждом DNS-сервере от Microsoft). В DNS прописывается общее (кластерное) имя, с которым связываются IP-адреса всех терминальных серверов. После этого при обращении клиентов к удаленному рабочему столу по этому имени DNS-сервер будет последовательно выдавать IP-адреса всех терминальных серверов. Минусом этого способа является кэширование DNS-записей, что не позволит равномерно распределить сессии по терминальным серверам. Кроме того, при недоступности сервера получение следующего IP-адреса произойдет только по истечении 30-секундного тайм-аута.
- Другой способ – использовать балансировку нагрузки Windows (WNLB) или сторонних разработчиков. Это более гибкий способ, позволяющий точнее распределить сессии, однако тоже не лишен некоторых недостатков. Их рассмотрение выходит за рамки статьи, однако я готов пообщаться на эту тему на форуме журнала (www.samag.ru/forum).
- В Windows Server 2008 можно использовать TS Session Broker.
Чтобы воспользоваться третьим пунктом, нужно, чтобы на всех терминальных серверах, которые будут работать в качестве кластера, была установлена Windows Server 2008. Служба TS Session Broker не требует никакого конфигурирования, а вот на сервере потребуется задание некоторых параметров. Запустите оснастку Terminal Services Configuration («Конфигурация служб терминалов») и в разделе Edit Settings («Изменить настройки») дважды щелкните на пункт Member of farm of TS Session Broker («Член фермы в посреднике служб терминалов») (см. рис. 3).
Рисунок 3. Конфигурация служб терминалов
В появившемся окне (см. рис. 4) потребуется:
- установить опцию Join a farm in TS Session Broker («Присоединиться к ферме в посреднике служб терминалов»);
- указать имя или адрес сервера с установленной службой роли TS Session Broker;
- указать общее имя фермы серверов. Это может быть имя, отличное от того общего имени, по которому клиенты будут обращаться к серверам, – оно служит только лишь для идентификации фермы на сервере-посреднике служб терминалов в том случае, если сервер обрабатывает несколько ферм. Однако во избежание путаницы рекомендуется задать имя фермы серверов такое же, как и общее имя для обращения клиентов к ферме (которое должно быть зарегистрировано в DNS вручную либо прописано в файлы host на клиентах);
- указать опцию Participate in Session Broker Load-balancing («Участвовать в балансировке нагрузки посредника»). Без этого балансировка нагрузки не включится, а будет происходить только перенаправление пользователей к их существующим сессиям, как при использовании Windows Server 2003;
- указать относительный весовой коэффициент данного сервера в ферме. Так как это относительная величина, то суммарный вес всех серверов может превышать 100. Например, на сервер с коэффициентом 50 будет приходиться в три раза меньше пользовательских сессий, чем на сервер с коэффициентом 150;
- опцию Use IP adress redirections («Использовать перенаправление IP-адресов») рекомендуется установить (по умолчанию). О ней я скажу позже;
- наконец нужно указать локальный IP-адрес для подключения (необходимо в том случае, если на сервере используется несколько сетевых карт или установлено несколько IP‑адресов).
Сделав аналогичные настройки на всех серверах (серверы под управлением Windows 2003 не поддерживаются), мы получим ферму терминальных серверов с балансировкой нагрузки, которая будет работать следующим образом (далее для примера возьму имена серверов, указанных на рис. 4).
Рисунок 4. Конфигурирование терминального сервера как члена фермы серверов
Клиент подключается к удаленному рабочему столу по общему имени FARM. Общее имя разрешается в какой-либо IP-адрес одного из серверов фермы, к которому затем и пытается подключиться клиент. Сервер, приняв запрос на подключение, запрашивает учетные данные пользователя, а затем обращается к серверу SRV67 с установленной службой TS Session Broker. Сервер SRV67 хранит у себя информацию о состоянии всех терминальных сессий серверов фермы, такую как ID сессии, связанные с ней имя пользователя и имя сервера фермы, на котором существует эта сессия. Если для указанного пользователя существует сессия на одном из серверов фермы, то пользователь перенаправляется на этот сервер и в результате подключается к своей существующей сессии. Если же такой сессии нет, то SRV67 возвращает IP-адрес сервера с наименьшим количеством клиентских сессий (с учетом такого фактора, как весовой коэффициент сервера). В результате клиент перенаправляется на этот сервер.
Если по каким-то причинам перенаправление клиента по IP-адресу невозможно, то можно сбросить опцию Use IP adress redirections. При этом перенаправление будет происходить посредством формирования специального токена (routing token). Однако Microsoft рекомендует использовать этот режим только в случае, если в качестве дополнительного решения для балансировки нагрузки используются средства, которые умеют работать с такими токенами. Замечу, что WNLB к таковым не относится.
Может возникнуть вопрос, для чего использовать дополнительные средства балансировки нагрузки, если TS Session Broker сам умеет проводить балансировку, но, несмотря на это, Microsoft рекомендует использовать его в сочетании с другими методами? Представьте себе, что в связи со сбоем электропитания или дружным началом рабочего дня несколько десятков клиентов пытаются обратиться к ферме терминальных серверов. Один сервер в состоянии обслужить только 16 одновременных подключений. Если не использовать дополнительную балансировку, то остальные клиенты получат ошибку подключения. Поэтому вы сами должны решить исходя из количества обслуживаемых клиентов, нужна ли дополнительная балансировка или нет.
Могут также возникнуть случаи, когда нужно выключить один из серверов фермы на обслуживание. При не форс-мажорных обстоятельствах для этого служит механизм drain-stop (приостановка). Перевести сервер в это состояние можно в разделе Edit Settings окна Terminal Server Configuration, дважды щелкнув пункт User Logon Mode («Режим входа пользователя в систему») (на рис. 3 этот пункт подчеркнут синим) и установив опцию Allow reconnections, but prevent new logons («Разрешить переподключения, но запретить новые попытки входа»). При этом пользователи смогут работать и подключаться к имеющимся на сервере сессиям, однако новые пользователи на сервер входить уже не будут. Таким образом, через некоторое время сервер будет освобожден от пользовательских сессий.
А теперь поговорим о неприятных неожиданностях, которые обнаруживаются с использованием TS Session Broker.
TS Session Broker – подводные камни
Вот некоторые особенности, которые при внедрении TS Session Broker стоит иметь в виду и быть к ним готовым.
- Иногда, работая с фермой серверов, есть необходимость подключиться к какому-то конкретному серверу. При включении балансировки через TS Session Broker этого нельзя сделать. Для администраторов существует лазейка, а вот если вы простой пользователь – то, увы. С одной стороны, это можно рассматривать как защиту от слишком умных пользователей, которые иногда любят подключаться к терминальным серверам в обход балансировки, с другой – даже вы сами не сможете это сделать для пользователя, если возникнет такая необходимость. Будучи локальным администратором терминального сервера, вы можете подключиться удаленно к нужному вам серверу (несмотря на включенный TS Session Broker или режим запрета новых подключений), вызвав RDP-клиент с параметром /admin (mstsc.exe /admin).
- Если клиенты используют ОС ниже Windows Vista, то, возможно, им придется дважды вводить свои учетные данные при подключении к ферме терминальных серверов с включенным TS Session Broker. Вызвано это тем, что такие ОС не могут использовать функцию «единого входа» (single sign-on), о которой я писал выше. Соответственно первый раз учетные данные нужно будет ввести при подключении к серверу фермы, который затем обратится к серверу TS Session Broker и перенаправит клиента на нужный сервер, где клиенту придется повторно ввести свои учетные данные уже при подключении к конечному серверу.
- Когда я проводил тестирование новых возможностей балансировки, то обнаружил, что при выключении одного из серверов фермы информация об этом попадает на сервер TS Session Broker почему-то далеко не сразу. В течение приблизительно 5 минут после того как один из серверов фермы уже стал недоступен, TS Session Broker все равно продолжает перенаправлять клиентов на этот сервер. Соответственно работа пользователей будет прервана на это время.
***
Новая версия терминального сервера от Microsoft производит приятное впечатление. Появление универсального драйвера печати позволяет избавиться от головной боли с драйверами принтеров, а новый подход к балансировке нагрузки – от необходимости настройки и конфигурирования WNLB (которая не всегда так проста, как кажется на первый взгляд). Разумеется, есть и не совсем приятные особенности, но уже вам решать – стоит ли предпринимать переход на Windows Server 2008 или нет.
- Бирюков А. Терминальные службы в Windows Server 2008. //Системный администратор, №5, 2008 г. – С. 12-16.
- Activate a Terminal Services license server – http://go.microsoft.com/fwlink/?linkid=101640.
- Terminal Services Core Functionality – http://technet.microsoft.com/en-us/library/cc772366(WS.10).aspx.
- Коробко И. Оптимизация сетевой печати. //Системный администратор, №11, 2008 г. – С. 14-20.
- Статья KB239088 – http://support.microsoft.com/kb/239088/en-us.
- Перенаправление LPT-порта в Server 2008 (терминальний режим) – http://social.technet.microsoft.com/Forums/ru-RU/ws2008ru/thread/fc593264-592c-4fd2-94f1-22a50031602e.