VMotion作为VMware  VI3vSphere产品系列的一个重要特性,常常让很多用户感到惊奇,具体的实现方式也一直是一个谜。实际上,VMotion已经成为服务器虚拟化的一个标竿,如果没有VMotion功能的虚拟化,根本没办法运行生产环境。既然VMotion如此重要,所以我试着从纯流程的角度来解释VMotion发生时背后的故事,让大家能够更深入理解虚拟化中VMotion的实现机理。
发生VMotion开始时,就相当于在目标机器上创建一个新的虚拟机。在新虚拟机创建过程中的前10%部分和创建其他的虚拟机没什么两样。接下去,我们开始为该虚拟机启动VMM(虚拟机监控程序,是每个虚拟机必备的底层),这实际上就是启动了一个新的虚拟机,并为它清空了一段内存地址。此时,该虚拟机并没有访问磁盘,也没有执行任何指令,它只是准备好了接受内存段,然后填充到它自己的内存页表里。
从虚拟机创建到10%这个点,我们开始从源虚拟机将内存段复制到目标虚拟机,该动作需要的时间取决于网络速度、网络拥塞、虚拟机正在使用的内存大小和内存变化的速度(此时虚拟机仍然在正常运行中)。当完成到80%时,我们假定可以在1秒或更短时间内完成内存复制。接着我们就暂停源虚拟机,复制剩余的内存段,启动目标虚拟机,并且从目标虚拟机上执行反向ARP,让网络交换机知道新的MAC地址。当到达90%,复制最后可能变化的内存到目标虚拟机。接着源虚拟机被破坏(只是解散配置和VMM),从而成功完成该次VMotion