第 4 章 KVM 实时迁移
本章论述了将一台主机物理机器中运行的客户机虚拟机迁移到另一个主机。在两个实例中,主机物理计算机运行 KVM 管理程序。
迁移描述了将客户机虚拟机从一个主机物理机器移到另一个主机的过程。这是因为客户机虚拟机正在虚拟化环境中运行,而不是直接在硬件上运行。迁移适用于:
- 负载平衡 - 虚拟机可以在主机物理机器过载时迁移到主机物理机器,或者另一台主机物理机器处于使用不足时。
- 硬件独立性 - 当我们需要升级、添加或删除主机物理机器上的硬件设备时,我们可以安全地将 guest 虚拟机重新定位到其他主机物理机器。这意味着,guest 虚拟机不会因硬件改进而停机。
- 节能 - 可以将虚拟机重新分发到其他主机物理机器,因此可以关闭来节省能源并在低用量时降低成本。
- 地理迁移 - 虚拟机可以移动到低延迟或严重情况下的另一位置。
迁移工作:将客户机虚拟机内存和任何虚拟设备的状态发送到目标主机物理机器。建议您使用共享、联网存储来存储要迁移的客户机虚拟机镜像。另外,还建议在迁移虚拟机时将 libvirt 管理的存储池用于共享存储。
迁移可以进行实时迁移,或者不执行。
在实时迁移中,客户机虚拟机可在源主机物理机器上继续运行,同时其内存页面会转移到目标主机物理机器。在迁移过程中,KVM 会监控其已传输的页面中任何更改的源,并在所有初始页面转移时开始传输这些更改。KVM 还估计迁移过程中传输速度,因此当要传输的剩余数据量将花费特定的配置期限(默认为 10 毫秒),KVM 会暂停原始 guest 虚拟机、传输剩余的数据,并在目标主机物理机器上恢复相同的客户机虚拟机。
未执行实时迁移,暂停客户机虚拟机,然后将客户机虚拟机内存的镜像移动到目标主机物理机器。然后,客户端虚拟机会在目标主机物理机器上恢复,并释放源主机物理机器中使用的 guest 虚拟机。完成此类迁移所需的时间取决于网络带宽和延迟。如果网络使用过重或低带宽,迁移将花费更长的时间。
如果原始 guest 虚拟机修改的页面比 KVM 可以将其传送到目标主机物理机器的速度快,则必须使用离线迁移,因为实时迁移永远不会完成。
4.1. 实时迁移要求
迁移客户机虚拟机需要以下内容:
迁移要求
- 使用以下协议之一在共享存储上安装的客户机虚拟机:
- 基于光纤通道的 LUN
- iSCSI
- FcoE
- NFS
- GFS2
- SCSI RDMA 协议(SCSI RCP):Infiniband 和 10GbE iWARP 适配器中使用的块导出协议
- 迁移平台和版本应根据表 表 4.1 “实时迁移兼容性” 检查。另请注意,Red Hat Enterprise Linux 6 支持在共享存储上使用 raw 和 qcow2 镜像的客户机虚拟机实时迁移。
- 两个系统都必须打开正确的 TCP/IP 端口。如果使用防火墙,请参考《 Red Hat Enterprise Linux 虚拟化安全指南》, https://access.redhat.com/site/documentation/ 该指南可通过以下网址获取详细的端口信息。
- 导出共享存储介质的独立系统。存储不应位于用于迁移的两个主机物理计算机上。
- 共享存储必须挂载到源和目标系统上的同一位置。挂载的目录名称必须相同。虽然可以使用不同路径保留镜像,但不建议这样做。请注意,如果您打算使用 virt-manager 执行迁移,则路径名称必须相同。但是,如果您想要使用 virsh 执行迁移,则可将不同的网络配置和挂载目录用于帮助 --xml 选项或进行迁移时预告。即使没有共享存储,迁移仍可以通过 --copy-storage-all 选项(已弃用)成功。有关 prehook 的更多信息,请参阅 libvirt.org,以及有关 XML 选项的更多信息,请参阅 第 20 章 操作域 XML。
- 当在公共 bridge+tap 网络中的现有客户端虚拟机上尝试迁移时,源和目标主机物理机器必须位于同一网络中。否则,客户机虚拟机网络在迁移后不会运行。
- 在 Red Hat Enterprise Linux 5 和 6 中,KVM 客户机虚拟机的默认缓存模式被设置为
none
,这可以防止磁盘状态不一致。将缓存选项设置为none
(例如使用 virsh attach-disk 缓存 none ),导致所有 guest 虚拟机的文件都使用O_DIRECT
标记(在调用 open syscall)时打开,从而绕过主机物理机器的缓存,并只在客户端虚拟机上提供缓存。将缓存模式设置为none
可防止潜在的不一致问题,并在使用时让虚拟机进行实时迁移。有关将缓存设置为none
的详情,请参考 第 13.3 节 “在客户机中添加存储设备”。
确保已启用
libvirtd
服务(# chkconfig libvirtd on)并运行(# service libvirtd start)。还务必要注意,高效迁移的能力取决于 /etc/libvirt/libvirtd.conf
配置文件中的参数设置。
过程 4.1. Configuring libvirtd.conf
- 打开
libvirtd.conf
需要以 root 用户身份运行命令:# vim /etc/libvirt/libvirtd.conf
- 根据需要更改参数并保存文件。
- 重启
libvirtd
服务:# service libvirtd restart