Для обслуживания терминальных серверов в составе RDS фермы существует специальный режим Drain Mode (режим стока, слива). Переведя RDS сервер в drain режим, вы можете запретить серверу принимать новые RDP подключения пользователей, а текущие подключения будут активными пока пользователи не отключатся через logoff или по таймауту RDS сессии. После этого вы можете выполнить техническое обслуживание сервера, не останавливая работу RDS фермы (установить обновления, изменить настройки сервера или программ, обновить конфигурационные файлы и т.д.)
Что такое Drain Mode в Windows Server RDS?
Drain mode впервые появился в Windows Server 2008 (Terminal Services Server Drain mode) и позволяет запретить RDS хосту принимать новые подключения. Как правило этот режим используется, когда администратору сервера нужно произвести обслуживание сервера (установить обновления Windows, настроить или обновить приложения), не затрагивая доступность всей RDS фермы. RDS хост может работать в трех режимах Drain Mode:
- Allow All Connections (это режим по умолчанию) -сервер RD Session Host принимает новые подключения;
- Allow Reconnections, but Prevent New Logons – пользователям разрешено переподключаться к существующим сеансам, но создавать новые запрещено. Если перезагрузить сервер, ни один пользователь не сможет подключится к нему;
- Allow Reconnections, but Prevent New Logons until the Server Is Restarted – пункт аналогичный предыдущему, только после перезагрузки режим User Logon сбрасывается на Allow All Connections.
Запрет входа новых пользователей на RDS сервер
Вы можете включить Drain Mode на хост сервере RDS в настройка RDS коллекции.
- Откройте Server Manager -> All Servers -> Добавьте все RDS сервера фермы;
- Выберите Remote Desktop Services в левой панели Server Manager. Выберите раздел RDS коллекций (Collections);
- В секции HOST SERVERS выберите сервер, которые нужно перевести в Drain и в контекстном меню выберите пункт “Do not allow new connections” (Не разрешать новые подключения).
Пользователи с активными сессиями смогут переподключиться к этому серверу, а все новые подключения будут перенаправлены Connection Broker-ом на другие хосты RDS фермы.
Также вы можете изменить Drain режим локально на RDS хосте из командной строки. Для этого используется команда
change logon
.
Чтобы запретить вход новых пользователей, выполните команду:
change logon /drain
New user logons are DISABLED, but reconnections to existing sessions are ENABLED
Теперь, если новый пользователь попытается напрямую подключится к RDS хосту (когда RD Connection Broker не используется), появится ошибка:
Remote logins are currently disabled.
При этом в логах RDS хоста будет появляться событие с Event ID 1070 от источника TerminalServices-RemoteConnectionManager:
A logon request was denied because the RD Session Host server is currently in drain mode and therefore not accepting new user logons. To configure the server to allow new user logons, use the Remote Desktop Services Configuration tool.
Следующая команда включает режим Drain до перезагрузки хоста:
change logon /drainuntilrestart
Чтобы запретить подключаться к хосту даже пользователям с активными сессиями, выполните команду:
change logon /disable
Session logins are currently DISABLED
logoff.exe
), вы сможете подключиться к серверу только через консоль (
mstsc /admin
).Чтобы разрешить подключения, выполните:
change logon /enable
Проверить, включен ли режим стока на вашем RDS сервере можно командой:
change logon /query
Session logins are currently ENABLED
Если при попытке изменить режим Drain на сервере командой change logon появляется ошибка:
Connections are currently ENABLED by Group Policy for this machine, unable to change.
Значит у вас настроен режим Drain через GPO. Параметр называется Allow users to connect remotely using Remote Desktop Services и находится в разделе политик Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Connections.
Отключите данную политику, или переведите ее в режим Not Configured.
Управление Drain Mode с помощью PowerShell
Вы можете управлять настройками Drain mode для коллекции RDS хостов или на отдельном сервере с помощью PowerShell:
Import-Module RemoteDesktop
# запретить новые RDS подключения к этому серверу
Set-RDSessionHost -SessionHost rdsh1.winitpro.ru -NewConnectionAllowed No -ConnectionBroker rdshcb.winitpro.ru
# разрешить подключение пользователям
Set-RDSessionHost -SessionHost rdsh1.winitpro.ru -NewConnectionAllowed Yes -ConnectionBroker rdshcb.winitpro.ru
- WinStationsDisabled в HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\
- TSServerDrainMode HKLM\System\CurrentControlSet\Control\Terminal Server\
Например в Drain Mode они устанавливаются
WinStationsDisabled = 0
и
TSServerDrainMode = 2
.
Также вы можете проверить текущий режим Drain на хосте таким PowerShell скриптом:
gwmi win32_terminalservicesetting -N "root\cimv2\terminalservices" | %{
if ($_.logons -eq 1){
"Disabled"}
Else {
switch ($_.sessionbrokerdrainmode)
{
0 {"Enabled"}
1 {"DrainUntilRestart"}
2 {"Drain"}
default {"error"}
}
}
}
Включается режим Drain в PowerShell так (аналог
Change logon /Drain
):
$temp = (gwmi win32_terminalservicesetting -N "root\cimv2\terminalservices")
$temp.sessionbrokerdrainmode=2
$temp.put()
Для перевода сервера в обычный режим (
change logon /enable
), выполните:
$temp = (gwmi win32_terminalservicesetting -N " root\cimv2\terminalservices ")
$temp.sessionbrokerdrainmode=0
$temp.logons=0
$temp.put()