排查 Azure Stack HCI 注册问题

适用于:Azure Stack HCI 版本 22H2

排查 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 门户中资源组的“访问控制”边栏选项卡下查找权限。 下图显示了权限:

访问控制边栏选项卡的屏幕截图。

修正操作:

运行修复注册 cmdlet:

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

方案 2

故障状态说明:

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

Register-AzStackHCI cmdlet 的输出消息的屏幕截图。

修正操作:

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

方案 3

故障状态说明:

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

Arc 代理日志的屏幕截图。

修正操作:

若要解决此问题,请按照指导更新代理设置。 然后,重新注册 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 集成状态,并确保状态现在对已断开连接的节点显示为“已禁用”:

    Get-AzureStackHCIArcIntegration cmdlet 的输出的屏幕截图。

  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 资源。

后续步骤