Особенности обслуживания RDSH Windows Server в режиме Drain Mode

Особенности обслуживания RDSH Windows Server в режиме Drain Mode

Для обслуживания терминальных серверов в составе 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 коллекции.

  1. Откройте Server Manager -> All Servers -> Добавьте все RDS сервера фермы;
  2. Выберите Remote Desktop Services в левой панели Server Manager. Выберите раздел RDS коллекций (Collections);
  3. В секции HOST SERVERS выберите сервер, которые нужно перевести в Drain и в контекстном меню выберите пункт “Do not allow new connections” (Не разрешать новые подключения).

rds коллекция Do not allow new connections

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

Также вы можете изменить Drain режим локально на RDS хосте из командной строки. Для этого используется команда
change logon
.

команда change logon

Чтобы запретить вход новых пользователей, выполните команду:

change logon /drain

change logon /drain - New user logons are DISABLED, but reconnections to existing sessions are ENABLED

New user logons are DISABLED, but reconnections to existing sessions are ENABLED

Теперь, если новый пользователь попытается напрямую подключится к RDS хосту (когда RD Connection Broker не используется), появится ошибка:

Remote logins are currently disabled.

rds windows server 2016 ошибка подключения 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

Если вы подключены к хосту Remote Desktop Session Host в режиме клиентской сессии, отключили вход данной командой и завершили свой сеанс (
logoff.exe
), вы сможете подключиться к серверу только через консоль (
mstsc /admin
).

Чтобы разрешить подключения, выполните:

change logon /enable

Проверить, включен ли режим стока на вашем RDS сервере можно командой:
change logon /query

Session logins are currently ENABLED

change logon /query
Если при попытке изменить режим Drain на сервере командой change logon появляется ошибка:

Connections are currently ENABLED by Group Policy for this machine, unable to change.

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.

групповая политика rds Allow users to connect remotely using Remote Desktop Services

Отключите данную политику, или переведите ее в режим 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

При изменении режима работы Drain меняются значения следующих параметров в реестре:
  • WinStationsDisabled в HKLMSoftwareMicrosoftWindows NTCurrentVersionWinlogon
  • TSServerDrainMode HKLMSystemCurrentControlSetControlTerminal Server

параметр TSServerDrainMode в реестре

Например в Drain Mode они устанавливаются
WinStationsDisabled = 0
и
TSServerDrainMode = 2
.

Также вы можете проверить текущий режим Drain на хосте таким PowerShell скриптом:

gwmi win32_terminalservicesetting -N "rootcimv2terminalservices" | %{
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 "rootcimv2terminalservices")
$temp.sessionbrokerdrainmode=2
$temp.put()

Для перевода сервера в обычный режим (
change logon /enable
), выполните:

$temp = (gwmi win32_terminalservicesetting -N " rootcimv2terminalservices ")
$temp.sessionbrokerdrainmode=0
$temp.logons=0
$temp.put()


powershell - включить/отключить режим стока drain mode

Windows Server 2019
Особенности обслуживания RDSH Windows Server в режиме Drain Mode