排查 Azure Stack HCI 注册问题

适用于:Azure Stack HCI 版本 22H2 和 21H2

排查 Azure Stack HCI 注册问题需要查看群集中每个服务器上的 PowerShell 注册日志和 hcisvc 调试日志。

收集 PowerShell 注册日志

运行 Register-AzStackHCIUnregister-AzStackHCI cmdlet 时,将为每次尝试创建名为 RegisterHCI_{yyyymmdd-hhss}.log 和 UnregisterHCI_{yyyymmdd-hhss}.log 的日志文件。 可以使用 Register-AzStackHCI cmdlet 中的 -LogsDirectory 参数设置这些日志文件的日志目录,并调用 Get-AzStackHCILogsDirectory 来获取位置。 默认情况下,这些文件在 C:\ProgramData\AzureStackHCI\Registration 中创建。 对于 PowerShell 模块版本 2.1.2 及更低版本,这些文件是在运行这些 cmdlet 的 PowerShell 会话的工作目录中创建的。

默认情况下,不包含调试日志。 如果排查某个问题需要查看其他调试日志,请在运行 Register-AzStackHCIUnregister-AzStackHCI 之前,通过运行以下 cmdlet 将调试首选项设置为“继续”:

$DebugPreference = 'Continue'

收集本地 hcisvc 日志

若要为 hcisvc 启用调试日志,请在群集中每个服务器上的 PowerShell 中运行以下命令:

wevtutil.exe sl /q /e:true Microsoft-AzureStack-HCI/Debug

若要获取日志,请执行以下操作:

Get-WinEvent -Logname Microsoft-AzureStack-HCI/Debug -Oldest -ErrorAction Ignore

未能注册。 无法在节点 {Node1,Node2} 上生成自签名证书。 无法在节点 {Node1,Node2} 上设置和验证注册证书

故障状态说明:

在注册过程中,群集中的每个服务器必须已启动且正在运行,并与 Azure 建立了出站 Internet 连接。 Register-AzStackHCI cmdlet 与群集中的每个服务器通信,以预配证书。 每个服务器使用其证书向云中的 HCI 服务发出 API 调用以验证注册。

如果注册失败,可能会看到以下消息:注册失败。无法在节点 {Node1,Node2} 上生成自签名证书。无法在节点 {Node1,Node2} 上设置和验证注册证书

如果错误消息中“无法在节点上生成自签名证书”部分的“节点”两字之后显示了节点名称,则表示系统无法在这些服务器上生成证书。

修正操作:

  1. 检查上述消息中列出的每个服务器是否已启动并正在运行。 可以通过运行 sc.exe query hcisvc 来检查 hcisvc 的状态,并根据需要使用 start-service hcisvc 将它启动。

  2. 检查错误消息中列出的每个服务器是否已连接到运行 Register-AzStackHCI cmdlet 的计算机。 要进行验证,请在运行 Register-AzStackHCI 的计算机中运行以下 cmdlet,使用 New-PSSession 连接到群集中的每个服务器,并确保它起作用:

    New-PSSession -ComputerName {failing nodes}
    

如果错误消息中“无法在节点上设置和验证注册证书”部分的“节点”两字之后显示了节点名称,则表示服务可以在服务器上生成证书,但服务器无法成功调用 HCI 云服务 API。 故障排除:

  1. 确保每台服务器都具有与 Azure Stack HCI 云服务和其他所需的 Azure 服务(如 Microsoft Entra ID)通信所需的 Internet 连接,并且防火墙不会阻止这种通信。 请参阅 Azure Stack HCI 的防火墙要求

  2. 尝试从 AzStackHCI.EnvironmentChecker 模块运行 Invoke-AzStackHciConnectivityValidation cmdlet 并确保运行成功。 此 cmdlet 将调用 HCI 云服务的运行状况终结点来测试连接。

  3. 查看错误消息中列出的每个节点上的 hcisvc 调试日志。

    • 以下这种情况是正常的:消息“ExecuteWithRetry 操作 AADTokenFetch 失败并出现可重试的错误”显示几次,然后操作失败并出现消息“在重试允许的所有次数后 ExecuteWithRetry 操作 AADTokenFetch 失败”,或者出现消息“重试 ExecuteWithRetry 操作 AADTokenFetch 成功”。
    • 如果日志中出现“在重试允许的所有次数后 ExecuteWithRetry 操作 AADTokenFetch 失败”,则表示即使重试了所有允许的次数,系统也无法从服务中提取 Microsoft Entra 令牌。 随此消息一起还会记录一条相关的 Microsoft Entra 异常。
    • 如果看到“AADSTS700027:客户端断言包含无效签名。[原因 - 使用的密钥已过期。客户端使用的密钥指纹:“{SomeThumbprint}”,找到密钥 'Start=06/29/2021 21:13:15, End=06/29/2023 21:13:15'”,这是在服务器上设置时间的问题。 在 PowerShell 中运行 [System.DateTime]::UtcNow 来检查所有服务器上的 UTC 时间,并将其与实际 UTC 时间进行比较。 如果时间不正确,请在服务器上设置正确的时间,然后重试注册。

从门户删除 HCI 资源并重新注册同一群集会导致问题

故障状态说明:

如果从 Azure 门户显式删除 Azure Sack HCI 群集资源,但没有首先从 Windows Admin Center 或 PowerShell 注销群集,则直接从门户中删除 HCI Azure 资源管理器资源会导致群集资源状态不佳。 应始终使用 Unregister-AzStackHCI cmdlet 从 HCI 群集内触发注销,以进行彻底的注销。 本节介绍从门户中删除 HCI 群集资源的场景的清理步骤。

修正操作:

  1. 使用群集用户凭据登录到本地 HCI 群集服务器。
  2. Unregister-AzStackHCI 群集上运行 cmdlet 以清理群集注册状态和群集 Arc 状态。
    • 如果注销成功,请导航到“Microsoft Entra ID >和应用注册(所有应用程序)”并搜索与 clusterNameclusterName.arc 匹配的名称。 如果存在,请删除这两个应用 ID。
    • 如果注销失败并出现错误“错误: 无法在节点 <节点名称> 上禁用 Azure Arc 集成,请尝试在节点上运行 Disable-AzureStackHCIArcIntegration cmdlet如果节点处于无法运行 Disable-AzureStackHCIArcIntegration 的状态,请从群集中移除该节点,然后再次尝试运行 Unregister-AzStackHCI cmdlet”。登录到每个单独的节点:
      1. 将目录更改为安装 Arc 代理的位置:cd 'C:\Program Files\AzureConnectedMachineAgent\'
      2. 获取 arcmagent.exe 的状态,并确定其投影到的 Azure 资源组:.\azcmagent.exe show。 此命令的输出显示资源组信息。
      3. 强制断开 Arc 代理与节点的连接:.\azcmagent.exe disconnect --force-local-only
      4. 登录到 Azure 门户,并从步骤 ii 中确定的资源组中删除 Arc-for-Server 资源。

用户错误删除了应用 ID

故障状态说明:

如果群集断开连接超过 8 小时,则可能会意外删除表示 HCI 群集和 Arc 注册的关联的 Microsoft Entra 应用注册。 为了 HCI 群集和 Arc 方案的正常运行,注册期间会在租户中创建两个应用。

  • 如果删除 <clustername> 应用 ID,Azure 门户中的群集资源 Azure 连接将显示“已断开连接 - 群集未处于连接状态的时间超过 8 小时”。 查看节点上的 HCIsvc 调试日志:错误消息为:“在目录“默认目录”中找不到标识符为“<ID>”的应用程序。如果租户管理员未安装应用程序或租户中的任何用户未同意此应用程序,则可能会发生这种情况。你可能将你的身份验证请求发送给了错误的租户”。
  • 如果在 <clustername>.arc Arc 启用期间创建,则正常操作期间不会显示任何错误。 只有在注册和注销过程中才需要此标识。 在这种情况下,注销失败并出现错误“无法在节点 <节点名称> 上禁用 Azure Arc 集成。尝试在节点上运行 Disable-AzureStackHCIArcIntegration cmdlet。如果节点处于无法运行 Disable-AzureStackHCIArcIntegration cmdlet 的状态,请从群集中删除该节点,然后再次尝试运行 Unregister-AzStackHCI cmdlet”。

删除上述任何应用程序会导致无法从 HCI 群集与云通信。

修正操作:

  • 如果仅删除了 <clustername> AppId,请在群集上执行修复注册以设置 Microsoft Entra 应用程序:

    Register-AzStackHCI  -SubscriptionId "<subscription_ID>" -ComputerName Server1 -RepairRegistration
    

    修复注册会重新创建必要的 Microsoft Entra 应用程序,同时保留其他信息,例如资源名称、资源组和其他注册选项。

  • 如果删除 <clustername>.arc 应用 ID,日志中没有可见错误。 删除 <clustername>.arc 后注销会失败。 如果注销失败,请按照本节中所述的相同修正操作进行操作。

OutOfPolicy 错误

故障状态说明:

如果以前注册的群集显示“OutOfPolicy”状态,可能表示系统配置更改导致 Azure Stack HCI 的注册状态不再符合策略要求。

例如,系统更改可能包括但不限于:

  • 关闭“安全启动”设置在注册节点上发生冲突。
  • 清除受信任的平台模块 (TPM)。
  • 系统时间明显更改。

注意

带有 KB5010421 的 Azure Stack HCI 21H2 及更高版本将尝试自动从“OutOfPolicy”状态恢复。 查看 Microsoft-AzureStack-HCI/Admin 事件日志,详细了解当前“OutOfPolicy”状态及其他信息。

在注册期间,我应该看到哪些“OutOfPolicy”事件 ID 消息?

有三种类型的事件 ID 消息:信息性、警告和错误。

以下消息是带有 KB5010421 的 Azure Stack HCI 21H2 的更新信息,如果未安装 KB,则不会显示。

信息性事件 ID

注册过程中出现的信息性事件 ID 消息。 查看消息中的所有建议并依照执行:

  • (信息)事件 ID 592:“Azure Stack HCI 已启动对其数据的修复。 此时不需要用户执行任何操作。”

  • (信息)事件 ID 594:“Azure Stack HCI 在访问其数据时遇到错误。 若要解决,请检查受影响的节点 - 如果整个群集为 OutOfPolicy(运行 Get-AzureStackHCI),请在群集上运行 Unregister-AzStackHCI,重新启动然后运行 Register-AzStackHCI。 如果仅此节点受影响,请从群集中删除此节点,重新启动并等待修复完成,然后重新加入群集。”

警告事件 ID

如果是警告消息,注册的状态不是“已完成”。 实际上可能存在也可能不存在问题。 在采取任何故障排除步骤之前,先查看事件 ID 消息。

(警告)事件 ID 585:“Azure Stack HCI 未能从 Azure 续订许可证。 若要获取有关该特定错误的更多详细信息,请启用 Microsoft-AzureStack-HCI/Debug 事件通道。”

注意

注意:成功自动修复后,预期会在重新建立与 Azure 的完整连接时出现延迟,这可能会导致事件 ID 585 出现。 这不会影响节点的工作负载或授权。 即,仍有安装的许可证,除非节点已超出自动修复之前的 30 天期限。

注意

在某些情况下,Azure Stack HCI 可能无法成功完成自动恢复。 当群集中所有节点的注册状态均超处策略范围时,就会发生这种情况。 这时需要手动执行一些步骤。 请参阅 Microsoft-AzureStack-HCI/Admin 事件 ID 消息。

错误事件 ID

事件 ID 错误消息用于标识注册过程中的失败。 错误消息提供有关如何解决错误的说明。

  • (错误)事件 ID 591:“Azure Stack HCI 未能连接到 Azure。 如果你继续看到此错误,请尝试使用 -RepairRegistration 参数再次运行 Register-AzStackHCI

  • (错误)事件 ID 594:“Azure Stack HCI 在访问其数据时遇到错误。 要修复,请检查哪些节点受到影响:如果整个群集是 OutOfPolicy(运行 Get-AzureStackHCI),则在群集上运行 Unregister-AzStackHCI,重新启动,然后运行 Register-AzStackHCI。 如果仅此节点受影响,请从群集中删除此节点,重新启动并等待修复完成,然后重新加入群集。”

Azure 门户中的群集和 Arc 资源存在,但 Get-AzureStackHCI 状态显示“尚未注册”

故障状态说明:

此问题是由使用错误的云环境或不正确的订阅信息注销 HCI 群集引起的。 如果用户使用不正确的 -EnvironmentName-SubcriptionId 群集参数或参数运行 Unregister-AzStackHCI cmdlet,则会从本地群集本身中删除群集的注册状态,但 Azure 门户中的群集和 Arc 资源仍将存在于原始环境或订阅中。

例如:

  • -EnvironmentName <value> 错误:如以下示例所示在 -EnvironmentName AzureChinaCloud 中注册了你的群集。 请注意,-EnvironmentName 的默认值为“Azurecloud”。 例如,你运行了:

    Register-AzStackHCI  -SubscriptionId "<subscription_ID>" -EnvironmentName AzureChinaCloud
    

    但是你随后使用 -EnvironmentName Azurecloud(默认值)运行 Unregister-AzStackHCI cmdlet,如下所示:

    Unregister-AzStackHCI -SubscriptionId "<subscription_ID>"
    
  • -SubscriptionId <value> 错误:按如下所示了将群集注册到了 -SubscriptionId "<subscription_id_1>"

    Register-AzStackHCI  -SubscriptionId "<subscription_id_1>" -EnvironmentName AzureChinaCloud
    

    但随后你运行了 Unregister-AzStackHCI cmdlet 以获取其他订阅 ID:

    Unregister-AzStackHCI -SubscriptionId "<subscription_id_2>" -EnvironmentName AzureChinaCloud
    

修正操作:

  1. 从门户中删除群集和 Arc 资源。
  2. 导航到“Microsoft Entra ID >和应用注册(所有应用程序)”并搜索与 <clusterName><clusterName>.arc 匹配的名称,然后删除这两个应用 ID。

群集的节点重启后立即发出 Sync-AzureStackHCI 导致 Arc 资源删除

故障状态说明:

在节点同步之前执行人口普查同步可能会导致同步被发送到 Azure,其中不包括节点。 这会导致删除该节点的 Arc 资源。 Sync-AzureStackHCI cmdlet 仅用于调试 HCI 群集的云连接。 HCI 群集在重新启动以协调群集状态后有一小段预热时间;因此,不要在重启节点后立即执行 Sync-AzureStackHCI

修正操作:

  1. 在 Azure 门户中,登录到显示为“未安装”的节点。

  2. 使用以下两个命令断开 Arc 代理的连接:

    cd "C:\Program Files\AzureConnectedMachineAgent"
    

    然后在受影响的域控制器上,运行

    .\azcmagent.exe disconnect --force-local-only
    
  3. 修复注册:

    Register-AzStackHCI  -SubscriptionId "<subscription_ID>" -ComputerName Server1  -RepairRegistration -EnvironmentName AzureChinaCloud
    
  4. 修复操作后,节点将返回到连接状态。

注册成功完成,但门户中的 Azure Arc 连接显示“未安装”

方案 1

故障状态说明:

如果在 Arc-for-Server 资源组中从 HCI 资源提供程序删除了所需角色“Azure Connected Machine 资源管理器”,则可能会发生这种情况。

可以在 Azure 门户中资源组的“访问控制”边栏选项卡下查找权限。 下图显示了权限:

Screenshot of access control blade.

修正操作:

运行修复注册 cmdlet:

Register-AzStackHCI -TenantId "<tenant_ID>" -SubscriptionId "<subscription_ID>" -ComputerName Server1  -RepairRegistration -EnvironmentName AzureChinaCloud

方案 2

故障状态说明:

此消息也可能是在执行 Azure Stack HCI 注册时有时发生的暂时性问题所致。 发生这种情况时,Register-AzStackHCI cmdlet 会显示以下警告消息:

Screenshot of output message from Register-AzStackHCI cmdlet.

修正操作:

注册后等待 12 小时,问题即可自行解决。

方案 3

故障状态说明:

如果代理未正确配置为从 HCI 节点连接到 Azure ARC 云服务,也可能发生这种情况。 你可能会在 Arc 代理日志中看到以下错误:

Screenshot of Arc agent logs.

修正操作:

若要解决此问题,请按照指导更新代理设置。 然后,重新注册 Azure Stack HCI 群集。

无法在 Fairfax 和 Mooncake 中轮换证书

故障状态说明:

  1. 在 Azure 门户中,群集资源“Azure 连接”显示“已断开连接”。
  2. 查看节点上的 HCIsvc 调试日志。 错误消息将为“异常: AADSTS700027: 客户端断言签名验证失败”。
  3. 该错误也可以显示为“RotateRegistrationCertificate failed: 受众无效”。

修正操作:

在群集上执行修复注册,以在 Microsoft Entra 应用程序中添加新证书:

Register-AzStackHCI  -SubscriptionId "<subscription_ID>" -ComputerName Server1 -RepairRegistration -EnvironmentName AzureChinaCloud

修复注册会在 Microsoft Entra 应用程序中生成新的替换证书,同时保留其他信息,例如资源名称、资源组和其他注册选项。

OnPremisesPasswordValidationTimeSkew

故障状态说明:

如果本地节点时间与真实的当前时间 (UTC) 太不同步,则 Microsoft Entra 令牌将生成失败,并出现时间错误。 Microsoft Entra ID 返回以下错误:

AADSTS80013:OnPremisesPasswordValidationTimeSkew - 由于运行身份验证代理的计算机与 AD 之间存在时间偏差,身份验证尝试无法完成。 解决时间同步问题。

修正操作:

确保时间同步到已知且准确的时间源。

无法获取租户的令牌,出现错误

故障状态说明:

如果用于注册的用户帐户是多个 Microsoft Entra 租户的一部分,则必须在群集注册和注销期间指定 -TenantId,否则它会失败,并出现“无法获取租户的令牌,出现错误。必须使用多重身份验证来访问租户。请使用其他参数(-TenantId)来重新运行 Connect-AzAccount。”错误。

修正操作:

  • 对于群集注册,请指定 -TenantId 参数:

    Register-AzStackHCI  -SubscriptionId "<subscription_ID>" -ComputerName Server1 -TenantId <Tenant_ID> -EnvironmentName AzureChinaCloud
    
  • 对于注销,请指定 -TenantId 参数:

    Unregister-AzStackHCI -ComputerName ClusterNode1 -SubscriptionId "<subscription ID GUID>" -ResourceName HCI001 -TenantId <Tenant_ID> -EnvironmentName AzureChinaCloud
    

一个或多个群集节点无法连接到 Azure

故障状态说明:

如果一个或多个群集节点在注册后出现连接问题,并且长时间无法连接到 Azure,则会发生此问题。 即使解决了连接问题,节点也会由于证书已过期而无法重新连接到 Azure。

修正操作:

  1. 登录到已断开连接的节点。

  2. 运行 Disable-AzureStackHCIArcIntegration

  3. 运行 Get-AzureStackHCIArcIntegration 检查 ARC 集成状态,并确保状态现在对已断开连接的节点显示为“已禁用”:

    Screenshot of Get-AzureStackHCIArcIntegration cmdlet output.

  4. 登录到 Azure 门户并删除表示此节点的 Arc 服务器的 Azure 资源管理器资源。

  5. 再次登录到已断开连接的节点并运行 Enable-AzureStackHCIArcIntegration

  6. 在节点上运行 Sync-AzureStackHCI

尝试创建 VM 时作业失败

故障状态说明:

如果在部署时未将群集注册到 Azure,或者群集已注册但未连接到 Azure 的时间超过 30 天,系统将不允许创建或添加新的虚拟机 (VM)。 出现这种情况时,将在尝试创建 VM 时看到以下错误消息:

There was a failure configuring the virtual machine role for 'vmname'. Job failed. Error opening "vmname" clustered roles. The service being accessed is licensed for a particular number of connections. No more connections can be made to the service at this time because there are already as many connections as the service can accept.

修正操作:

将 HCI 群集注册到 Azure。 有关如何注册群集的信息,请参阅 Register-AzStackHCI 文档中的说明

为群集和 Arc-for-Server 资源使用公用资源组

最新的 PowerShell 模块支持为群集和 Arc-for-Server 资源使用一个公用资源组,或者为 Arc-for-Server 资源使用任何现有的资源组。

对于使用 PowerShell 模块版本 1.4.1 或更低版本注册的群集,可以执行以下步骤来使用新功能:

  1. 通过在一个节点中运行 Unregister-AzStackHCI 来注销群集。 请参阅使用 PowerShell 注销 Azure Stack HCI
  2. 安装最新的 PowerShell 模块:Install-Module Az.StackHCI -Force
  3. 通过为 -ResourceGroupName-ArcForServerResourceGroupName 传递相应的参数来运行 Register-AzStackHCI

注意

如果你为 Arc-for-Server 资源使用单独的资源组,建议使用一个仅包含与 Azure Stack HCI 相关的 Arc-for-Server 资源的资源组。 Azure Stack HCI 资源提供程序有权管理 ArcServerResourceGroup 中的任何其他 Arc-for-Server 资源。

后续步骤