一 介绍


热迁移是指虚拟机正常工作的情况下从一个计算节点迁移到另外的节点上,如下图所示:




openstack 卷热扩容 openstack热迁移原理_工作流程


host1与host2共享存储Storage,虚拟机VM1从host1主机迁移到host2主机,在业务不中断的条件下将虚拟机内存复制到host2主机中,镜像的存储路径并没有发生改变。



二 热迁移特点


虚拟机的热迁移在生产环境中有着极大的用处,在各个厂商的产品中,热迁移已经成为一个重要指标。热迁移有很多的特点。


1 动态调整每个计算节点的负载,使资源得到最大程度的使用。例如通过检测虚拟机CPU使用的情况,把空闲的虚拟机迁移到一些节点上,这样可以关闭一些节点,在这个资源匮乏的时代,节能就是利润。


2 在线升级以及节点维护。很多云系统和Openstack一样,升级时都需要重启服务,有的甚至重启节点,但是有些应用场景,比如说移动的服务器是要保证业务几乎100%不中断,即使是在深夜也不允许业务中断,要升级怎么办,如果没有热迁移特性,需要不同机房之间备份,耗时耗材。使用热迁移特性,在深夜业务量小的时候,将一部分节点的虚拟机迁移到其他节点上,升级完之后再迁移过来,然后再升级另外一部分。



三 热迁移制约因素


由于热迁移要求虚拟机业务不中断,所以一般都是在共享存储的条件下,这时影响热迁移的关键因素有两个:一是虚拟机内存脏页的速度,迭代复制是以页为单位;二是网络带宽。


两个计算节点之间的虚拟机是否可以自由迁移,还有其他因素的制约:


1 CPU兼容性:不同厂家,不同系列的CPU兼容性需要保证,一般生产环境的一个集群都是使用同一厂家的CPU,即使都是Intel的CPU,不同型号之间的CPU也有不同的特性,一般情况下,如果源计算节点CPU特性是目标节点CPU特性的子集,即可迁移。


2 是否具有PCI,网卡直通的情况:如果虚拟机通过PCI和网卡直通技术直接使用物理的设备,迁移过程不能保证业务不中断,也无法满足热迁移的要求。



四 热迁移性能指标


其实热迁移并不是业务不中断,只是在迁移的最后时刻,虚拟机会有有短暂挂起,快速完成最后一次内存复制。Hypervisor中挂起虚拟机本质就是改变VCPU的调度,暂时不给虚拟机可用的物理CPU时间片。给用户的感觉是虚拟机瞬间无响应。


虚拟机热迁移的性能指标包括以下三个方面:


1 整体迁移时间:从源主机开始迁移到迁移结束的时间。


2 停机时间:迁移过程中,源主机、目标主机同时不可用的时间。


3 对应用程序的性能影响:迁移对于被迁移主机上运行服务性能的影响程度,数据复制会冲高主机CPU和网络流量。



五 热迁移工作流程


热迁移和冷迁移的工作流程类似,只是热迁移过程中兼容性判断比较多,二冷迁移其实就是使用原来所需资源在目标节点上重新创建一个虚拟机,这样很多兼容性问题是不需要考虑的。热迁移工作流程如下图:



openstack 卷热扩容 openstack热迁移原理_工作流程_02



六 流程解析


1 与创建虚拟机、冷迁移、Resize一样,热迁移也属于TaskAPI任务,nova-api将虚拟机的状态设为MIGRATING后,通过nova.conductor.rpcapi.ComputeTaskAPI提供的RPC接口migrate_server()调用nova-conductor。


2 nova-conductor首先检查虚拟机的状态(必须是正常运行RUNNING),如果没有指定目标主机,和冷迁移一样调用nova-scheduler选择一个可用的主机,然后调用nova-compute完成迁移。


3 在完成迁移之前,nova-compute还有很多工作,比如在源主机执行动作之前还需要到目标主机上验证是否满足迁移的条件,判断磁盘是否共享、是否是block迁移等,目标主机会将验证结果返回给主机。然后源主机Virt Driver比如Libvirt的接口完成最终迁移动作。