第十章 实时迁移
实时迁移是一项非常有用的功能,也是实现虚拟化高可用的有力组成部分之一。它的目的是在将虚拟机从一台 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 所示。此处虚拟机所保存的位置为\\fs\Hyper-V 存储共享\ ,由于是演示环境,可以直接点击"完成"结束快速创建。
第 2 步,首先启动该虚拟机,然后在对应的虚拟机"SMB3.0 迁移测试"上右键点击,选择"移动",如图 10-7 所示。
第 3 步,在"移动虚拟机向导"的"选择移动类型"对话框中,选择"移动虚拟机"选项,点击"下一步"继续,如图 10-8 所示。
第 4 步,在"指定目标"对话框中,可以输入目标 Hyper-V 主机的名称,或使用"浏览" 选择目标 Hyper-V 主机。此处输入 Netbios 或者 FQDN 均可,如图 10-9 所示。
第 6 步,由于这是一个新创建的虚拟机,因此实时迁移速度很快,几秒钟即可完成实时迁移,可以在 hv1.contoso.com 上找到这台虚拟机,同时其状态也是"正在运行"。如图 10-11 所示。
10.3.3 基于故障转移群集的实时迁移
第 1 步,打开"故障转移群集管理器",点击"角色",选中需要进行实时迁移的开机状态的虚拟机,右键点击,选择"移动",如图 10-12 所示
第 3 步,在"角色"列表中,可以看到虚拟机正在迁移,以及迁移的进度。如图 10-14 所示,几十秒后即可完成迁移,同时角色的状态也由"正在进行……"变为"正在运行"。
可以看到,使用故障转移群集进行实时迁移的操作步骤和逻辑都比使用"Hyper-V 管理器"要简洁一些,因此在实现虚拟机高可用的情况下,建议用户采用硬件存储来搭建故障转移群集。
10.3.4 基于独立 Hyper-V 主机的无共享实时迁移
第 2 步,开启该虚拟机,右键点击该虚拟机,选择"设置",检查"硬盘驱动器"的配置,确认虚拟硬盘保存在本地磁盘中,未使用共享存储或群集。如图 10-16 所示。
第 3 步,右键点击该虚拟机,选择"移动",打开移动虚拟机向导,在"选择移动类型" 对话框中,选择"移动虚拟机"选项。如图 10-17 所示,点击"下一步"继续。
第 4 步,在"指定目标"对话框,输入 hv1,或通过"浏览"按钮,选择目标计算机。
第 7 步,点击"完成"后,系统会弹出正在执行移动的进度条,耐心等待进度完成,如图 10-21 所示。
10.3.5 存储实时迁移
- 发起存储实时迁移。
- 在存储实时迁移阶段中,新的改动都写入到原始磁盘中。同时开始将数据从原始存储复制到新存储。
- 在最初的数据复制完成后,磁盘的写入操作被镜像到新存储。
- 当新的存储的数据和原始磁盘相同时,虚拟机切换到新的存储上。
- 源磁盘数据被删除。
可以看到,存储实时迁移的过程和虚拟机的实时迁移类似,都是先完成最初数据的完整复制,再补充增量数据的复制,最后切换所有权。
第 2 步,开启该虚拟机,在虚拟机上右键点击,选择"移动",如图 10-24 所示。
第 3 步,打开移动虚拟机向导,在"选择移动类型"对话框中,选择"移动虚拟机的存储"选项,如图 10-25 所示。
第 5 步,在"虚拟机"选项卡下,可以定义存储迁移的新位置,这里将虚拟机迁移至"c:\users\"下。如图 10-27 所示,点击"完成"开始存储实时迁移。
第 6 步,在完成存储实时迁移后,可以检查虚拟机的属性,会发现硬盘虚拟硬盘的存储已经移动到新的位置下了。如图 10-28 所示。
10.4 小结
如果基于成本考虑而需要利用和混合不同硬件的服务器,则必须接受可以预见的性能损失和少量增加的运维工作量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通