Вопрос или проблема
У нас есть среда Azure Virtual Desktop, состоящая примерно из 10 пулов хостов, каждый из которых имеет 100 хостов сеансов. Я знаю, что мы можем иметь больше, но из-за ограничений, находящихся вне нашего контроля, мы должны были ограничить количество развертываемых хостов на пул. Но это не тема этого вопроса.
Мы столкнулись с проблемой, связанной с недоступностью хостов сеансов из-за истекшего регистрационного токена. В частности
Служба WVD-Agent остановлена: EXPIRED_MACHINE_TOKEN, Эта ВМ должна быть правильно зарегистрирована, чтобы участвовать в развертывании
Идентификатор события: 3277
Чтобы было понятно, хосты сеансов были зарегистрированы в пуле хостов приблизительно за четыре месяца до появления этой ошибки. Кажется, что регистрация “истекает”.
Мы можем исправить это, сгенерировав новый регистрационный ключ и вручную применив его с помощью инструкций, найденных в статье по устранению неполадок AVD. Я работаю над скриптом, который автоматизирует шаги в статье.
Инструкции в статье говорят установить два значения реестра, а затем перезапустить службу RDAgentBootLoader
:
$newKey = '<RegistrationToken>'
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\RDInfraAgent" -Name "IsRegistered" -Value "0" -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\RDInfraAgent" -Name "RegistrationToken" -Value $newKey -Force
Restart-Service RDAgentBootLoader
Одно, что не упоминается в инструкциях, это то, что существующий хост сеанса должен быть удален из пула хостов. Если нет, возникнет ошибка с сообщением о том, что хост сеанса с именем ВМ уже существует.
Этот процесс не работает. Я могу установить значения реестра и перезапустить службу, но она не регистрирует ВМ в пуле хостов. Кажется, что RDAgentBootLoader
не знает, что нужно проверить в реестре, зарегистрирована ли ВМ, или взять регистрационный ключ, если она не зарегистрирована. Я также пытался запустить установщик RDAgentBootLoader
, надеясь, что это выполнит свою задачу, но без эффекта.
Я обнаружил, что единственный способ завершить повторную регистрацию – это переустановка RDAgent и ввод регистрационного ключа в текстовом поле по запросу. Это заполнит запись реестра RegistrationToken
таким образом, что установщик RDAgentBootLoader
его распознает, и повторная регистрация в пуле хостов завершится.
Однако это создает проблему. Я хочу иметь возможность автоматизировать этот процесс, чтобы мы могли использовать новый регистрационный ключ для всех хостов сеансов одновременно и избежать выполнения этого по частям, когда пользователи сообщают о проблеме. Я не могу сделать это, используя Invoke-AzVMRunCommand
, потому что это зависит от RDAgent
.
Если я удалю агент, чтобы переустановить его и передать новый ключ, команда запуска останется в переходном состоянии (я не припомню, где это читал; я предоставлю ссылку, когда найду). Это фактически означает, что я не могу снова подключиться, чтобы завершить процесс переустановки агента, передав регистрационный ключ в качестве параметра, или переустановить загрузчик агента.
Есть ли что-то в процессе, что я должен сделать, но не указано? Эти инструкции устарели и больше не актуальны? Есть ли лучший способ передать новый регистрационный ключ и снова зарегистрировать ВМ в пуле хостов?
Ответ или решение
Регистрация хоста сессий Azure Virtual Desktop: Ошибка EXPIRED_MACHINE_TOKEN
Ваша проблема с истекшим токеном регистрации (EXPIRED_MACHINE_TOKEN
) на хостах Azure Virtual Desktop (AVD) действительно может быть сложной и требует внимательного подхода. Давайте разбираться в этом вопросе шаг за шагом.
Причины возникновения проблемы
Ошибка, возникающая на ваших виртуальных машинах (VM), указывает на то, что хосты сессий потеряли связь с контроллером управления, вероятнее всего, из-за истечения срока действия токена регистрации. Обычно токены AVD действительны в течение 120 дней. После этого хосты теряют возможность подключаться к хост-пулу, что и приводит к возникновению событий с кодом 3277.
Подход к решению проблемы
Следующим шагом, который вы правильно отметили, является обновление токена регистрации. Однако, прежде чем мы к этому перейдем, обратим внимание на несколько ключевых моментов:
-
Удаление существующих хостов: Действительно, прежде чем регистрировать хост с новыми данными, старый экземпляр хоста нужно удалить из хост-пула, чтобы избежать конфликтов имен.
-
Правильная работа службы: Важно убедиться, что служба
RDAgentBootLoader
работает корректно после изменения реестровых значений. В некоторых случаях реестровые изменения могут оказаться неэффективными, если служба не была перезапущена должным образом. -
Обновление агента: Когда вы переустанавливаете
RDAgent
, он автоматически обновляет ключ регистрации и корректным образом регистрирует хост. Это может быть лучшим вариантом, особенно если проблема с реестром не позволяет вам зарегистрировать хост без переустановки агента.
Скриптовое решение
Для автоматизации процесса вы можете использовать Azure PowerShell, однако учитывайте, что вы не можете полагаться на Invoke-AzVMRunCommand
, так как это вызывает зависание команды, если агент будет удален. Вместо этого попробуйте следующие шаги:
-
Скрипт для удаления хостов: Напишите PowerShell-скрипт, который использует командлеты Azure для удаления экземпляров хостов из хост-пула. Убедитесь, что удаление происходит через Azure API, чтобы избежать блокировок.
-
Скрипт для переустановки агента: После удаления хоста и создания нового токена, создайте скрипт для автоматической переустановки агента и передачу нового токена. Возможно, вам придется использовать
Custom Script Extension
для выполнения PowerShell-скриптов на каждом хосте.Пример команд:
# Удаление старых хостов Remove-AzWvdSessionHost -HostPoolName 'ИмяХостПула' -ResourceGroupName 'ИмяГруппыРесурсов' -Name 'ИмяВиртуальнойМашины' # Регистрируем новый токен $newKey = '<НовыйРегистрационныйТокен>' Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\RDInfraAgent" -Name "IsRegistered" -Value "0" -Force Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\RDInfraAgent" -Name "RegistrationToken" -Value $newKey -Force Restart-Service RDAgentBootLoader
-
Планировщик: Учитывая время простоя, если у вас большая среда, настройте процедуры мониторинга, чтобы автоматизировать восстановление, когда узлы не доступны.
Вывод
Работа с Azure Virtual Desktop требует тщательной проработки механизма регистрации хостов. Убедитесь, что все шаги, включая удаление существующих хостов, обновление токенов и переустановку агента, выполняются в строгом порядке. Ваша идея автоматизации процесса — отличный шаг к уменьшению времени простоя.
Если вы все еще сталкиваетесь с трудностями, обратитесь в службу поддержки Azure, чтобы получить актуальную информацию о возможных изменениях в процессах регистрации и нововведениях в AVD.