Проблема
Имеем ферму Citrix Xendesktop 7.6. В ферме серверы, которые отдают рабочие столы и приложения.
Иногда, сервер зависает и становится Unregistered.
При этом, DDC продолжает считать сессии на зависшем сервере активными и не дает пользователям переподключиться к работающим серверам до момента, когда зависший сервер не станет снова Registered и не обновит на DDC информацию об имеющихся сессиях.
Таким образом, пользователи зависшего сервера вынуждены ждать… Иногда довольно долго
Решение
Управлять сессиями можно с помощью командлетов powershell.
Вот тут данная проблема обсуждалась для XenDesktop 5.6: https://discussions.citrix.com/topic/357096-clear-stuck-user-sessions-from-host-failure/
Вот тут предлагается решение для XenDesktop 7.5: https://discussions.citrix.com/topic/361617-xendesktop-75-posh/
Нужно выполнить:
Asnp Citrix* Get-BrokerSession -MaxRecordCount 1000 | Where {$_.UserName -eq "DOMAINNAME\UserName"} | Remove-BrokerSessionMetadata
Однако, в XenDesktop 7.6 у меня это не сработало.
Вот тут: https://support.citrix.com/article/CTX138195 описывается механизм скрытых (hidden) сессий.
Если происходит внезапный отвал десктопа или сервера, то можно скрыть (hide) сессии на проблемной машине путем высталения сессиям флага hidden, что позволит пользователям создать новые сессии:
Set-BrokerSession -Hidden $true
Чтобы выставить флаг hidden сессиям определенного пользователя:
Asnp Citrix* Get-BrokerSession -MaxRecordCount 1000 | Where {$_.UserName -eq "DOMAINNAME\UserName"} | Set-BrokerSession -Hidden $true
Чтобы выставить флаг hidden сессиям на определенном (зависшем) сервере:
Asnp Citrix* Get-BrokerSession -MaxRecordCount 1000 | Where {$_.MachineName -eq "DOMAINNAME\MachineName"} | Set-BrokerSession -Hidden $true
В более ранних версиях (вплоть до XenApp 6.5) можно было использовать утилиту Citrix Session Management Tool: https://support.citrix.com/article/CTX124949
Автоматизация скрытия сессий
Для того, чтобы уменьшить время простоя и скрывать сессии на Unregistered хостах автоматически в планировщик можно добавить вот такой скрипт и выполнять его раз в минуту:
Asnp Citrix* Get-BrokerSession -Filter { MachineName -like 'DOMAIN_NAME\host_name_template*' -and MachineSummaryState -eq 'Unregistered'} | Set-BrokerSession -Hidden $true
Кроме того, если в Hidden сессии были открыты документы с сетевых дисков и сервер не перезагрузился, а просто стал Unregistered, то в новых сессия эти документы можно будет открыть только в режиме чтения. Для этого можно автоматически логоффить сессии:
Get-BrokerSession -Filter { MachineName -like 'DOMAIN_NAME\host_name_template*' -and MachineSummaryState -eq 'InUse' -and Hidden -eq 'True' } | Stop-BrokerSession
Или возвращать сессии на оживших хостах, чтобы к ним можно было переподключиться:
Get-BrokerSession -Filter { MachineName -like 'DOMAIN_NAME\host_name_template*' -and MachineSummaryState -eq 'InUse'} | Set-BrokerSession -Hidden $false
Discussion