XenServer

应对机器故障

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

成员故障

在没有 HA 的情况下,池协调器节点通过接收定期心跳消息来检测成员故障。如果 600 秒内未收到心跳,池协调器会假定该成员已死亡。有两种方法可以从该问题中恢复:

  • 修复已死亡的主机(例如,通过物理重启它)。当与成员的连接恢复时,池协调器会将该成员再次标记为活动状态。

  • 关闭主机并使用 xe host-forget CLI 命令指示池协调器忘记该成员节点。一旦该成员被遗忘,所有在该成员上运行的 VM 都将被标记为离线,并可以在其他 XenServer 主机上重新启动。

    务必确保 XenServer® 主机确实处于离线状态,否则可能会发生 VM 数据损坏。

    请勿使用 xe host-forget 将您的池拆分为多个单主机池。此操作可能导致它们都映射相同的共享存储并损坏 VM 数据。

警告:

  • 如果您打算再次将已遗忘的主机用作活动主机,请重新安装 XenServer 软件。
  • 如果池上启用了 HA,请勿使用 xe host-forget 命令。请先禁用 HA,然后忘记主机,再重新启用 HA。

当成员 XenServer 主机发生故障时,可能仍有 VM 注册为 运行中 状态。如果您确定成员 XenServer 主机已完全关闭,请使用 xe vm-reset-powerstate CLI 命令将 VM 的电源状态设置为 halted。有关更多详细信息,请参阅 vm-reset-powerstate

警告:

错误使用此命令可能导致数据损坏。仅在必要时使用此命令。

在您可以在另一个 XenServer 主机上启动 VM 之前,您还需要释放 VM 存储上的锁。每个 SR 中的每个磁盘一次只能由一个主机使用。一旦主机发生故障,使磁盘可供其他 XenServer 主机访问是关键。为此,请在池协调器上为包含任何受影响 VM 磁盘的每个 SR 运行以下脚本:/opt/xensource/sm/resetvdis.py host_UUID SR_UUID master

您只需提供第三个字符串(“master”),如果发生故障的主机在崩溃时是 SR 池协调器。(SR 池协调器是池协调器或使用本地存储的 XenServer 主机。)

警告:

在运行此命令之前,请确保主机已关闭。不正确使用此命令可能导致数据损坏。

如果在运行 resetvdis.py 脚本之前尝试在另一个 XenServer 主机上启动 VM,则会收到以下错误消息: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
    <!--NeedCopy-->
    
  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
    <!--NeedCopy-->
    
  2. 如果命令成功,请重新启动虚拟机。

恢复所有主机均已失败的池:

  1. 运行命令:

    xe pool-restore-database file-name=backup
    <!--NeedCopy-->
    

    警告:

    此命令仅在目标计算机具有适当数量的、命名正确的网卡时才能成功。

  2. 如果目标计算机的存储视图与原始计算机不同,请使用 pbd-destroy 命令修改存储配置。接下来使用 pbd-create 命令重新创建存储配置。有关这些命令的文档,请参阅 pbd 命令

  3. 如果您已创建存储配置,请使用 pbd-plug 或 XenCenter 中的存储 > 修复存储库菜单项来使用新配置。

  4. 重新启动所有虚拟机。

在虚拟机存储不可用时恢复虚拟机:

  1. 运行以下命令:

    xe vm-import filename=backup metadata=true
    <!--NeedCopy-->
    
  2. 如果元数据导入失败,请运行以下命令:

    xe vm-import filename=backup metadata=true --force
    <!--NeedCopy-->
    

    此命令将尽力尝试恢复虚拟机元数据。

  3. 重新启动所有虚拟机。

应对机器故障