Red Hat Training

A Red Hat training course is available for Red Hat Virtualization

6.13. 在主机间迁移虚拟机

实时迁移为用户提供了一个在不中断服务的情况下把运行的虚拟机在物理主机间进行迁移的功能。在虚拟机迁移到新物理主机的过程中,虚拟机上的用户应用仍然会正常运行。同时,虚拟机的内存数据会被复制到需要被迁移到的主机中,存储和网络连接则不会被改变。

6.13.1. 实时迁移的必要条件

在您使用实时迁移前,请确定您的 Red Hat Virtualization 环境已经被正确配置为可以进行实时迁移。
要使实时迁移可以成功进行,最少需要满足以下条件:
  • 源主机和目标主机必须在同一个集群中,并且它们的 CPU 必须兼容。

    注意

    一般情况下,不推荐在不同的集群间实时迁移虚拟机。目前唯一支持的情况在 https://access.redhat.com/articles/1390733 中进行了介绍。
  • 源主机和目标主机的状态必须都为 Up
  • 源主机和目标主机必须都可以访问相同的虚拟网络和 VLAN。
  • 源主机和目标主机必须都可以访问虚拟机所在的数据存储域。
  • 目标主机必须有足够的 CPU 资源来支持虚拟机的需求。
  • 目标主机必须有足够的可用内存来支持虚拟机的需求。
  • 要迁移的虚拟机必须没有 cache!=none 这个自定义属性设置。
另外,为了获得最好的性能,存储网络和管理网络应该被分开,从而可以避免网络饱和情况的出现。虚拟机的迁移将会在主机间传输大量数据。
实时迁移是通过管理网络进行的。每个实时迁移所使用的网络传输速率被限制为 30 MBps,同时进行的迁移数量也在默认的情况下被限制。虽然有这些限制,同时进行多个迁移可能会导致管理网络饱和。因此,我们推荐为存储、显示和虚拟机数据分别创建单独的逻辑网络来降低网络饱和的危险。

6.13.2. 优化实时迁移

实时迁移虚拟 机是一个需要大量资源的操作。通过对环境中的所有虚拟机(在集群一级或单独的虚拟机一级)设置以下两个选项,可以对它进行优化。
自动聚合迁移选项可以被用来指定在迁移虚拟机的过程中是否进行自动聚合。带有大量负载的大型虚拟机会很快“弄脏”内存,这个速率会比实时迁移所能达到的传输速率更快,因此,迁移无法被聚合。QEMU 中的自动聚合功能允许您对虚拟机迁移进行强制聚合。QEMU 会自动检测到没有进行聚合,并在虚拟机上触发一个降低 vCPU 速度的操作。
启用迁移压缩选项可以被用来指定在迁移虚拟机的过程中是否进行压缩。这个功能会使用 Xor Binary Zero Run-Length-Encoding,它会缩短那些运行需要大量写入内存的负载的虚拟机的下线时间,以及那些运行具有稀松内存更新特征的应用程序的虚拟机的下线时间。
在默认情况下,这两个选项都被全局禁用。

过程 6.25. 为虚拟机迁移配置自动聚合和迁移压缩

  1. 在全局一级配置优化设置:
    1. 在全局一级启用自动聚合:
      # engine-config -s DefaultAutoConvergence=True
    2. 在全局一级启用迁移压缩:
      # engine-config -s DefaultMigrationCompression=True
    3. 重新启动 ovirt-engine 服务使所做的修改生效:
      # service ovirt-engine restart
  2. 在集群一级配置优化设置:
    1. 选择一个集群。
    2. 编辑
    3. 调动策略标签页。
    4. 自动聚合迁移列表中选从全局设置继承自动聚合不自动聚合
    5. 启用迁移压缩列表中选从全局设置继承压缩不压缩
  3. 在虚拟机一级配置优化设置:
    1. 选择一个虚拟机。
    2. 编辑
    3. 主机标签页。
    4. 自动聚合迁移列表中选从集群设置继承自动聚合不自动聚合
    5. 启用迁移压缩列表中选从集群设置继承压缩不压缩

6.13.3. 自动虚拟机迁移

当一个主机被设为维护模式后,Red Hat Virtualization Manager 将会自动启动虚拟机实时迁移的操作,它会把这个主机上所运行的所有虚拟机迁移到这个集群中的其它主机上。
Manager 会根据调度策略中所规定的负载平衡或电源管理级别来自动进行虚拟机的实时迁移。在默认的情况下,调度策略没有被定义,但是如果您需要使用实时迁移的功能,我们推荐您设置一个适合于您的具体情况的调度策略。您也可以在需要的时候,在特定虚拟机上禁用自动(甚至手动)实时迁移功能。

6.13.4. 防止虚拟机自动迁移发生

Red Hat Virtualization Manager 允许您禁用虚拟机自动迁移功能。另外,您也可以通过设定虚拟机只能在一个特定主机上运行的选项,来禁用手动虚拟机迁移的功能。
禁用自动虚拟机迁移并指定虚拟机只能在一个特定的主机上运行对于使用高可用性产品(如 Red Hat High Availability 或 Cluster Suite)非常有用。

过程 6.26. 防止虚拟机自动迁移发生

  1. 虚拟机标签页并选择一个虚拟机。
  2. 编辑
    编辑虚拟机窗口

    图 6.15. 编辑虚拟机窗口

  3. 主机标签页。
  4. 运行在选项中指定虚拟机是运行在集群里的任何主机专有的主机。如果选择了专有的,从下拉列表中选择一个主机或一组主机。

    警告

    明确指定一台虚拟机只能在特定主机上运行并禁用迁移将无法实现 Red Hat Virtualization 的高可用性,除非使用第三方的高可用性产品(如 Red Hat High Availability)。另外,这个限制也不适用于把虚拟机分配到多个主机的情况。

    重要

    如果虚拟机已直接附加了其它主机的设备,则这些设备会被自动从虚拟机上删除。
  5. 迁移选项下拉列表中选只允许手工迁移不允许迁移
  6. 或者,选使用自定义迁移下线时间选项并指定一个值(以毫秒为单位)。
  7. 确定

6.13.5. 手动迁移虚拟机

一个正在运行的虚拟机可以被实时迁移(live migrate)到同一个主机集群中的任何一个主机上。实时迁移虚拟机不会造成服务中断。当某个主机的负载过高时,迁移它上面的虚拟机将会非常有用。如需了解实时迁移的详细信息,请参阅 第 6.13.1 节 “实时迁移的必要条件”

注意

当把一个主机设置为维护模式时,在它上面运行的虚拟机会被自动迁移到同一个集群中的其它主机上。您不需要手工迁移这些虚拟机。

注意

一般情况下,不推荐在不同的集群间实时迁移虚拟机。目前唯一支持的情况在 https://access.redhat.com/articles/1390733 中进行了介绍。

过程 6.27. 手动迁移虚拟机

  1. 虚拟机标签页并选择一个运行的虚拟机。
  2. 迁移
  3. 选择自动选择主机项,或选择选择目的地主机项并从下拉列表中选择主机。

    注意

    当选择了自动选择主机选项时,系统会根据调度策略中的负载均衡和电源管理设置来决定虚拟机将会被迁移到哪个主机上。
  4. 确定
在迁移过程中,迁移的进程显示在迁移进度条中。当迁移过程完成后,主机项的内容会被更新为新的主机。

6.13.6. 设置迁移优先级

Red Hat Virtualization Manager 会把一个主机上的虚拟机迁移请求放入到一个队列中。当这个队列中有一个迁移请求,而且集群中有可用的主机时,一个迁移事件就会根据集群中的负载均衡策略被触发。每一分钟负载均衡处理都会被运行,那些正在处理迁移事件的主机在它们的迁移事件完成前不会被包括在负载均衡处理中。
您可以通过为每个虚拟机设置优先级来影响迁移队列的顺序。例如,把虚拟机设置为“mission critical”可以使它在其它虚拟机之前被迁移。迁移的顺序由虚拟机的优先级决定,有高优先级的虚拟机会被先迁移。

过程 6.28. 设置迁移优先级

  1. 虚拟机标签页并选择一个虚拟机。
  2. 编辑
  3. 选择高可用性标签页。
  4. 优先级下拉列表中选择
  5. 确定

6.13.7. 取消正在进行的虚拟机迁移

一个正在进行的虚拟机迁移所用的时间比您预期的要长,而您需要对系统进行一些改变。因此,您需要取消正在进行的虚拟机迁移。

过程 6.29. 取消正在进行的虚拟机迁移

  1. 选择正在迁移的虚拟机。它在虚拟机资源页中的状态为 Migrating from
  2. 取消迁移
虚拟机的状态从 Migrating from 变为 Up

6.13.8. 高可用性虚拟机自动迁移的事件和日志

当一台虚拟机因为高可用性设置而发生自动迁移操作时,自动迁移的详细信息会被记录在事件标签页以及引擎的日志中。这些信息可以被用来进行故障排除。以下是这些信息的一些实例:

例 6.1. 在管理门户网络界面的事件页中的内容

Highly Available Virtual_Machine_Name failed. It will be restarted automatically.
Virtual_Machine_Name was restarted on Host Host_Name

例 6.2. Manager 中的 engine.log 的内容

这个日志文件是 Red Hat Virtualization Manager 上的 /var/log/ovirt-engine/engine.log:
Failed to start Highly Available VM. Attempting to restart. VM Name: Virtual_Machine_Name, VM Id:Virtual_Machine_ID_Number