Продолжаем выжимать все соки из Windows-сервера. В этот раз я расскажу про настройку сервера удаленных рабочих столов, более известного как терминальный сервер. В качестве «вишенки на торте» остановимся еще на тюнинге системы дедупликации томов Windows.
Сервер удаленных рабочих столов
В инфраструктуре удаленных рабочих столов основной ролью является узел сеансов Remote Desktop Session Host (далее – RDSH). Начну с подбора аппаратной части для этой роли.
С процессором и памятью все довольно просто: больше памяти, больше процессоров высокой частоты и с большим кэшем – лучше. Чуть больше внимания стоит уделить дисковой подсистеме, ведь именно она часто является узким местом. Основную нагрузку на диски можно условно разделить на три группы:
системные файлы и приложения;
файл подкачки;
- пользовательские профили и данные.
В целях увеличения быстродействия имеет смысл разнести эти группы по разным физическим дискам. Про файл подкачки уже упоминалось в предыдущей статье, а вот пользовательские профили потребуют некоторых манипуляций с реестром.
Для смены места хранения профилей нужно изменить следующий параметр реестра:
путь: HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList;
параметр: REG_EXPAND_SZ с именем ProfilesDirectory;
- значение: путь к папке, например, D:\Users.
Тогда профили всех пользователей будут создаваться уже в другом месте.
Отдельно нужно отметить перемещаемые профили пользователей терминального сервера. Настроить их можно групповой политикой Конфигурация Windows – Административные шаблоны – Службы удаленных рабочих столов – Узел сеансов удаленных рабочих столов – Профили – Задать путь для перемещаемого профиля пользователя служб удаленных рабочих столов. В этой политике можно задать место для хранения профилей пользователей терминального сервера, но храниться будет лишь часть профиля. В частности AppData\Local останется на старом месте.
Помимо изменения места хранения профилей бывает полезно перенаправить ряд пользовательских папок в другое место. Как правило, это практикуется для быстродействия и настройки бэкапов – ведь «мои документы» и «рабочий стол» могут содержать важную информацию, но и не требуют повышенного быстродействия. Перенаправление удобно настраивается с помощью групповой политики.
Сама групповая политика настраивается в Конфигурация пользователя – Конфигурация Windows – Перенаправление папки, и для большинства папок пользовательского профиля можно указать альтернативное расположение.
Настройка политики перенаправления папок
Чтобы не было проблем с созданием папок и доступом в них, я обычно делаю следующие разрешения на ресурс с перенаправленными папками:
группа «Все» может создавать папки и читать. Разрешения применяются только для корневой папки;
создатель-владелец (owner) имеет полный доступ, но только к подпапкам и файлам;
- администраторы и система имеют полный доступ.
Разрешения на сетевой ресурс с перенаправленными папками пользователей.
Одна из основных нагрузок на диск на сервере с ролью RDSH – синхронная запись. Причиной опять же являются пользователи: ведь при штатной работе идет регулярное обращение к профилю, а также загрузка-выгрузка пользовательских веток реестра (%userprofile%\ntuser.dat). Помимо создания разного рода производительных массивов оптимизировать производительность поможет кэш на запись.
Если у вас нет батарейки для RAID-контроллера, стоит подумать о ее приобретении или же безгранично верить бесперебойникам. Надо сказать, что кэш можно настраивать и через Windows – на вкладке «Политика» в свойствах диска в оснастке «Управление дисками».
Настройка кэша жесткого диска Windows.
Вторым потенциально узким местом является сетевая подсистема. В целях оптимизации не лишним будет по возможности разделить сеть на условный frontend и backend. Через frontend пустить пользовательские подключения, а через backend – подключения к другим серверам, в том числе и к хранилищам для перенаправленных папок и перемещаемых профилей.
Загрузка сети пользовательскими подключениями, как правило, минимальна, а для повышения производительности backend можно использовать объединение адаптеров (LACP) или установить в сервер десятигигабитные адаптеры.
В настройке самой операционной системы можно выделить следующие моменты:
по возможности стоит отключить фоновые процессы: такие как проверка орфографии, автосохранения, индексирование для поиска. Или хотя бы уменьшить их частоту;
также лучше уменьшить частоту проверок статуса приложений, обновлений и прочих синхронизаций;
меньше ненужных процессов и модулей – больше простора всему остальному. Проверить процессы и загружаемые модули можно с помощью встроенной утилиты msinfo32.exe и незабвенной Autoruns;
антивирус на терминальном сервере – не самая лучшая идея, достаточно ограничиться защитой периметра, SRP и регулярными обновлениями. Если же Пети и Не-Пети тревожат паранойю, то стоит хотя бы исключить из проверки часть временных папок: например, с файлами, которые создают системные сервисы и доверенные приложения;
если перенаправленные устройства, такие как воспроизведение звука, микрофон и прочие диски не используются – лучше их отключить.
отдельного упоминания заслуживают перенаправленные принтеры. По возможности лучше не использовать перенаправление принтеров, подключать уже с локального принтсервера. Если подключить не удается – используйте проброс принтеров с помощью штатного средства EasyPrint, без установки драйвера принтера. Ставить драйвер принтера стоит при крайней необходимости, и аккуратно – многие драйвера, особенно для старых принтеров, тянут с собой свои приложения, которые запросто могут и «уронить» службу печати;
- проверяйте «назначенные задания». Помимо системы, которая по умолчанию оставляет ряд назначенных заданий на вход пользователя и простой пользователя, приложения тоже любят добавить своих задач. Не все из них вам нужны.
129 – именно столько назначенных заданий в свежеустановленной Windows 2016 + Office 2016.
Нельзя не упомянуть возможность терминального сервера под названием RemoteFX, настройка его поведения также влияет на быстродействие.
RemoteFX – это целый набор технологий, отвечающих за сжатие RDP, проброс устройств, работу с видеокартой и устройствами USB как в виртуальной машине, так и на терминальном сервере.
Полезной настройкой является сжатие RemoteFX. Искать ее можно в групповых политиках по адресу Конфигурация компьютера – Административные шаблоны – Компоненты Windows – Службы удаленных рабочих столов – Узел сеансов удаленных рабочих столов – Среда удаленных сеансов – Настройка сжатия RemoteFX.
Настройка сжатия RemoteFX через групповые политики.
Настройка имеет следующие варианты:
оптимизация использования памяти. Нагрузка на сервер небольшая, но повышаются требования к пропускной способности сети;
оптимизация использования полосы пропускания сети. Сеть загружена слабо, но расход памяти составляет около 2 МБ на сессию;
баланс памяти и полосы пропускания сети. Расход памяти составляет около 200 КБ на сессию;
- не использовать алгоритм сжатия RDP. Сервер практически не сжимает RDP, поэтому нагрузка на сеть максимальна.
При небольшом количестве пользователей изнутри локальной сети настройка мало влияет на быстродействие. Но когда пользователей много или если они удаленные, стоит задуматься о ее применении.
Рядом с этой настройкой находятся и другие опции, влияющие на быстродействие – тут и настройка кодировки, и настройка максимального разрешения экрана. Особенно интересной является настройка использования графического адаптера для отрисовки изображения – для всех сеансов службы удаленных рабочих столов используйте аппаратный графический адаптер по умолчанию. Начиная с Windows 2016, RemoteFX научился работать не только с виртуальными видеокартами в виртуальных машинах, но и с видеокартой напрямую. Да, теперь видеокарту для ускорения работы можно устанавливать даже в обычный сервер сеансов удаленных рабочих столов.
Другие настройки отображения можно производить на клиентской стороне, в файлах .rdp. Большинство опций находится на вкладке «Взаимодействие».
Настройки отображения, влияющие на быстродействие.
Можно настроить вручную, можно использовать предустановки в зависимости от ориентировочной скорости соединения или же отдать управление автоматике. Самое главное – не стоит отключать «Постоянное кэширование точечных рисунков». При включенной опции клиент будет держать у себя кэш изображения и загружать только изменения рисунка.
Перейду к быстродействию другой роли терминального сервера – шлюза удаленных рабочих столов.
Шлюз удаленных рабочих столов (Remote Desktop Gateway, далее – RDG) удобно использовать для подключения внешних клиентов без VPN – в частности, он позволяет настроить проверку подлинности по сертификату. С примером настройки можно ознакомиться в соответствующей статье, я же ограничусь вопросами быстродействия.
RDG может использовать транспорт TCP и UDP, но в большинстве случаев используется стандартный RPC поверх HTTP. Именно его и касаются следующие настройки в реестре:
Параметр | Путь | Значение по умолчанию | Комментарий |
Maxiothreads | HKLM\Software\Microsoft\Terminal Server Gateway | Равняется количеству процессоров | Отвечает за количество выходящих потоков, которые обрабатывает RDG |
MaxPoolThreads | HKLM\System\CurrentControlSet\Services\InetInfo\Parameter | 4 | Количество потоков, которые обрабатывает IIS |
ServerReceiveWindow | HKLM\Software\Microsoft\Rpc | 64 КБ | Максимальный размер кадра, принимаемого сервером. Может варьироваться от 8 КБ до 1 ГБ. |
ClientReceiveWindow | HKLM\Software\Microsoft\Rpc | 64 КБ | Максимальный размер кадра, принимаемого клиентом. Может варьироваться от 8 КБ до 1 ГБ. |
Понять, где есть проблемы, помогут счетчики производительности:
шлюз служб терминалов;
RPC/HTTP Proxy Per Server;
RPC/HTTP Proxy;
W3SVC_W3WP;
IPv4;
память;
сетевой интерфейс;
система;
синхронизация;
TCPv4;
процесс;
прокси RPC/HTTP
сведения о процессоре;
- веб-служба.
Скажу и пару слов про третью роль – узел виртуализации удаленных рабочих столов. Он необходим для развертывания инфраструктуры виртуальных рабочих столов (Virtual Desktop Infrastructure – VDI), чуть менее популярной, чем обычные терминальные сервера.
Помимо общих рекомендаций для гипервизоров – быстрее, выше, сильнее – в инфраструктуре VDI в режиме пула виртуальных рабочих столов имеет смысл обратить внимание на ненужные службы и возможности в клиентских операционных системах:
обновление WIndows. Все равно машина при подключении разворачивается из шаблона;
автономные файлы. VDI не уходят в оффлайн;
фоновая дефрагментация. Изменения файловой системы откатываются при отключении;
сон или гибернация. Не поддерживается в VDI;
аварийный дамп. При повторном включении машина будет развернута из шаблона;
автоконфигурация WLAN. На VDI нет Wi-Fi;
служба общих сетевых ресурсов проигрывателя Windows Media;
поставщик домашней группы;
общий доступ подключения к интернету;
служба поддержки Bluetooth;
- дополнительные службы Windows Center.
Помимо отключения служб в шаблонной виртуальной машине, для оптимизации хранения не лишним будет включить дедупликацию в любом варианте развертывания VDI. Сделать это можно при помощи команды PowerShell:
Enable-DedupVolume <volume> -UsageType HyperV
Использование дедупликации изрядно поможет сберечь место не только при использовании виртуальных рабочих столов.
Дедупликация
Дедупликация – это метод сжатия массива, когда повторяющиеся данные не дублируются.
Microsoft советует включать дедупликацию в следующих случаях:
файловые серверы общего назначения – общие папки пользователей, перенаправленные папки профилей и т.п.;
серверы инфраструктуры удаленных рабочих столов (VDI);
- виртуализированные приложения резервного копирования вроде Microsoft DPM.
Во всех прочих случаях выгоды дедупликации стоит предварительно оценить. В этом поможет утилита DDPEval.exe, которая появится после установки роли дедупликации на сервер.
На диске с большим количеством файловых баз 1С дедупликация поможет сэкономить до 70% места.
Установка компоненты дедупликации производится через графический режим или командлетом PowerShell:
Install-WindowsFeature -Name FS-Data-Deduplication
Включить удобно командлетом Enable-DedupVolume с параметром – UsageType, который может принимать значения:
HyperV – для дисков хранения виртуальных машин и VDI;
Backup – для виртуализированных приложений резервного копирования;
- Default – по умолчанию.
Подробнее прочитать про дедупликацию и чем отличаются ее виды, предлагаю в документации Microsoft.
Для оптимизации баланса хранения и производительности следует уделить внимание назначенным заданиям дедупликации и тонким ее настройкам.
Механизм дедупликации использует три вида назначенных заданий:
Название | Что делает | Расписание по умолчанию |
Оптимизация | Выполняет дедупликацию | Каждый час |
Сбор мусора | Освобождает место на диске | Каждую субботу в 02:35 |
Проверка целостности | Ищет и восстанавливает повреждения | Каждую субботу в 03:35 |
Посмотреть назначенные задания можно командлетом Get-DedupSchedule.
Запланированные задания дедупликации по умолчанию.
Разумеется такое расписание может быть неприемлемо, особенно на серверах с высокой загрузкой. В таком случае удобно будет запускать задания только в часы простоя. Отключим задания командой PowerShell:
Get-DedupSchedule | ForEach-Object { Set-DedupSchedule -InputObject $_ -Enabled $false }
Добавим новое задание оптимизации в нерабочее время:
New-DedupSchedule -Name "Optimization" -Type Optimization -DurationHours 8 -Memory 100 -Cores 100 -Priority High -Days @(1,2,3,4,5) -Start (Get-Date "2017-01-01 21:00:00")
И задания сборка мусора и проверки по нерабочим дням:
New-DedupSchedule -Name "WeeklyGarbageCollection" -Type GarbageCollection -DurationHours 23 -Memory 100 -Cores 100 -Priority High -Days @(6) -Start (Get-Date "2017-01-01 07:00:00")
New-DedupSchedule -Name "WeeklyIntegrityScrubbing" -Type Scrubbing -DurationHours 23 -Memory 100 -Cores 100 -Priority High -Days @(0) -Start (Get-Date "2017-01-01 07:00:00")
Подробнее про синтаксис командлета New-DedupSchedule можно почитать в документации.
Большинство тонких настроек дедупликации – то есть большинство параметров для тома – настраивается с помощью командлета Set-DedupVolume.
Пример использования:
Set-DedupVolume -Volume F: -OptimizePartialFiles
Параметр | Описание | Допустимые значения | Комментарий |
ChunkRedundancyThreshold | Количество ссылок на блок до его копирования в раздел активной зоны хранилища блоков | Положительные целые числа | Обычно нет необходимости изменять значение по умолчанию, но увеличение значения может увеличить быстродействие томов с высокой дупликацией |
ExcludeFileType | Типы файлов, исключаемые из дедупликации | Массив расширений файлов | Такие файлы как мультимедиа плохо поддаются дедупликации, оптимизировать их нет смысла |
ExcludeFolder | Папки, исключаемые из дедупликации | Массив путей к папкам | Для повышения производительности можно исключить часть папок |
InputOutputScale | Уровень параллелизации операций ввода-вывода | 1 – 36 | На сервере с высокой нагрузкой можно уменьшить количество операций ввода-вывода дедупликации, что скажется на скорости выполнения оптимизации, но ускорит общую работу сервера |
MinimumFileAgeDays | Число дней после создания файла, прежде чем он будет считаться доступным для оптимизации. | Положительные целые числа, включая 0 | Значение по умолчанию – 3, в ряде случаев можно изменить значение для повышения оптимизации |
MinimumFileSize | Минимальный размер файла, чтобы он мог считаться доступным для оптимизации | Положительные целые числа (байты), большие, чем 32 КБ | Для небольших файлов дедупликация не имеет особого значения |
NoCompress | Сжатие дедуплицированных блоков | True\False | Для тома, содержащего большое количество сжатых данных, вроде архивов или мультимедиа, сжатие имеет смысл отключить |
NoCompressionFileType | Файлы, которые не нужно сжимать | Массив расширений файлов | Уже сжатые файлы сжимать нет смысла |
OptimizeInUseFiles | Использование дедупликации для активных файлов | True\False | В случае если на томе большинство файлов – большие и постоянно используемые, в которых меняется регулярно только часть файлов – лучше включить этот параметр. В противном случае эти файлы не будут оптимизированы |
OptimizePartialFiles | При включении этого параметра значение MinimumFileAge применяется к сегментам файла, а не ко всему файлу | True\False | |
Verify | Проверка блока данных не только по хэшу, но и по байтово | True\False | Включение параметра замедляет быстродействие, но обеспечивает большую гарантию сохранности данных |
Помимо настроек для тома существуют и общие настройки службы дедупликации. В частности, нас интересует два параметра, находящихся в реестре по следующему адресу:
HKLM:\System\CurrentControlSet\Services\ddpsvc\Settings
Параметр | Описание | Допустимые значения | Комментарий |
WlmMemoryOverPercentThreshold | Возможность использовать больше памяти, чем автооценка | Положительные целые числа, в процентах. например значение 300 означает «в три раза больше» | Изменение значения параметра актуально при одновременном запуске заданий дедупликации и других ресурсоемких задач |
DeepGCInterval | Интервал между полными сборками мусора | Положительные целые числа, -1 = отключено | Полная сборка мусора оптимизирует данные тщательнее, но она более ресурсоемкая. По факту разница в свободном месте после обычной и полной сборке мусора составляет около 5%. |
Теперь, когда дедупликация настроена, можно попробовать выговорить «дедуплицировали, дедуплицировали, да не выдедуплицировали», а потом потратить бюджет не на диски, а на новые серверы в ферму удаленных рабочих столов. И начать тюнить уже их.
А вам приходилось заниматься подобным тюнингом быстродействия терминальных серверов или все «по дефолту»? Был какой-то ощутимый результат?
Комментарии (14)
FishBones
17.07.2017 18:49про перемещение дефолтной папки с профилями на RDS — рекомендовал бы делать через sysprep https://support.microsoft.com/ru-ru/help/973289/customize-the-default-local-user-profile-when-preparing-an-image-of-wi
LoadRunner
17.07.2017 23:49У Вас тут ссылка поломалась. Не продублируете через a href?
FishBones
18.07.2017 11:28Перенос папки профилей в новое место
Этот механизм автоматом переносит на новое место уже существующие профили, в частности Default User :)
ilkman
18.07.2017 14:27про 2016 и проброс физического видеоадаптера в пользовательскИЕ сессИИ — очередное гонево MS. Да, оно работает в одной сессии, но как только заходит второй пользователь. первый вылетает нафик. Т.е. многосессионность, что и подразумевается при употреблении RDS — не работает. Проверено, и даже MS подтвердил.
ilkman
18.07.2017 15:15А для этого придумали параметр использования для ноды- первый из всех и последний из всех. При такой настройке конфликтов не будет. Другой вопрос, что для профилей использовать DFS как то дорого, трудозатратно. Минимум 2 сервера 2012 под юзерское Г? (2012, потому что дедупликация это очень хорошо)
dabster
18.07.2017 21:14Дедупликация это хорошо, а вы в курсе что если сервер упадет, например raid контролер то восстановить с диска данные, с включенной дедупликацией будет практически не реально. С этим я столкнулся, в результате оказалось, что ни одна программа по восстановлению данных, не умеет работать с дедупликацией, и в весьма извистной компании rlab мне сказали что у них есть неводомый софт личной разработки который они в открытую выкладывать не будут. :) Но я нашел метод, он весьма замудреный и сложный. Будет время, попробую запилить статью на хабр.
ascheck
19.07.2017 10:08•путь: HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList;
Позволю себе не согласиться с подобной рекомендацией. Неизвестно каким боком выйдет перенос профилей через реестр. Лично сталкивался с тем, что обновление Windows 7 до Windows 10 завершалось ошибкой на машинах, где профили пользователя были перемещены с использованием этой ветки. Для таких вещей лучше использовать средства, предлагаемые Майкрософт. Да, я имею в виду политики, которые были упомянуты.DeeZ
21.07.2017 14:42+1. Или файл ответов при установке.
Еще в Win2000 раскидывал Document and settings, Program files на отдельные физические диски.
Только через файл ответов при установке винда и софт не глючили.
Lizard17
19.07.2017 12:47я предпочитаю не DFS, а проброс на alias. В любой момент можно поменять таргет алиаса при необходимости. А все таргеты алиаса синхронизирую DFS репликацией.
LoadRunner
Даются капитанские советы, а про механизм DFS не сказано ни слова. А ведь при перенаправлении дефолтных папок профиля лучше использовать DFS-путь, а не локальный или UNC.
Markuzzz
Есть мнение, что DFS с более чем 1 таргетом лучше не использовать для хранения перемещаемых профилей — можно получить неприятные сюрпризы из-за отставания синхронизации.
Tabletko
Есть мнение, что DFS можно использовать без репликации. Как единую древовидную ФС без привязки к конкретным серверам.
avelor
подскажите пожалуйста, что такое DFS-путь?
всю жизнь использовал UNC путь к ресурсу DFS, а что такое DFS-путь и в чем его волшебство не знаю..
LoadRunner
Подразумевается путь вида \\domain\root\branch\path, а не \\server\share\path.