排查 Azure Stack HCI 注册问题
适用于:Azure Stack HCI 版本 22H2
排查 Azure Stack HCI 注册问题需要查看群集中每个服务器上的 PowerShell 注册日志和 hcisvc 调试日志。
收集 PowerShell 注册日志
运行 Register-AzStackHCI
和 Unregister-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-AzStackHCI
或 Unregister-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} 上设置和验证注册证书
如果错误消息中“无法在节点上生成自签名证书”部分的“节点”两字之后显示了节点名称,则表示系统无法在这些服务器上生成证书。
修正操作:
检查上述消息中列出的每个服务器是否已启动并正在运行。 可以通过运行
sc.exe query hcisvc
来检查 hcisvc 的状态,并根据需要使用start-service hcisvc
将它启动。检查错误消息中列出的每个服务器是否已连接到运行
Register-AzStackHCI
cmdlet 的计算机。 要进行验证,请在运行Register-AzStackHCI
的计算机中运行以下 cmdlet,使用New-PSSession
连接到群集中的每个服务器,并确保它起作用:New-PSSession -ComputerName {failing nodes}
如果错误消息中“无法在节点上设置和验证注册证书”部分的“节点”两字之后显示了节点名称,则表示服务可以在服务器上生成证书,但服务器无法成功调用 HCI 云服务 API。 故障排除:
确保每台服务器都具有与 Azure Stack HCI 云服务和其他所需的 Azure 服务(如 Microsoft Entra ID)通信所需的 Internet 连接,并且防火墙不会阻止这种通信。 请参阅 Azure Stack HCI 的防火墙要求。
尝试从 AzStackHCI.EnvironmentChecker 模块运行
Invoke-AzStackHciConnectivityValidation
cmdlet 并确保运行成功。 此 cmdlet 将调用 HCI 云服务的运行状况终结点来测试连接。查看错误消息中列出的每个节点上的 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 群集资源的场景的清理步骤。
修正操作:
- 使用群集用户凭据登录到本地 HCI 群集服务器。
- 在
Unregister-AzStackHCI
群集上运行 cmdlet 以清理群集注册状态和群集 Arc 状态。- 如果注销成功,请导航到“Microsoft Entra ID >和应用注册(所有应用程序)”并搜索与
clusterName
和clusterName.arc
匹配的名称。 如果存在,请删除这两个应用 ID。 - 如果注销失败并出现错误“错误: 无法在节点 <节点名称> 上禁用 Azure Arc 集成,请尝试在节点上运行
Disable-AzureStackHCIArcIntegration
cmdlet。如果节点处于无法运行Disable-AzureStackHCIArcIntegration
的状态,请从群集中移除该节点,然后再次尝试运行Unregister-AzStackHCI
cmdlet”。登录到每个单独的节点:- 将目录更改为安装 Arc 代理的位置:
cd 'C:\Program Files\AzureConnectedMachineAgent\'
。 - 获取 arcmagent.exe 的状态,并确定其投影到的 Azure 资源组:
.\azcmagent.exe show
。 此命令的输出显示资源组信息。 - 强制断开 Arc 代理与节点的连接:
.\azcmagent.exe disconnect --force-local-only
。 - 登录到 Azure 门户,并从步骤 ii 中确定的资源组中删除 Arc-for-Server 资源。
- 将目录更改为安装 Arc 代理的位置:
- 如果注销成功,请导航到“Microsoft Entra ID >和应用注册(所有应用程序)”并搜索与
用户错误删除了应用 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
修正操作:
- 从门户中删除群集和 Arc 资源。
- 导航到“Microsoft Entra ID >和应用注册(所有应用程序)”并搜索与
<clusterName>
和<clusterName>.arc
匹配的名称,然后删除这两个应用 ID。
群集的节点重启后立即发出 Sync-AzureStackHCI 导致 Arc 资源删除
故障状态说明:
在节点同步之前执行人口普查同步可能会导致将同步发送到 Azure,其中不包括该节点。 这会导致删除该节点的 Arc 资源。 Sync-AzureStackHCI
cmdlet 仅用于调试 HCI 群集的云连接。 HCI 群集在重启后有一小段预热时间用于协调群集状态;因此,请勿在重启节点后立即执行 Sync-AzureStackHCI
。
修正操作:
在 Azure 门户中,登录到显示为“未安装”的节点。
使用以下两个命令断开 Arc 代理的连接:
cd "C:\Program Files\AzureConnectedMachineAgent"
然后在受影响的域控制器上,运行
.\azcmagent.exe disconnect --force-local-only
修复注册:
Register-AzStackHCI -SubscriptionId "<subscription_ID>" -ComputerName Server1 -RepairRegistration -EnvironmentName AzureChinaCloud
修复操作后,节点将返回到连接状态。
注册成功完成,但门户中的 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 会显示以下警告消息:
修正操作:
注册后等待 12 小时,问题即可自行解决。
方案 3
故障状态说明:
如果代理未正确配置为从 HCI 节点连接到 Azure ARC 云服务,也可能发生这种情况。 你可能会在 Arc 代理日志中看到以下错误:
修正操作:
若要解决此问题,请按照指导更新代理设置。 然后,重新注册 Azure Stack HCI 群集。
无法在 Fairfax 和 Mooncake 中轮换证书
故障状态说明:
- 在 Azure 门户中,群集资源“Azure 连接”显示“已断开连接”。
- 查看节点上的 HCIsvc 调试日志。 错误消息为“异常: AADSTS700027: 客户端断言签名验证失败”。
- 该错误也可以显示为“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。
修正操作:
登录到已断开连接的节点。
运行
Disable-AzureStackHCIArcIntegration
。运行
Get-AzureStackHCIArcIntegration
检查 ARC 集成状态,并确保状态现在对已断开连接的节点显示为“已禁用”:登录到 Azure 门户并删除表示此节点的 Arc 服务器的 Azure 资源管理器资源。
再次登录到已断开连接的节点并运行
Enable-AzureStackHCIArcIntegration
。在节点上运行
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 或更低版本注册的群集,可以执行以下步骤来使用新功能:
- 通过在一个节点中运行
Unregister-AzStackHCI
来注销群集。 请参阅使用 PowerShell 注销 Azure Stack HCI。 - 安装最新的 PowerShell 模块:
Install-Module Az.StackHCI -Force
。 - 通过为
-ResourceGroupName
和-ArcForServerResourceGroupName
传递相应的参数来运行Register-AzStackHCI
。
注意
如果你为 Arc-for-Server 资源使用单独的资源组,建议使用一个仅包含与 Azure Stack HCI 相关的 Arc-for-Server 资源的资源组。 Azure Stack HCI 资源提供程序有权管理 ArcServerResourceGroup 中的任何其他 Arc-for-Server 资源。