Дневник
29.01.2012Windows - лицензирование службы терминалов
Недавно столкнулся с проблемой активации клиентских лицензий для службы терминалов. Как выяснилось на практике: сервер терминалов Windows 2003 не может использовать клиентскую лицензию Terminal Services 2008 CAL, а других сейчас не продают. В службе поддержки Microsoft сказали, что необходимо провести "даунгрейд" лицензии. Перед тем, как делать это, я решил изучить теорию лицензирования службы терминалов получше. Итак, немного теории.
Лицензирование служб терминалов в Windows Server 2008 происходит так же, как в Windows Server 2003. Кроме Windows Server 2008 CAL, для доступа к функциям служб терминалов в Windows Server 2008 будет требоваться новая клиентская лицензия Terminal Services 2008 CAL (вместо Terminal Services 2003 CAL).
Семейство операционных систем Windows Server 2003 снабжено средством управления клиентскими лицензиями, известным как служба Terminal Server Licensing, которое позволяет серверам терминалов получать от серверов лицензий и управлять маркерами клиентских лицензий на доступ к серверу терминалов (TS CAL) для устройств и пользователей, подключающихся к серверам.
В работе службы Terminal Server Licensing задействованы следующие компоненты: сервер лицензий с активированной службой Terminal Server Licensing, центр сертификации Microsoft Certificate Authority и база данных License Clearinghouse, один или несколько серверов терминалов и их клиенты. Один сервер лицензий может обслуживать несколько серверов терминалов. В пределах одного домена или организации может работать один или несколько серверов лицензий.
Центр сертификации Microsoft Certificate Authority и License Clearinghouse - служба корпорации Майкрософт для активизации серверов лицензий и выдачи ключевых пакетов клиентских лицензий. Доступ к Microsoft Clearinghouse осуществляется с помощью средства администрирования "Лицензирование служб терминалов" или через Интернет, или путем заполнения формы на специальной веб-странице, или по телефону.
Сервер лицензий - это компьютер, на котором установлена служба лицензирования сервера терминалов. Сервер лицензий хранит все маркеры клиентских лицензий на доступ к серверу терминалов, которые выданы для группы серверов терминалов, и следит за их использованием. Один сервер лицензий может одновременно обслуживать несколько серверов терминалов. Для того, чтобы выдавать клиентским устройствам постоянные маркеры, сервер терминалов должен иметь соединение с активизированным сервером лицензий. Развернутый, но не активизированный сервер лицензий может выдавать только временные маркеры.
Сервер терминалов - это компьютер, на котором
установлена служба сервера терминалов. При включении сервер
терминалов сначала пытается связаться с серверами лицензий,
указанными в ключе реестра LicenseServers. Если это не удается, то
он начинает искать серверы по одному из вариантов.
- В домене с включенной службой каталогов Active Directory сервер
терминалов пытается обнаружить любые серверы лицензирования в
предприятии, осуществляя запрос по протоколу Lightweight Directory
Access Protocol (LDAP) следующего объекта в службе каталогов Active
Directory:
LDAP://CN=TS-Enterprise-License-Server,CN=,CN=sites,CN=configuration,DC=,DC=com.
- В домене с отключенной службой каталогов Active Directory сервер
терминалов осуществляет широковещательное обращение к почтовым
слотам для поиска любого сервера лицензий в подсети.
- При необходимости процесс обнаружения можно заменить ручной
установкой, указав на сервере терминалов предпочитаемый сервер
лицензий.
Сервер терминалов запоминает имена серверов лицензий и помещает их
в следующие ключи реестра:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSLicensing\Parameters\EnterpriseServerMulti
(Enterprise license servers),
HKEY_LOCAL_MACHINE\Software\Microsoft\MSLicensing\Parameters\DomainLicenseServerMulti
(Domain license servers).
Сервер терминалов под управлением Windows Server 2008 не взаимодействует с сервером лицензирования, работающим под управлением Windows Server 2003. Тем не менее, сервер терминалов с Windows Server 2003 может взаимодействовать с сервером лицензирования на базе Windows Server 2008. Поэтому у клиента, который использует серверы терминалов под управлением как Windows Server 2003, так и Windows Server 2008, должен быть сервер лицензирования под управлением Windows Server 2008.
Для работы в режиме сеансов клиенту Windows требуется
дополнительная клиентская лицензия на доступ к серверу
терминалов.
- Лицензия "на пользователя" позволяет одному пользователю
осуществлять доступ к серверному программному обеспечению с любого
числа устройств.
- Лицензия "на устройство" позволяет любому числу пользователей
осуществлять доступ к серверному программному обеспечению с одного
устройства.
В процессе лицензирования происходит соединение между клиентом и
сервером терминалов, а также между сервером терминалов и сервером
лицензий. Клиент сервера терминалов никогда напрямую не связывается
с сервером лицензий.
Когда сервер терминалов запрашивает маркер клиентской лицензии "на устройство" на доступ к серверу терминалов, а сервер лицензий не имеет соответствующего маркера, то сервер выдает клиенту временный маркер (если у устройства-клиента нет существующего маркера). Сервер лицензий следит за раздачей и прекращением срока действия временных маркеров. Временные маркеры дают администратору достаточно времени для установки постоянных маркеров на сервере лицензий.
До Windows Server 2008 лицензии "на пользователя" не отслеживались - было сложно узнать, соответствует ли использование лицензий "на пользователя" условиям лицензионного соглашения. В Windows Server 2008 можно легко отслеживать использование и создавать отчеты о том, сколько лицензий "на пользователя" было выдано при условии, что инфраструтура службы терминалов присоединена к домену.
В Windows Server 2003 было невозможно отозвать лицензию, выданную клиенту - cрок действия выданных лицензий автоматически истекал через случайное число дней в диапазоне от 52 до 89, и они становились частью пула доступных лицензий. Windows Server 2008 теперь имеет встроенную возможность отзыва лицензии, после которого она немедленно становится доступной.
Ссылки для изучения: Терминальные службы Windows 2003, Лицензирование Windows Server 2008.
25.01.2012Exchange - Удаленное администрирования сервера
Как известно, для управления Microsoft Exchange 2010 используются команды Power Shell. Более того, графическая консоль администрирования работает через Power Shell, преобразуя действия администратора в необходимые команды (которые, кстати, можно посмотреть прямо в графической оболочке при выполнении действий). Так же графическая консоль не отображает всех функций, которые могут потребоваться для администрирования, - некоторые команды можно выполнить только через командную строку Power Shell.
Администратор Exchange 2010 может столкнуться с проблемой
управления почтовой системы со своего компьютера: если у него
установлена 32-битная версия операционной системы, то установить
консоль управления Exchange 2010 не представляется возможным - ее
просто не существут для 32-битной системы. Неколько выходов из этой
истуации:
- использовать терминал (удаленный рабочий стол) для работы
непосредственно на почтовом сервере,
- установить 64-битную клиентскую систему и поставить консоль
управления Exchange 2010.
Если у администратора все же установлена 64-битная операционная система Windows 7, то установка консоли управления Exchnage 2010 может не потребоваться, так как есть возможность использовать удаленную сессию Power Shell для выполнения команд на почтовом сервере, но с клиентской машины.
Чтобы подключиться к серверу Exchange 2010, нужно открыть 64-битную консоль Power Shell и выполнить следующие 2 команды:
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri ` http://[Mail Server FQDN]/PowerShell/ -Authentication Kerberos
Import-PSSession $Session
Здесь [Mail Server FQDN] - это FQDN имя почтового сервера, на котором будут выполняться команды, например CASServer.domain.com.
После успешного выполения команд в консоли можно будет выполнять любые Exchange команды, как будто они выполняются на сервере.
20.11.2011Servers - Расчет памяти для терминального сервера
Недавно мне потребовалось проанализировать потребление памяти на терминальном сервере, чтобы оценить вместимость сервера по количеству одновременно работающих пользователей. Филиалы организации достаточно широко разбросаны географически, пользователи подключаются к сайту с базой данных по достаточно слабым каналам, поэтому мы установили клиент "1С: Предприятие" на терминальный сервер в основном филиале. Пользователи со своих клиентских машин через Удаленный рабочий стол работают на сервере, к ним на компьютеры возвращаются только разностные данные по перерисовке картинки рабочего стола сервера и задания печати с сервера на принтер, при обрыве соединения база данных не страдает и сессии к 1С не висят (рассматривалась работа 1С версии 7.7), при восстановлении соединения пользователь возвращается в свою сессиию.
Так как бизнес растет, то потребовалось оценить, сколько пользователей сможет принять сервер. При анализе работы сервера с текущей нагрузкой в течении двух суток при помощи счетчиков производительноти оказалось, что узкое место - это память, остальные параметры (процессорное время, нагрузка сети, использование диска) не поднимались даже до средних значений.
Итак, чтобы собрать данные, сколько же памяти расходует одна пользовательская сессия, я использовал следующий скрипт Power Shell (анализ производился когда на сервере еще оставалась свободная физическая память).
function Get-ProcessWithOwners() {
param (
[string]$SearchString = 'name like "%"',
[string]$Computer = "."
)
$processes = Get-WmiObject Win32_Process -Filter $searchString -ComputerName $Computer
$appendedprocesses = foreach ($process in $processes) {
Add-Member -MemberType NoteProperty -Name Owner -Value ($process.GetOwner().User) `
-InputObject $process -PassThru
}
$appendedprocesses |
select Name, Handle, Owner,
@{Label="VirtualMemory";Expression={[int]($_.VirtualSize)}},
@{Label="PagedMemory";Expression={[int]($_.PageFileUsage)}},
@{Label="WorkingMemory";Expression={[int]($_.WorkingSetSize)}} |
Sort-Object -Property Owner
}
$processes = Get-ProcessWithOwners -Computer ServerName
$processes | Format-Table Name, Handle, Owner,
@{Label="VirtualMemory (MB)";Expression={[int]($_.VirtualMemory/1MB)}},
@{Label="PagedMemory (MB)";Expression={[int]($_.PagedMemory/1MB)}},
@{Label="TotalMemory (MB)";Expression={[int](($_.VirtualMemory + $_.PagedMemory)/1MB)}},
@{Label="WorkingMemory (MB)";Expression={[int]($_.WorkingMemory/1MB)}} | Out-File `
-FilePath ($env:USERPROFILE + "\My Documents\Processes.txt")
После работы скрипта в папке Мои Документы появился файл Processes.txt с таким содержимым:
Name Owner TotalMemory (MB) WorkingMemory (MB) ---- ----- ---------------- ------------------ System Idle Process 0 0 svchost.exe LOCAL SERVICE 21 3 svchost.exe LOCAL SERVICE 21 3 svchost.exe LOCAL SERVICE 37 5 svchost.exe LOCAL SERVICE 14 2 alg.exe LOCAL SERVICE 29 4 logon.scr LOCAL SERVICE 38 2 wmiprvse.exe NETWORK SERVICE 73 16 msdtc.exe NETWORK SERVICE 37 7 svchost.exe NETWORK SERVICE 67 7 svchost.exe NETWORK SERVICE 37 6 explorer.exe user01 97 14 egui.exe user01 76 5 wscript.exe user01 104 14 ctfmon.exe user01 37 3 rdpclip.exe user01 61 5 ctfmon.exe user01 37 3 splwow64.exe user01 64 5 1cv8.exe user01 421 145 ctfmon.exe user02 37 3 ctfmon.exe user02 37 3 scrnsave.scr user02 31 2 explorer.exe user02 92 13 rdpclip.exe user02 60 5 wscript.exe user02 104 14 egui.exe user02 76 5 splwow64.exe user02 50 4 1cv8.exe user02 413 139
Из этого отрывка таблички видно, какие процессы запущены у каждого пользователя, работающего на сервере, сколько памяти потребляет каждый процесс. Если просуммировать параметр Working Memory у каждого пользователя и усреднить полученные данные, то можно вычислить среднее значение физической памяти, необходимое для работы одного среднестатистического пользователя. Если сложить параметр Working Memory у служебных пользователей SYSTEM, LOCAL SERVICE и NETWORK SERVICE, то можно получить значение физической памяти, необходимое для работы операционной системы. Параметр Total Memory отвечает за объем использования памяти с учетом файла подкачки - виртуальная память. При больших разрывах в значениях между Working Memory и Total Memory пользователи начинают ощущать замедление в работе терминального сервера, так как производится частое обращение к диску для записи и считывания данных, не поместившихся в физическую память. Нормальное соотношение физической памяти к виртуальной памяти (физическая память + файл подкачки) равно от 1:2 до 1:3.
После подсчетов, усреднения и округления получилось, что один пользователь 1С потребляет в среднем 200 МБ физической памяти или 600 МБ виртуальной памяти, система потребляет 600 МБ физической памяти или 4000 МБ виртуальной памяти. Вместительность сервера на Windows Server 2003 64bit с 16 ГБ установленной ОЗУ равна: (16384 МБ [установлено] - 600 МБ [система]) / 200 МБ [пользователь] = 78 пользователей. То есть при использовании на терминальном сервере только приложения 1С одновременно могут работать 78 человек, не ощущая особых задержек в работе по причине нехватки памяти.
Если же на сервере будут запускаться другие программы, то данные нужно будет скорректировать. Например, при использовании на терминальном сервере программы MS Office потребуется 513 МБ ОЗУ для каждого клиента (значение взято из системных требований к MS Office и не измерялось на практике). То есть вместительность сервера Windows Server 2003 64bit с 16 ГБ установленной ОЗУ равна: (16384 МБ [установлено] - 600 МБ [система]) / (200 МБ [1C] + 512 МБ [MS Office]) [пользователь] = 22 пользователей.
Как видно, чтобы организовать работу 1С в компании с мелкими
филиалами, разбросанными по всей стране, потребуются значительные
вложения в инфраструктуру:
- или в серверы при организации работы в терминальном режиме при
слабых линиях связи,
- или в скорость и стабильность линий связи от филиалов к
центральному офису, где расположена база данных, при установке
клиентов 1С непосредственно в филиалах.

