实时迁移是微软向Windows Server 2012 Hyper-V添加的最重要的功能,通过实时迁移功能,在Hyper-V主机之间移动虚拟机(VM)而无需停机;在正常维护Hyper-V主机时,可以将它托管的所有VM全部移走,等到维护结束后,再移回来,整个过程不会引起业务中断。此外,利用实时迁移功能还可以更好地动态调整主机资源利用率,将繁忙的Hyper-V主机上的部分VM移动到相对空闲的Hyper-V主机上,这样可以确保即便在业务高峰期也能给终端用户提供很好的性能。


动态实时迁移

    在旧版本的Hyper-V 2008 R2虚拟化平台时代,必须建立故障转移集群(Failover Cluster)和群集共享磁盘(Cluster Shard Volume,CSV)环境才能进行动态实施迁移。如果要进行主机之间的迁移,在同一时间,每次只能迁移1台VM虚拟机。

    如今,动态实施迁移既可以在非群集的环境中执行实施迁移,也可以同时执行多个实时迁移,可以使用多个网络带宽进行实施迁移。这些改进可让实施迁移变得更加简单、快速,从而更灵活地移动运行中的虚拟机,并且可以无需设置故障转移群集和群集共享卷执行实时迁移。除此之外,Windows Server 2012中Hyper-V动态迁移还支持VM虚拟机存储在SMB 3.0的共享存储中,可以在1Gbps/10Gbps网络环境中同时迁移多台VM主机而不会有网络限制,但是仍然要考虑Network Throughput和Storage IOPS等因素。与Windows Server 2008 R2中的Hyper-V实时迁移相比,Hyper-V2012对实时迁移做了改进,可以更快地同步迁移。实施迁移现在能够利用更高的网络带宽(最高可达1000Mbps)更快地完成迁移,还可以同时执行多项实时迁移操作,从而能迅速移动群集中更多的虚拟机。这些变化在Hyper-V私有云解决方案中体现出高水平的移动性和灵活性,并且可以进行群集环境外的实施迁移。在Windows Server  2012中,可以配置一个虚拟机,使其存储在SMB文件共享汇总。然后,可以在这个正在运行的虚拟机上对运行Hyper-V的非群集服务器执行实时迁移,同时将虚拟机的存储保留在中央SMB共享中。这使用户能够受益于虚拟机的移动性,如果他们并不需要在Hyper-V环境中保证虚拟机的高可用性,则不必在Hyper-V主机群集基础结构上投资(带SMB存储的Hyper-V也可以使用故障转移群集配置)。

    当只使用虚拟机的本地存储时,也可以在两台运行Hyper-V的非群集服务器之间执行虚拟机的实施迁移。这有时候的实施迁移被称为“无共享的”实施迁移。在这种情况下,虚拟机存储通过网络被镜像到目标服务器上,然后对虚拟机执行迁移,同时虚拟机还可以继续运行并提供网络服务。

    无论是什么环境的实施迁移,都有一定的要求,对任意形式的实施迁移的共同要求如下:

    ·至少两台运行Hyper-V的服务器,且这些服务器还需满足支持硬件虚拟化。

    ·使用相同制造商的处理器(例如,都是AMD或都是Intel),或者属于同样的Active Directory域,或者属于彼此信任的域。

    ·必须配置虚拟机使用虚拟硬盘或虚拟光纤通道磁盘(无物理磁盘)

    ·对实时迁移使用专用网络。

    如果是在群集中进行实时迁移,则要启用并配置Windows故障转移群集。在群集中启用群集共享卷(CSV)存储。对使用共享存储的实施迁移,要求构成虚拟机的所有文件(例如,虚拟硬盘、快照和配置)都存储在SMB共享中。在SMB共享上要设置一定的权限,允许所有运行Hyper-V服务器的计算机账户对SMB共享进行访问。

    Hyper-V实时迁移将正在运行的虚拟机从一台物理服务器移动到另一台物理服务器,同时在虚拟机的可用性方面对用户没有任何影响。通过将迁移虚拟机的内存预先复制到目标服务器,实施迁移的管理员或脚本,决定着将哪台计算机用作实时迁移的目标位置。迁移虚拟机的来宾操作系统无法感知迁移的发生,所以不需要对来宾操作系统执行特殊配置。在启动实施迁移之后,将执行6个操作步骤,其中前4步如图6-1所示

    

Hyper-V 动态实时迁移_第1张图片

    1、执行实施迁移设置

    在实时迁移的设置阶段,源服务器会创建一个与目标服务器之间的TCP连接。此连接将虚拟机的配置数据传输到目标服务器,将主干虚拟机设置在目标服务器上,同时将内存分配给目标虚拟机。

    2、将内存页从源节点传输到目标节点

    从实时迁移的第二阶段,分配给迁移虚拟机的内存页将通过网络复制到目标服务器上。此内存页被称为迁移虚拟机的“工作集”。一个内存页是4KB。例如,假设一个名为“测试虚拟机”的虚拟机配置了1024MB的RAM。如果将该虚拟机迁移到另一台运行Hyper-V的服务器上,那么分配给此虚拟机的整个1024MB的RAM就是“测试服务器”的工作集。“测试虚拟机”工作集中已经使用的内存页将会被复制到目标服务器上。除了将“测试虚拟机”的工作集复制到目标服务器,Hyper-V还会监视源服务器上的“测试虚拟机”工作集中的内存页。当“测试虚拟机”修改内存时,Hyper-V会跟踪它们并将标记记为已修改。已修改内存页的列表只是在开始复制“测试虚拟机”工作集之后进行。在迁移过程中,迁移虚拟机会继续运行。Hyper-V会迭代内存复制过程几次,每次迭代只需复制较少数据的已修改内存页。在将工作集复制到目标服务器之后,开始实施迁移的下一阶段。

    3、迁移已修改内存页

    实施迁移的第三个阶段是将“测试虚拟机”剩余的已修改内存页复制到目标服务器内存的过程。源服务器将虚拟机的CPU和设备状态传输到目标服务器。在此阶段中,源和目标服务器之间的可用网络带宽决定了实施迁移的速度,使用千兆或更快的以太网是非常重要的。源服务器从迁移虚拟机工作集传输已修改内存页越快,则实施迁移任务就完成得越快。在此阶段传输的内存页数由虚拟机访问和修改内存页的活跃程度来决定。修改的页面越多,则将所有页传输到目标服务器所需的时间越长。在将已修改内存页完全复制到目标服务器之后,目标服务器将包含“测试虚拟机”的最新工作集。“测试虚拟机”工作集在目标服务器上显示的状态与其在“测试虚拟机”开始迁移时的状态相同。在此迁移阶段开始之前,可以随时取消实时迁移过程。

    4、存储句柄从源服务器移动到目标服务器

    在实施迁移的第四阶段,与“测试虚拟机”有关的存储的控制(例如任何虚拟硬盘文件或通过虚拟光纤通道适配器连接的物理存储等)将被传输到目标主机。

    5、虚拟机在目标服务器上实现联机

    在实时迁移的第五个阶段,目标服务器将拥有“测试虚拟机”的最新工作集,以及对“测试虚拟机”使用的任何存储的访问权限。“测试虚拟机”将在这时得到恢复。

    6、执行网络清理

    在实时迁移的最后阶段,迁移的虚拟机在目标服务器上运行。此时,网络交换机将接收到一条消息。该消息将引发网络交换机获取迁移虚拟机的新MAC地址,以使其与“测试虚拟机”之间的网络流量都能使用正确的交换机端口。实施迁移的全过程所需时间比迁移虚拟机的TCP超时间隔更短。基于不同的网络拓扑和其他因素,TCP超时间隔会有差异。一些因素可能会影响实施迁移的速度,例如要迁移的虚拟机上的已修改内存页的数量,迁移虚拟机上的已修改内存页的数量越多,则虚拟机保持迁移状态的时间就越长。对群集内的虚拟机(当虚拟机存储在CSV卷上时)与对群集外的虚拟机(当虚拟机存储在SMB共享上时)执行实时迁移的过程实际上是相同的。

    在两台没有共享的基础结构的计算机之间执行虚拟机实施迁移如图6-2所示。这时Hyper-V要做的第一件事就是执行虚拟机存储的部分迁移。

Hyper-V 动态实时迁移_第2张图片

    具体步骤如下:

    1)在整个移动操作的大多数时间内,虚拟机都在源虚拟硬盘上执行读取和写入。

    2)在源虚拟硬盘上执行读取和写入的同时,磁盘内容将通过网络复制到新目标虚拟硬盘上。

    3)当初始磁盘复制完成后,磁盘写入将同时镜像到源虚拟硬盘和目标虚拟硬盘,并且复制未完成的磁盘更改。

    4)当源和目标虚拟硬盘完成同步之后,按照与共享存储的实施迁移相同的过程,按照与共享存储的实时迁移相同的过程,执行虚拟机的实施迁移。一旦完成实施迁移并成功地在目标服务器上运行虚拟机,源服务器上的文件就将被删除。