实时迁移是一项非常有用的功能,也是实现虚拟化高可用的有力组成部分之一。它的目的是在将虚拟机从一台 Hyper-V 主机迁移到另一台 Hyper-V 主机时,虚拟机对用户而言不产生中断,继而不影响业务的开展。在 Hyper-V 2008 R2 中,实时迁移同时只能进行一条。而在 Hyper-V 2012/2012 R2 中,则没有这个限制。同时如果希望使用实时存储迁移,在 Hyper-V 2008 R2 中,必须使用 SCVMM 来完成,这种限制在 Hyper-V 2012/2012 R2 中也被取消了,版本区别如表 10-1 所示。
更为吸引人的是,在 Hyper-V 2012/2012 R2 下的实时迁移,不再依赖共享存储,可以由两台独立的 Hyper-V 主机发起和接收。这种改进的实时迁移可以为对效率不是太敏感的企业节省一定的硬件采购成本。
资源 | Hyper-V | Hyper-V | Hyper-V |
(2008 R2) | 2012 | 2012 R2 | |
实时迁移 | 一次一个 | 没有限制 | 没有限制 |
实时存储迁移 | 必须通过SCVMM | 没有限制 | 没有限制 |
表 10-1 Hyper-V 中实时迁移和实时存储迁移差异
10.1 实时迁移分类
10.1.1 共享实时迁移
共享实时迁移即意味着实时迁移需要共享存储的参与,如故障转移群集和 SMB3.0 共享文件夹下的虚拟机迁移均属于共享实时迁移。其特点是整套环境中有一台或多台承载数据的共享存储。共享实时迁移拥有以下几个特点:
- 迁移速度快,一般迁移会在 1 到 2 分钟内完成。
- 迁移中断时间短:以 ping 包为检测方法,迁移中断时间一般只会丢 1 到 5 个包。
- 必须使用共享存储,可以使用 SMB3.0、直连、iSCSI、光纤中的一种或多种。
10.1.2 无共享实时迁移
无共享实时迁移是 Hyper-V 2012/2012 R2 所带来的新功能,其特点是实时迁移过程无需共享存储参与,同时在实时迁移过程中,中断时间也可以做到和共享实时迁移一致,无共享实时迁移拥有以下几个特点:
- 迁移速度慢,迁移时间依赖虚拟机磁盘的大小和网络带宽。
- 迁移中断时间短:以 ping 包为检测方法,迁移中断时间一般只会丢 1 到 5 个包。
- 无需使用共享存储,使用 Hyper-V 主机的本机磁盘即可完成实时迁移。
10.2 实时迁移准备条件
10.2.1 快速迁移过程
提到实时迁移,就不得不提及在 Windows Server 2008R2 中存在的快速迁移了。快速迁移的过程如下:
- Hyper-V 主机 A 上的虚拟机 A1 发起快速迁移。
- "保存"虚拟机 A1,将虚拟机的所有权交由 Hyper-V 主机 B。
- Hyper-V 主机 B 获得虚拟机 A1 的所有权,将处于保存状态的虚拟机 A1 开启。
- 更新网络路由表
由于快速迁移拥有"保存"再"开启"的这个环节,而"保存"状态虚拟机是无法为外界提供服务的,所以一般使用快速迁移的中断时间会在10-20秒甚至更长。因此在HyperV 2012/2012 R2 中尽管也提供了快速迁移以保持对上代产品的兼容性,但在实际应用当中,用到快速迁移的机会很小。
10.2.2 实时迁移过程
实时迁移拥有改进的迁移过程,可以实现更短的中断时间。实时迁移的过程如下:
- Hyper-V 主机 A 上的虚拟机 A1 发起实时迁移。
- 通过 Microsoft Virtual System Migration Service 与 Hyper-V 主机 B 建立联系。如不在本机发起,则需要提前委派。
- 将虚拟机 A1 的初始内存拷贝到 Hyper-V 主机 B。
- 将虚拟机 A1 的内存标记,在上一阶段到本阶段中变动的内存拷贝到 Hyper-V 主机B。
- 持续该过程,直至变动的内存越来越小。
- 暂停 Hyper-V 主机 A 上的 A1(此时发生中断)
- 将虚拟机 A1 的最终内存状态复制到 Hyper-V 主机 B。
- 在 Hyper-V 主机 B 上启动虚拟机 A1
- 更新网络路由表
可以发现,实时迁移的过程之所以中断时间更短,其根源在于迁移过程中会不断的切割内存标记,以使得虚拟机 A1 在 Hyper-V 主机 A 和 B 之间的内存差异越来越小,并且使用"暂停"而不是"保存"来中断虚拟机,可以使虚拟机更快恢复。
10.2.3 实时迁移优势
由于混合了共享实时迁移和无共享实时迁移,因此实时迁移可以实现以下特性:
- 不同群集之间,使用不同的共享存储而进行的实时迁移。
- 相同群集之间,使用不同的共享存储而进行的实时迁移。
- 群集和非群集之间,使用不同的共享存储或非共享存储的实时迁移。
10.2.4 实时迁移前置条件
如希望使用实时迁移,则需要满足如下的前置条件:
- Hyper-V 主机采用 Hyper-V 2012/2012 R2 操作系统(Hyper-V 2008R2 不支持无共享实时迁移)。
- Hyper-V 主机必须是同一个域的域成员身份,或彼此信任的两个域的域成员身份。
- 如不在本机发起实时迁移,则必须提前配置委派。
- 在生产中,Hyper-V 主机的 CPU 必须为同厂商产品,可以为不同型号产品,但不建议。
- 尽可能快的网络连接,网络连接支持 NIC 组合和 SMB 多通道。
10.3 实时迁移
10.3.1 实时迁移配置
如希望使用实时迁移,则需要在每一台涉及到的 Hyper-V 主机上开启相应的实时迁移配置。无论采用何种实时迁移方式,均需提前配置以下选项。
第 1 步,打开 hv1.contoso.com 的"Hyper-V 管理器",右键点击 Hyper-V 主机主机,选择 Hyper-V 设置,如图 10-1 所示。
图 10-1 进入 Hyper-V 设置
第 2 步,在弹出的 Hyper-V 设置中,于左侧列表点击"实时迁移",进入配置页,如图 10-2 所示。在右侧勾选"启用传入和传出的实时迁移";在并行实时迁移处,可以定义允许的实时迁移数量,默认为 2,用户能够根据网络情况设置任意数值;在传入的"实时迁移" 处,默认选择"使用任何可用的网络进行实时迁移"。如 Hyper-V 主机存在多网卡,此处可以根据需要定义是否全部网络连接均参与实时迁移。
图 10-2 开启实时迁移
第 3 步,双击"实时迁移",再点击左侧下拉出现的"高级功能",可于右侧配置"身份验证协议"和"性能选项"。于右侧勾选"使用 kerberos",如图 10-3 所示,点击"确定"继续。
图 10-3 配置身份验证协议
第 4 步,如果需要迁移虚拟机所在的 Hyper-V 主机所使用的 CPU 型号不同,则务必要在虚拟机的配置页,双击"处理器",修改兼容性为"迁移到具有不同处理器版本的物理计算机",如图 10-4 所示。
图 10-4 修改处理器兼容性
第 5 步,在域控制器上,打开"Active Directory 用户和计算机",使用本书第 9 章的方法,为所有涉及的 Hyper-V 主机配置"Microsoft Virtual System Migration Service"的约束委派。如图 10-5 所示,点击"确定"完成配置。
图 10-5 配置约束委派
10.3.2 基于 SMB3.0 的实时迁移
第 1 步,打开"Hyper-V 管理器",在做好委派的 Hyper-V 主机 hv2.contoso.com 上使用 "新建虚拟机向导",创建一个 SMB3.0 共享文件夹上的虚拟机,如图 10-6 所示。此处虚拟机所保存的位置为\fsHyper-V 存储共享 ,由于是演示环境,可以直接点击"完成"结束快速创建。
图 10-6 修改处理器兼容性
第 2 步,首先启动该虚拟机,然后在对应的虚拟机"SMB3.0 迁移测试"上右键点击,选择"移动",如图 10-7 所示。
图 10-7 准备移动虚拟机
第 3 步,在"移动虚拟机向导"的"选择移动类型"对话框中,选择"移动虚拟机"选项,点击"下一步"继续,如图 10-8 所示。
图 10-8 准备移动虚拟机
第 4 步,在"指定目标"对话框中,可以输入目标 Hyper-V 主机的名称,或使用"浏览" 选择目标 Hyper-V 主机。此处输入 Netbios 或者 FQDN 均可,如图 10-9 所示。
图 10-9 输入指定目标
第 5 步,在"选择移动选项"对话框中,选择仅移动虚拟机,由于该虚拟机的存储位于 SMB3.0 的共享文件夹上,其本质也是共享存储的一种,因此可以使用共享存储迁移。如图10-10 所示。此处直接点击"完成",开始进行虚拟机的实时迁移。
图 10-10 仅移动虚拟机并开始迁移
第 6 步,由于这是一个新创建的虚拟机,因此实时迁移速度很快,几秒钟即可完成实时迁移,可以在 hv1.contoso.com 上找到这台虚拟机,同时其状态也是"正在运行"。如图 10-11 所示。
图 10-11 实时迁移结束
10.3.3 基于故障转移群集的实时迁移
第 1 步,打开"故障转移群集管理器",点击"角色",选中需要进行实时迁移的开机状态的虚拟机,右键点击,选择"移动",如图 10-12 所示
图 10-12 故障转移群集下的实时迁移
第 2 步,依次"点击移动"→"实时迁移"→"最佳节点",如图 10-13 所示。在双节点的群集中,选择最佳节点即意味着群集中的另一台 Hyper-V 主机。如果是多节点群集,可以点击"选择节点",手动确认实时迁移的目标。如果希望使用快速迁移,则依次点击"移动"→"快速迁移"→"最佳节点",考虑到快速迁移中断时间相对较长,在已配置实时迁移的前提下,将不再建议用户使用快速迁移。
图 10-13 选择节点进行实时迁移。
第 3 步,在"角色"列表中,可以看到虚拟机正在迁移,以及迁移的进度。如图 10-14 所示,几十秒后即可完成迁移,同时角色的状态也由"正在进行……"变为"正在运行"。
图 10-14 实时迁移过程
可以看到,使用故障转移群集进行实时迁移的操作步骤和逻辑都比使用"Hyper-V 管理器"要简洁一些,因此在实现虚拟机高可用的情况下,建议用户采用硬件存储来搭建故障转移群集。
10.3.4 基于独立 Hyper-V 主机的无共享实时迁移
无共享实时迁移不仅可以应用在廉价高可用解决方案中,也可以帮我们解决两个群集之间的虚拟机迁移,当某一台虚拟机需要升级底层硬件,比如从戴尔的 R510 服务器迁移到 R620 服务器,由于底层硬件的提升,可以为系统的的运行带来更强大的稳定性和扩展性,但是此时又不想停机操作,则可以使用无共享实时迁移,将虚拟机从不同的存储结构中迁移过去。由于需要完整的拷贝一份磁盘镜像,因此无共享实时迁移的迁移时间较长,但在迁移所造成的网络中断和共享实时迁移一致,大约会丢 1-5 个 ping 包。
第 1 步,打开"Hyper-V 管理器",使用"新建虚拟机向导",在 hv2.contoso.com 上创建一台虚拟机,命名为"无共享实时迁移",无需进行任何设置,直接点击"完成",如图 10-15 所示。
图 10-15 创建标准虚拟机以进行无共享实时迁移
第 2 步,开启该虚拟机,右键点击该虚拟机,选择"设置",检查"硬盘驱动器"的配置,确认虚拟硬盘保存在本地磁盘中,未使用共享存储或群集。如图 10-16 所示。
图 10-16 检查虚拟机磁盘是否位于本地
第 3 步,右键点击该虚拟机,选择"移动",打开移动虚拟机向导,在"选择移动类型" 对话框中,选择"移动虚拟机"选项。如图 10-17 所示,点击"下一步"继续。
图 10-17 准备移动虚拟机
第 4 步,在"指定目标"对话框,输入 hv1,或通过"浏览"按钮,选择目标计算机。
如图 10-18 所示。
图 10-18 准备移动虚拟机
第 5 步,在"选择移动选项"对话框,选择"将虚拟机的数据移动到一个位置",准备进行无共享实时迁移,此处也可以选择第二项:"通过选择项目移动位置来移动虚拟机的数据",该选项可以将虚拟机所包含的文件定义到不同的位置,但一般不建议这样操作,如图10-19 所示。
图 10-19 选择移动选项
第 6 步,在"虚拟机"对话框,可以指定"目标位置",既可以直接输入实际存在的目录位置进行定位,也可以通过"浏览"按钮选择进行定位。不仅可以选择在本地磁盘上,也可以选择储存在 SMB3.0 的共享文件夹上,或群集共享卷上,如图 10-20 所示,点击"完成" 开始虚拟机的实时迁移。
图 10-20 选择虚拟机的保存位置
第 7 步,点击"完成"后,系统会弹出正在执行移动的进度条,耐心等待进度完成,如图 10-21 所示。
图 10-21 实时迁移过程
第 8 步,迁移完成后,在 hv1.contoso.com 上找到迁移过后的虚拟机,右键点击,选择 "设置",检查硬盘驱动器的保存位置,可以看到其存储位置已经变成了 hv1.contoso.com 上的本地路径了。
图 10-22 验证实时迁移结果
10.3.5 存储实时迁移
存储实时迁移也是为了解决新旧硬件交替而存在的,当虚拟机由于底层 Hyper-V 主机的磁盘 IO 不足时,需要将虚拟机迁移到新的快速存储上时,则可以用到存储实时迁移。又或者性能足够,但容量不足时,通过存储实时迁移,也可以从小容量的存储迁移至大容量的存储。存储实时迁移的过程如下:
- 发起存储实时迁移。
- 在存储实时迁移阶段中,新的改动都写入到原始磁盘中。同时开始将数据从原始存储复制到新存储。
- 在最初的数据复制完成后,磁盘的写入操作被镜像到新存储。
- 当新的存储的数据和原始磁盘相同时,虚拟机切换到新的存储上。
- 源磁盘数据被删除。
可以看到,存储实时迁移的过程和虚拟机的实时迁移类似,都是先完成最初数据的完整复制,再补充增量数据的复制,最后切换所有权。
第 1 步,在"Hyper-V 管理器"中,使用"新建虚拟机向导",在 hv2.contoso.com 上创建一个新的虚拟机,将虚拟机保存在"d:虚拟机存储"下,直接点击"完成",完成快速创建,如图 10-23 所示。
图 10-23 创建虚拟机
第 2 步,开启该虚拟机,在虚拟机上右键点击,选择"移动",如图 10-24 所示。
图 10-24 移动虚拟机
第 3 步,打开移动虚拟机向导,在"选择移动类型"对话框中,选择"移动虚拟机的存储"选项,如图 10-25 所示。
图 10-25 移动虚拟机存储
第 4 步,在"选择移动选项"选项卡下,选择"将虚拟机的所有数据移动到一个位置" 选项。该选项会将虚拟机的所有文件移动到统一的位置下,如选择"将虚拟机的数据移动到其他位置",则可以对虚拟机的配置文件、快照等指定单独的位置。如图 10-26 所示。
图 10-26 移动虚拟机存储
第 5 步,在"虚拟机"选项卡下,可以定义存储迁移的新位置,这里将虚拟机迁移至"c:users"下。如图 10-27 所示,点击"完成"开始存储实时迁移。
图 10-27 目标存储位置
第 6 步,在完成存储实时迁移后,可以检查虚拟机的属性,会发现硬盘虚拟硬盘的存储已经移动到新的位置下了。如图 10-28 所示。
图 10-28 检查移动后的虚拟机存储
10.4 小结
实时迁移在 Hyper-V 2012/2012 R2 下是一项普及率非常高的技术,不仅可以实时迁移虚拟机,也可以实时迁移存储,需要注意的是,为了尽可能的提升实时迁移的效率,一定要保障网络带宽和网络传输质量。同时在实时迁移可以在 NIC 组合和 SMB 多通道上运行,这能够极大的提升实时迁移的效率和可靠性。
另外一点是,涉及到实时迁移的 Hyper-V 主机,最好使用完全一致的硬件环境,尽管 CPU 型号不同也可以完成实时迁移,但默认情况下还需要手动修改虚拟机的处理器兼容性才可实现该功能。因此也不建议用户在重要生产环境中混合不同硬件架构的服务器。
如果基于成本考虑而需要利用和混合不同硬件的服务器,则必须接受可以预见的性能损失和少量增加的运维工作量。
实时迁移是微软高可用技术的一个直观体现,不仅仅是虚拟化,在私有云中,实时迁移也是一项值得单独书写的新功能。