您好,欢迎访问三七文档
动态迁移--计算机技术XXX1.动态迁移的概念2.动态迁移效率和应用场景3.KVM动态迁移原理和实践4.VT-d/SR-IOV的动态迁移目录动态迁移的目的虚拟机动态迁移,主要增强了系统地可维护性,其主要目标是在客户没有感觉的情况下,将客户机迁移到了另一台物理机器上,并保证其各个服务都正常使用。迁移传统环境下的迁移在传统环境中,没有虚拟化技术的支持,系统的迁移主要是静态迁移。这种迁移主要依靠系统备份和恢复技术,将系统的软件完全复制到另一台机器,可以通过先做出系统的镜像文件,然后复制到其他机器上,或者通过直接的硬盘相互复制来实现迁移的目的。在非虚拟化环境中也有动态迁移的概念,但都是对某个(或某一组)工作负载的迁移,需要特殊系统的支持才能实现,而且技术也不成熟,如哥伦比亚大学的Zap系统,它通过在操作系统上提供了一个很薄的虚拟化层,可以实现将工作负载迁移到另一台机器上。虚拟化环境下的迁移静态迁移动态迁移关闭客户机后,将其硬盘镜像复制到另一台宿主机上然后恢复启动,这种迁移不能保留库户集中的工作负载两台宿主机共享存储系统,只需要暂停(而不是完全关闭)客户机后,恢复其内存镜像到另一台宿主机中恢复启动,这种迁移可以保持客户机以前的内存状态和系统运行的工作负载。动态迁移,是指在保证客户机上应用服务正常运行的同时,让客户机在不同的宿主机之间进行迁移,其逻辑步骤与前面静态迁移几乎一致,有硬盘存储和内存都复制的动态迁移,也仅有仅复制内存镜像的动态迁移。不同的是,为了保证迁移过程中客户机服务的可用性,迁移过程仅有非常短暂的停机时间。动态迁移允许系统管理员将客户机在不同的物理机上迁移,同时不会断开访问客户机中服务的客户端或应用程序的连接。一个成功的动态迁移,需要保证保证客户机的内存、硬盘存储、网络连接在迁移到目的的主机后依然保持不变,而且迁移过程的服务暂停时间短。虚拟化环境中动态迁移和静态迁移的区别静态迁移和动态迁移的最大区别就是,静态迁移有很明显的一段时间客户机中的服务不可用,而动态迁移则没有明显的服务器暂停时间。动态迁移的效率和应用场景迁移效率的衡量:整体迁移时间:从源主机中迁移操作开始到客户机被迁移到目的主机并恢复其服务所花费的时间。服务器停机时间:在迁移的过程中,源主机和目的主机上客户机的服务都处于不可用状态的时间,此源于主机上的客户机已暂停服务,目的主机上客户机还未恢复服务。对服务的性能影响:不仅包括迁移后的客户机中应用程序的性能与迁移前相比是否有所降低,还包括迁移后对目的主机上的其他服务的性能影响。动态迁移的效率和应用场景负载均衡:当一台物理服务器的负载较高时,可以将其上运行的客户机动态迁移到负载较低的宿主机服务器中,以保证客户机的服务质量。CPU和内存的过载使用可以解决某些客户机的资源利用问题,之后当物理资源长期处于超负荷状态时,对服务器稳定性能和服务质量都有损害,这是需要动态迁移来进行适当的负载均衡。节约能源:在目前的数据中心成本支出中,其中有一项重要的费用是电能的开销。当有较多服务器的资源使用率都偏低时,可以通过动态迁移将宿主机上的客户机集中迁移到其中几台服务器上,而在某些宿主机上的客户机完全迁移之后,就可以将电源关闭,以此节省电能功耗,从而降低数据中心的运营成本。解除硬件依赖:当系统管理员需要在宿主机上升级、添加、移除某些硬件设备的时候,可以将该宿主机上运行的客户机非常安全高效的动态迁移到其他宿主机上。在系统管理员升级硬件系统之时,使用动态迁移,可以让终端用户完全感知不到服务有任何暂停时间。实现客户机地理位置上的远程迁移:假设某公司的运行某类应用服务的客户机本来仅部署在上海电信的IDC中,然后发现来自北京及周边地区的网通用户访问量非常大,但是由于距离和网络互联网宽带拥堵,北方用户使用该服务的网络延迟较大,这时系统管理员可以将上海IDC中的部分客户机通过动态迁移部署到位于北京的网通IDC,从而让终端用户使用该服务质量更高。KVM动态迁移原理和实践对于静态迁移,可以在源宿主机上的QEMUmonitor中,用“savevmmy_tag”命令来保存一个完整的客户镜相快照(my_tag),然后在源宿主机中关闭或者暂停该客户机,然后将该客户机的镜像文件复制到另外一台宿主机中,用于源宿主机中启动客户机时以相同的命令启动复制过来的镜像,在其QEMUmonitor中用“loadmmy_tag”命令来恢复刚才保存的快照即可完全加载保存快照时的客户机状态。这时的“savevm”命令保存的完整客户机状态包括CPU状态、内存、设备状态、可写磁盘中的内容。注意,这种保存快照的方法需要qcow2、qed等格式的磁盘镜像文件,因为只有他们才支持快照这个特性。KVM动态迁移原理和实践动态迁移:如果源宿主机和目的宿主机共享存储系统,则只需要通过网络发送客户机vCPU执行状态、内容中的内容、虚拟设备的状态到目的主机上。否则,还需要将客户机的磁盘存储发送到目的主机上。KVM的具体迁移过程(基于共享存储系统)在客户机动态迁移开始后,客户机依然在源宿主机上运行,与此同时,客户机的内存页被传输到目的主机上。QEMU/KVM会监控并记录下迁移过程中所有已被传输的内存页的任何修改,并在所有的内存页都被传输完成后开始传输在前面过程中内存页的更改内容。QEMU/KVM也会估计迁移过程中的传输速度,当剩余的内存数据量能够在一个可设定的时间周期(默认为30毫秒)内传输完成之时,QEMU/KVM将会关闭源宿主机的客户机,再将剩余的数据量传输到目的主机上去,最后传输过来的内存内容在目的宿主机上恢复客户机的运行状态。KVM的一个动态迁移操作就完成了。迁移后的客户机状态尽可能与迁移前一致,除非目的主机上缺少一些配置(下一页有例子)。例如,在源宿主机上有给客户配置好网桥类型的网络,但目的主机上没有网桥配置会导致迁移后客户机的网络不通。而当客户机中内存使用量非常大且修改频繁,内存中数据被不断修改的速度大于KVM能够传输的内存速度之时,动态迁移过程是不会为完成的,这时要进行迁移只能静态迁移。案例:KVM宿主机上一个拥有四个vCPU、4GB内存的客户机中运行着一个SPECjbb2005(一个基准测试工具),使客户机的负载较重且内存会频繁更新,这时进行动态迁移无论怎样也不能完成,直到客户机SPECjbb2005测试工具停止运行后,迁移过程才能真正完成。影响迁移服务停机时间的一些因素动态迁移服务停机时间会与实际的工作负载有关(一般在数十毫秒到几秒之间)。动态迁移服务停机时间会与网络带宽有关,如果网络带宽过小或网络拥塞,会导致服务停机时间变长。KVM动态迁移的注意事项KVM上进行动态迁移的步骤1)在源宿主机挂载NFS的上客户机镜像,并启动客户机,命令操作如下:注意:这里的客户机镜像文件存放在NFS的共享存储上面,源宿主机(vt-nhm9)和目的宿主机(vt-snb9)都对NFS上的镜像文件具有可读写权限。另外这里没有指定客户机的CPU模型,默认是qemu64这个基本模型,当然也可以自行设置为“-cpuSandyBridge”或“-cpuWestmere”等,不过要保证在目的主机上也用相同的命令。KVM上进行动态迁移的步骤3)目的宿主机上也挂载NFS上的客户机镜像的目录,并且启动一个客户机用于接收动态迁移过来的内存内容。命令行操作如下:注意:NFS的挂载目录必须与源宿主机上保持一致;启动客户机命令与源宿主机上的启动命令一致,但是需要增加“-incoming”选项KVM上进行动态迁移的步骤在源宿主机的QEMUmonitor中,使用命令“migratetcp:vt-snb9:6666”即可进入动态迁移的流程,如下图所示,这里的vt-snb9为目的宿主机的主机名(也可以写IP),tcp协议和6666端口号与目的宿主机上qemu-kvm命令行的“-incoming”参数中的值保持一致。KVM上进行动态迁移的步骤4)在执行完迁移之后,在目的主机上,之前处于迁移监听模式的客户机就开始正常运行了,其中运行的正是动态迁移过来的客户机,可以看到客户机中的“top”命令在迁移后继续运行,如下图所示:当然,QEMU/KVM中也支持增量复制磁盘修改部分数据(使用相同后端镜像)的动态迁移,以及直接复制整个客户机磁盘镜像的动态迁移。使用相同后端镜像文件的动态迁移过程如下,与前面直接使用NFS共享存储非常类似。KVM上进行动态迁移的步骤1)在源宿主机上,根据一个后端镜像文件,创建一个qcow2格式的镜像文件,并启动客户机,命令如下:这里使用前面挂载的NFS上的镜像文件作为qcow2的后端镜像。KVM上进行动态迁移的步骤2)在目的宿主机上,可建立相同的qcow2格式的客户机镜像,并带有“-incoming”参数来启动客户机使其处于迁移监听状态,命令如下:KVM上进行动态迁移的步骤在源宿主机上的客户机的QEMUmonitor中,运行“migrate-itcp:vt-snb9:6666”命令即可进行动态迁移(“-i”表示increasing),在迁移过程中,还有实时的迁移百分比显示,提示为“Completed100%”即表示迁移完成。与此同时,在目的宿主机上,在启动迁移监听状态的客户机的命令行所在标准输出中,也会提示正在传输的磁盘镜像百分比,当传输完成也会提示“Completed100%”,如下图:VT-d/SR-IOV的动态迁移使用VT-d/SR-IOV等技术,可以让设备(如网卡)在客户机中获得非常好的、接近原生设备的性能。不过,当QEMU/KVM中有设备直接分配到客户机中时,就不能对该客户机进行动态迁移,所以说VT-d/SR-IOV等的使用会破坏动态迁移的特性。QEMU/KVM并没有直接解决这个问题,不过,可以使用热插拔设备避免动态迁移的失效。比如.想使用VT-d或SR-IOV方式的一个网卡(包括虚拟功能VF),可以在Qemu-kvm命令行启动客户机时并不分配这个网卡(而是使用网桥等方式为客户机分配网络).当在客户机启动后.再动态添加该网卡到客户机中使用。当该客户机需要动态迁移时.就动态移除该网卡.让客户机在迁移前后这一小段时内内使用启动时分配的网桥方式的网络.待动态迁移完成后.如果迁移后的目的主机上也有可供直接分配的网卡设备.就再重新动态添加一个网卡到客户机。这样既满足了使用高性能网卡的需求,又没有损坏动态迁移的功能。另外.如果客户机使用较新的Linux内核.还可以使用“以太网绑定驱动”(LinuxEthemetBondingDriver),驱动可以将多个网络接口绑定为一个逻辑上的单一接口。当在网卡热插拔场景中使用该绑定驱动时,可以提高网络配置的灵活性和网络切换时的连续性。如果使用libvirt管理QEMU/KVM.则在libvirt0.9.2及更新的版本中已经开始支持直接使用VT-d的普通设备和SR—IOV的VF且不丢失动态迁移的能力。在libvirt中直接使用宿主机网络接口需要KVM宿主机中macvtap驱动的支持.要求宿主机的Linux内核是2.6.38或更新的版本。在libvirt的客户机的XML配置文件中.关于该功能的配置示例如-F:其中,dev=“eth0”表示使用宿主机中的eth0这个网络接口,如果需要在客户机中使用高性能的网络,则eth0可以是一个高性能的网络接口。如果系统管理员对于客户机中网卡等设备的性能要求非常高,而且不愿意丢失动态迁移功能,那么可以考虑尝试使用本节介绍的PCI/PCI-e设备的动态热插拔或使用libvirt中提供的方法直接将宿主机中某个网络接口给用户使用。讨论与交流
本文标题:kvm的动态迁移.
链接地址:https://www.777doc.com/doc-2883217 .html