Red Hat Training

A Red Hat training course is available for RHEL 8

9.8. 虚拟机迁移故障排除

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

9.8.1. 虚拟机的实时迁移花费了很长时间,而没有完成

原因

在某些情况下,迁移正在运行的虚拟机可能会导致虚拟机产生 脏内存页 的速度超过迁移它们的速度。当发生这种情况时,迁移无法成功完成。

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

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

    重要

    红帽已成功测试了实时迁移最多 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 ratePage size 大于 Memory bandwidth。这意味着,虚拟机产生脏内存页的速度超过网络可以迁移它们的速度。因此,目标主机上虚拟机的状态无法与源主机上的虚拟机状态进行聚合,这阻止了迁移完成。

修复

要提高停滞的实时迁移成功完成的机会,您可以执行以下操作之一:

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

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

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

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

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

      设置的最大停机时间越高,迁移越有可能完成。

  • 将实时迁移切换到 post-copy 模式。

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

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

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

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

防止

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

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

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

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

    • 默认的 pre-copy 迁移模式会在内存页变为脏时重复复制它们。
    • Post-copy 迁移仅复制内存页一次。

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

  • 为部署指定的停机时间

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