应对机器故障

Last published : Oct 07, 2026
本节详细介绍了如何从各种故障场景中恢复。所有故障恢复场景都需要使用 备份 中列出的一种或多种备份类型。

成员故障

在没有 HA 的情况下,池协调器节点通过接收定期心跳消息来检测成员故障。如果在 600 秒内未收到心跳,池协调器会假定该成员已死亡。有两种方法可以从该问题中恢复:
  • 修复已死亡的主机(例如,通过物理重启它)。当与成员的连接恢复时,池协调器会将该成员再次标记为活动状态。
  • 关闭主机并使用 xe host-forget CLI 命令指示池协调器忘记该成员节点。一旦该成员被遗忘,所有在该成员上运行的虚拟机都将被标记为离线,并可以在其他 XenServer 主机上重新启动。
    务必确保 XenServer® 主机确实处于离线状态,否则可能会发生虚拟机数据损坏。
    请勿使用 xe host-forget 将您的池拆分为多个单主机池。此操作可能导致它们都映射相同的共享存储并损坏虚拟机数据。
警告:
  • 如果您打算再次将已遗忘的主机用作活动主机,请重新安装 XenServer 软件。
  • 如果池上启用了 HA,请勿使用 xe host-forget 命令。请先禁用 HA,然后忘记主机,再重新启用 HA。
当成员 XenServer 主机发生故障时,可能仍有虚拟机注册为 运行中 状态。如果您确定成员 XenServer 主机已完全关闭,请使用 xe vm-reset-powerstate CLI 命令将虚拟机的电源状态设置为 halted。有关更多详细信息,请参阅 vm-reset-powerstate。
警告:
错误使用此命令可能导致数据损坏。仅在必要时使用此命令。
在您可以在另一个 XenServer 主机上启动虚拟机之前,您还需要释放虚拟机存储上的锁。每个 SR 中的每个磁盘一次只能由一个主机使用。一旦主机发生故障,使磁盘可供其他 XenServer 主机访问至关重要。为此,请在池协调器上为包含任何受影响虚拟机磁盘的每个 SR 运行以下脚本:/opt/xensource/sm/resetvdis.py host_UUID SR_UUID master
您只需在发生崩溃时,如果故障主机是 SR 池协调器,才需要提供第三个字符串(“master”)。(SR 池协调器是池协调器或使用本地存储的 XenServer 主机。)
警告:
在运行此命令之前,请确保主机已关闭。不正确使用此命令可能导致数据损坏。
如果您在运行 resetvdis.py 脚本之前尝试在另一个 XenServer 主机上启动虚拟机,则会收到以下错误消息:VDI <UUID> already attached RW。

池协调器故障

资源池的每个成员都包含必要的信息,以便在需要时接管池协调器的角色。当池协调器节点发生故障时,会发生以下事件序列:
  1. 如果 HA 已启用,则会自动选举另一个池协调器。
  2. 如果 HA 未启用,则每个成员都会等待池协调器返回。
如果池协调器此时恢复运行,它会与其成员重新建立通信,并且操作恢复正常。
如果池协调器已失效,请选择其中一个成员并在其上运行命令 xe pool-emergency-transition-to-master。一旦它成为池协调器,请运行命令 xe pool-recover-slaves,然后成员将指向新的池协调器。
如果您修复或替换了作为原始池协调器的主机,您可以简单地启动它,安装 XenServer 软件,并将其添加到池中。由于池中的 XenServer 主机强制保持同构,因此没有真正的必要将替换的主机设为池协调器。
当成员 XenServer 主机转换为池协调器时,请检查默认池存储库是否设置为适当的值。可以使用 xe pool-param-list 命令执行此检查,并验证 default-SR 参数是否指向有效的存储库。

池故障

万一您的整个资源池发生故障,您必须从头开始重新创建池数据库。请务必使用 xe pool-dump-database CLI 命令定期备份您的池元数据(请参阅 pool-dump-database)。
要恢复完全失效的池:
  1. 安装一组新的主机。在此阶段不要将它们池化。
  2. 对于被指定为池协调器的主机,使用 xe pool-restore-database 命令从备份中恢复池数据库(请参阅 pool-restore-database)。
  3. 使用 XenCenter® 连接到池协调器,并确保所有共享存储和虚拟机再次可用。
  4. 对剩余新安装的成员主机执行池加入操作,并在适当的主机上启动虚拟机。

应对配置错误导致的问题

如果物理主机正常运行,但软件或主机配置已损坏:
  1. 运行以下命令以恢复主机软件和配置:
    xe host-restore host=host file-name=hostbackup
  2. 重新启动到主机安装 CD,然后选择 从备份恢复。

物理机故障

如果物理主机发生故障,请使用以下列表中的相应过程进行恢复。
警告:
任何在先前成员(或先前主机)上运行且已发生故障的虚拟机在数据库中仍被标记为 Running。此行为是为了安全。在两台不同主机上同时启动虚拟机将导致严重的磁盘损坏。如果您确定机器(和虚拟机)已离线,可以将虚拟机的电源状态重置为 Halted:
xe vm-reset-powerstate vm=vm_uuid --force
然后可以使用 XenCenter 或 CLI 重新启动虚拟机。
要用仍在运行的成员替换发生故障的池协调器:
  1. 运行以下命令:
    xe pool-emergency-transition-to-master
    xe pool-recover-slaves
  2. 如果命令成功,请重新启动虚拟机。
恢复所有主机均已失败的资源池:
  1. 运行命令:
    xe pool-restore-database file-name=backup
    警告:
    仅当目标计算机具有适当数量的命名正确的 NIC 时,此命令才能成功。
  2. 如果目标计算机对存储的看法与原始计算机不同,请使用 pbd-destroy 命令修改存储配置。接下来使用 pbd-create 命令重新创建存储配置。有关这些命令的文档,请参阅 pbd 命令。
  3. 如果您已创建存储配置,请使用 pbd-plug 或 XenCenter 中的存储 > 修复存储库菜单项来使用新配置。
  4. 重新启动所有虚拟机。
在虚拟机存储不可用时恢复虚拟机:
  1. 运行以下命令:
    xe vm-import filename=backup metadata=true
  2. 如果元数据导入失败,请运行以下命令:
    xe vm-import filename=backup metadata=true --force
    此命令将尽最大努力尝试恢复虚拟机元数据。
  3. 重新启动所有虚拟机。