迁移实例

如果硬件故障或其他错误导致云计算节点失败,您可以迁移实例以使其再次可用。

为了保留服务器磁盘上的用户数据,请在目标主机上配置共享存储。当您迁移实例时,Compute 会检测目标主机上是否可用共享存储。此外,您必须验证当前 VM 主机是否未运行。否则,迁移将失败。

有两种不同的方法可以从失败的计算节点迁移实例。第一种使用 nova evacuate 命令可以用来从失败节点迁移单个实例。在某些情况下,如果该节点托管了许多实例,使用 nova host-evacuate 一次性迁移所有实例可能更容易。

迁移单个实例

以下步骤说明了如何从失败的计算节点迁移单个实例。请注意,这些步骤描述了故障后的场景,不应在实例仍然启动并运行时使用。

  1. 要查找迁移实例的主机,请列出所有主机

    $ openstack host list
    
  2. 迁移实例。您可以使用 --password PWD 选项将实例密码传递给该命令。如果您没有指定密码,该命令将在成功完成后生成并打印一个密码。以下命令将从失败的主机迁移服务器到 HOST_B

    $ nova evacuate EVACUATED_SERVER_NAME HOST_B
    

    该命令将从原始镜像或卷重新构建实例,并返回一个密码。该命令保留原始配置,包括实例 ID、名称、uid、IP 地址等。

    +-----------+--------------+
    | Property  |    Value     |
    +-----------+--------------+
    | adminPass | kRAJpErnT4xZ |
    +-----------+--------------+
    

    您可以选择省略 HOST_B 参数,让调度器选择新的目标主机。

  3. 为了保留迁移服务器上的用户磁盘数据,请使用共享文件系统部署 Compute。要配置您的系统,请参阅 配置实时迁移。以下示例不会更改密码。

    $ nova evacuate EVACUATED_SERVER_NAME HOST_B --on-shared-storage
    

    注意

    从 2.14 compute API 版本开始,不再需要指定 --on-shared-storage 即使服务器位于使用共享存储的计算主机上。Compute 服务将自动检测它是否正在运行在共享存储上。

迁移所有实例

以下步骤说明了如何从失败的计算节点迁移所有实例。请注意,如果主机仍然有启动并运行的实例,则不应使用此方法。

  1. 要查找迁移实例的主机,请列出所有主机

    $ openstack host list
    
  2. 将所有实例从 FAILED_HOST 迁移到 TARGET_HOST

    $ nova host-evacuate --target_host TARGET_HOST FAILED_HOST
    

    选项 --target_host 是可选的,可以省略让调度器决定将实例放置在何处。

    上述参数 FAILED_HOST 也可以是用于搜索的模式,而不是精确的 hypervisor 主机名,但建议使用完全限定域名以确保没有 hypervisor 主机被错误地迁移。只要您没有使用模式,您可能需要使用在版本 10.2.0 中引入的 --strict 标志,以确保 nova 完全匹配 FAILED_HOST

注意

+------+--------+--------------+
| Name | Status | Task State   |
+------+--------+--------------+
| vm_1 | ACTIVE | powering-off |
+------------------------------+

如果实例任务状态不是 None,则可以进行迁移。但是,根据正在进行的操作,可能需要在其他服务中进行清理,例如 neutron、cinder、glance 或存储后端。