Red Hat Training

A Red Hat training course is available for RHEL 8

9.8. 虚拟机迁移故障排除

如果您在迁移虚拟机(VM)时面临以下问题之一,请参阅提供的说明来修复或避免问题。

9.8.1. 在不完成的情况下,虚拟机的实时迁移需要很长时间

原因

在某些情况下,迁移正在运行的虚拟机可能会导致虚拟机更快地生成 脏内存页面,而不是迁移它们。当发生这种情况时,迁移无法成功完成。

以下场景经常导致这个问题:

  • 在负载过重时实时迁移虚拟机
  • 实时迁移使用大量内存的虚拟机,如 1 TB 或更多

    重要

    红帽已成功测试了 VM 的实时迁移,最多 6TB 内存。但是,对于涉及超过 1 TB 内存的虚拟机的实时迁移场景,客户应 联系红帽技术支持

诊断

如果您的虚拟机实时迁移所需的时间比预期要长,请使用 virsh domjobinfo 命令获取虚拟机的内存页面数据:

# virsh domjobinfo vm-name

Job type:         Unbounded
Operation:        Outgoing migration
Time elapsed:     168286974    ms
Data processed:   26.106 TiB
Data remaining:   34.383 MiB
Data total:       10.586 TiB
Memory processed: 26.106 TiB
Memory remaining: 34.383 MiB
Memory total:     10.586 TiB
Memory bandwidth: 29.056 MiB/s
Dirty rate: 17225 pages/s
Page size: 4096 bytes

在这个输出中,Dirty 速率的 多重,页面大小大于 内存带宽。这意味着,虚拟机正在更快地生成脏内存页面,超过网络可以迁移它们。因此,目标主机上虚拟机的状态无法与源主机上的虚拟机状态进行聚合,这会阻止迁移完成。

修复

要改进不良的实时迁移成功完成的机会,您可以执行以下操作之一:

  • 减少虚拟机的工作负载,特别是内存更新。

    • 要做到这一点,在源虚拟机的客户机操作系统中停止或取消非必要的进程。
  • 增加实时迁移允许的停机时间:

    1. 在正在迁移的虚拟机实时迁移结束时显示当前的最大停机时间:

      # virsh migrate-getmaxdowntime vm-name
    2. 设置最大停机时间:

      # virsh migrate-setmaxdowntime vm-name downtime-in-miliseconds

      设置最大停机时间的数值,迁移将更有可能完成。

  • 将实时迁移切换到 复制后 模式。

    # virsh migrate-start-postcopy vm-name
    • 这样可确保虚拟机的内存页面可以聚合到目标主机上,并且迁移可以完成。

      但是,当 post-copy 模式处于活跃状态时,虚拟机可能会显著减慢,因为目标主机的远程页面请求到源主机。另外,如果源主机和目标主机之间的网络连接在复制后迁移过程中停止工作,则一些虚拟机进程可能会因为缺少内存页面而停止。

      因此,如果虚拟机可用性至关重要,或者迁移网络不稳定,请不要使用复制后迁移。

  • 如果您的工作负载允许,请挂起虚拟机,并使迁移作为 非实时 迁移完成。这会增加虚拟机的停机时间,但多数情况下,确保迁移成功完成。

防止

成功完成虚拟机的实时迁移的可能性取决于以下内容:

  • 在迁移过程中虚拟机的工作负载

    • 在开始迁移前,在虚拟机的客户机操作系统中停止或取消非必要的进程。
  • 主机可用于迁移的网络带宽

    • 对于实时迁移的最佳结果,用于迁移的网络带宽必须显著高于虚拟机的脏页面生成。有关获取 VM 脏页面生成率的说明,请参阅 使用命令行界面迁移虚拟机 的先决条件。
    • 源主机和目标主机必须具有专用的网络接口控制器(NIC)才能迁移。对于实时迁移内存超过 1 TB 的虚拟机,红帽建议 NIC 速度为 25 Gb/s 或更多。
    • 您还可以在启动迁移时使用 --bandwidth 选项指定分配给实时迁移的网络带宽。对于迁移非常大的虚拟机,请为部署分配尽可能多的带宽。
  • 实时迁移模式

    • 默认 预复制 迁移模式会在内存页面变为脏状态时重复复制它们。
    • 后复制 迁移仅复制一次内存页面。

      要启用实时迁移,在迁移停滞时切换到 post-copy 模式,请在开始迁移时使用带有 virsh migrate--postcopy 选项。

  • 为部署指定的停机时间

    • 您可以使用 virsh migrate-setmaxdowntime 在迁移过程中调整它,如前面所述。