10.8. 虚拟机迁移故障排除
如果您在迁移虚拟机(VM)时面临以下问题之一,请参阅提供的说明来修复或避免问题。
10.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 rate
和 Page size
大于 Memory bandwidth
。这意味着,虚拟机产生脏内存页的速度超过网络可以迁移它们的速度。因此,目标主机上虚拟机的状态无法与源主机上的虚拟机状态进行聚合,这阻止了迁移完成。
修复
要提高停滞的实时迁移成功完成的机会,您可以执行以下操作之一:
减少虚拟机的工作负载,特别是内存更新。
- 为此,停止或取消源虚拟机的客户机操作系统中的非必要进程。
增加实时迁移允许的停机时间:
显示迁移的虚拟机实时迁移结束时当前最大停机时间:
# virsh migrate-getmaxdowntime vm-name
设置更高的最大停机时间:
# 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
在迁移过程中调整它,如前面所述。
-
您可以使用