KVM虚拟机在不一样主机之间的迁移,是个复杂的问题,有很是多的解决方案,可是不一样的解决方案都有其优势和缺点,下面来分析下当前几种可用的KVM虚拟机迁移的方案。
1. 虚拟机迁移过程当中数据的传输(磁盘镜像和内存数据)
一般有两种经常使用的数据传输方式:
— 基于hypervisor的传输机制,即经过host之间链接来进行数据传输
— 基于libvirtd的传输机制,即两个libvirtd进程之间的数据传输
(1)基于hypervisor的数据传输
这种传输方式具备最低的overload,由于传输的是裸数据,不支持数据的加密。另外,由于依赖于hypervisor的网络,因此须要对hypervisor networks进行一些特定的配置,好比打开某些端口。
html
(2)基于libvirtd的数据传输
这种传输方式支持加密,是经过libvirt内建的RPC协议来进行数据的传输的,可是缺点是除了传输裸数据外,还须要传输一些额外的数据,这对镜像尺寸 很大的虚拟机来讲是个大问题。优势是因为不依赖与hypervisor network,因此不须要hypervisor对network作过多的配置,仅仅打开某个指定的port便可。 ios
(2)虚拟机迁移过程当中的控制流 网络
带有管理端的直接迁移,这种迁移方式是由一个管理客户端发起,管理客户端彻底控制整个迁移流程,因此它必须可以且有权限访问源主机和目的主机上 libvirtd的权限,由于外加一个管理客户端,因此不须要源libvirtd和目的libvirtd之间进行直接的交流,只须要按照管理客户端的指示 来办事就行了。这种方式的优势是:
If the client application crashes, or otherwise loses its connection to libvirtd during the migration process, an attempt will be made to abort the migration and restart the guest CPUs on the source host. There may be scenarios where this cannot be safely done, in which cases the guest will be left paused on one or both of the hosts app
带有管理端的点对点的迁移,这种迁移方式下,管理客户端至于源libvirtd交互,而后源libvirtd彻底控制整个迁移过程。优势是,即便管理客户端挂掉了,迁移仍是能正常完成的。 ide