作为Hyperv 2.0的一个强大功能,它的部署过程这里就不做详解了。
部署部分感兴趣的朋友可以参考岳雷老师的系列文章:
http://yuelei.blog.51cto.com/202879/197691
本文中,仅对原理来做一个详细的描述。
在所有开始之前,需要明确一个概念。
动态迁移(Hyper-V Live Migration)并非故障状态下的非计划宕机。
该应用场景仅用于升级、硬件更换等计划宕机。
动态迁移步骤:
  • 在源和目标计算机之间建议连接
  • 传送虚拟机配置及设备信息
  • 传送虚拟机内存
  • 暂停(挂起)源虚拟机并传送状态
  • 恢复目标虚拟机
一、在源和目标计算机之间建议连接
该部分的通信涉及到两个WMI对群集中两个dll的调用:
clusres.dll
群集资源管理dll(基本的网络、存储、WINS、DHCP、脚本。。)
vmclusres.dll
虚拟机群集资源管理dll
Live Migration从本质上来说还是群集的一种实现方式。
通信的速度与效率与源服务器和目标服务器的负载有关。
在源服务器或目标服务器负载过高情况下会出现WMI调用 clusres.dll超时失败的情况。
该场景出现在PRO调用Live Migration过程中,将会造成第4步,即暂停(挂起)源虚拟机并传送状态卡死,导致虚拟机长时间处于挂起状态。
错误信息如下:
错误 (12711)
由于出现错误 [MSCluster_Resource.Name="SCVMM XXX01 Configuration"] 找不到元素。
,VMM 无法在服务器 HOST01.contoso.com 上完成 WMI 操作
详细信息 (找不到元素。 (0x490))
微软提供的相关的补丁,需要在所有节点上部署:
http://support.microsoft.com/kb/974930
 
二、传送虚拟机配置及设备信息
这里值得注意的是,该部分传送的并非虚拟机目录中的XML配置文件。
仅仅是注册表中的信息。
以上两步完成的是迁移的准备工作,告知了目标服务器,虚拟机所需的资源,并分配所需资源。
三、传送虚拟机内存
该部分是迁移的核心技术部分。不论是VMware还是HyperV来做迁移都是无法逃避的问题。
那些销售所谓的服务不会断线,不过是传说。从技术的角度来说只是断线的时间有秒这个级别降低到了毫秒级而已。
我们来详细描述一下内存传送的过程:
1、锁定Guest主机内存,并将该部分的信息传送到目标服务器
2、Guest主机继续运行,在Host主机中开启一个新的内存分区为Guest主机提供服务。该区域仅保存变更的内容。
3、新内存分区将继续分片锁定,并传送。
4、重复2~3,保证原HOST服务器与目标HOST服务器变更内存的差异在一个极小的时钟周期之内,直至操作1中的内存传送完成。
四、暂停(挂起)源虚拟机并传送状态
这部分包含3个操作:
1、挂起源虚拟机
2、传送最后的源虚拟机内存变更片段
3、通知存储,将存储挂载至目标服务器
第四步是迁移时间消耗的关键。
而关键的关键是实时内存状态的保存。
在HyperV1.0中Quick Migration,采取的方式是挂起源虚拟机,再处理内存的方式。
所以在迁移过程中会发现宕机的时间与虚拟机所消耗的内存量成正比。
而在Live Migration中,宕机时间不再由所迁移虚拟机消耗的内存来决定。
决定宕机时间的关键点内存大小是一个相对较小的变更内存片段。
根据实测,在Live Migration操作中,ping包监视根据系统负载不同在丢包为2~6之间。
完全可以满足一般企业高可用的需求。
五、恢复目标虚拟机
这个部分与普通的恢复相同。就不做详细说明。
 
Technet HyperV资料
http://technet.microsoft.com/zh-cn/library/cc816638(WS.10).aspx
Windows Server 2008 R2 & Microsoft Hyper-V Server 2008 R2 - Hyper-V Live Migration Overview & Architecture
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=fdd083c6-3fc7-470b-8569-7e6a19fb0fdf
 
===========================================================
深圳市深信通软件有限公司  Http://www.sxt.com.cn
QQ:121096702 MSN:[email protected]
===========================================================