服务器虚拟化中,为了维持物理资源使用率的最优化,并轻松添加新虚拟机,IT 必须能够在需要时不影响业务直接移动虚拟机。跨越 Hyper-V 宿主机移动虚拟机的能力最早出现在 Windows Server 2008 R2中,当时是通过一个名为实时迁移的功能实现的,然而当时该功能要求虚拟机必须位于共享存储或群集中,并且无法同时移动多个虚拟机。在 Windows Server 2012/R2中,Hyper-V 具备多项新增和改进的迁移功能,能为需要在数据中心内迁移负载的客户提供更高灵活性。
1. 实时迁移:
Hyper-V 实时迁移功能可不影响用户对虚拟机的使用,将运行中的虚拟机从一台物理服务器移动到另一台。通过将待迁移虚拟机的内存内容预先复制到目标服务器,实时迁移可将传输虚拟机所需时间降到最低。实时迁移是精确的,这意味着管理员或脚本发起的实时迁移将确定哪台计算机成为迁移的目标位置。待迁移虚拟机的来宾操作系统并不知道正在进行的迁移操作,来宾操作系统也无需任何特殊配置。
管理员通过Hyper-V管理器或者Hyper-V PowerShell发起实时迁移后,将发生下列操作:
1) 实时迁移设置 – 在实时迁移的设置阶段,源服务器与目标服务器创建连接。该连接用于将虚拟机的配置数据传输到目标服务器。目标服务器上会创建框架虚拟机,并获得所分配的内存。
2) 将内存页面从源节点传输到目标节点 – 在实时迁移的第二个阶段,分配给待迁移虚拟机的内存会通过网络复制到目标服务器。该内存也叫做待迁移虚拟机的“工作集”。内存的页面大小为 4KB。
例如,虚拟机“BJ-Server-01”配置有2G内存,需迁移到另一台 Hyper-V 服务器。分配给虚拟机的整个2G内存就是“BJ-Server-01”的工作集。“BJ-Server-01”使用的工作集页面会被复制到目标服务器。
除了将“BJ-Server-01”的工作集复制到目标服务器,Hyper-V 还会在源服务器上监控“BJ-Server-01的工作集。一旦“BJ-Server-01”的内存页面发生改动,页面会被记录并标注为已修改。已修改页面实际上就是自从开始复制工作集以来,“BJ-Server-01”上被修改的内存页面列表。
在迁移工作的这一阶段,待迁移虚拟机还在运行。Hyper-V 会重复多次执行内存复制操作,每次执行所需复制的有改动页面数量都有所减少。将整个工作集复制到目标服务器后,即将开始实时迁移的下一阶段。
3) 有改动的页面传输完毕 – 实时迁移的第三阶段需要将“BJ-Server-01”剩余的有改动内存页面复制到目标服务器。源服务器将虚拟机的 CPU 与设备状态信息传输到目标服务器。
在这一阶段,源与目标服务器之间可用的网络带宽是实时迁移速度的关键。建议使用 1Gigabit 以太网或更高速连接。源服务器越快将待迁移虚拟机工作集的有改动页面传输完毕,实时迁移操作就能越快速完成。
这一阶段传输的页面数量取决于虚拟机访问并修改内存页面的频率。修改的页面越多,将所有页面传输到目标服务器所需的时间就越长。
在将有改动内存页面完全复制到目标服务器后,目标服务器就有了“BJ-Server-01”的最新工作集。“BJ-Server-01”的工作集在目标服务器上的状态与开始执行迁移过程时的状态将完全一致。
4) 存储的处理由源服务器交给目标服务器 – 在实时迁移的第四个阶段,需要控制与“BJ-Server-01”有关的存储,例如任何虚拟磁盘文件,或通过虚拟光纤适配器连接的物理存储,都将传输到目标服务器。
5) 虚拟机在目标服务器上线 – 在实时迁移的第五个阶段,目标服务器已经有了“BJ-Server-01”的最新工作集,并能访问“BJ-Server-01”需要的全部存储。此时可以将“BJ-Server-01”重新恢复。
6) 网络清理 – 在实时迁移的最后一个阶段,被迁移的虚拟机开始在目标服务器上运行。此时还要向网络交换机发送一条消息。该消息会让网络交换机获取被迁移虚拟机的新 MAC 地址,这样“BJ-Server-01”接收或发送的网络通讯才能使用正确的交换机端口。
实时迁移过程的完成时间不会超过待迁移虚拟机的 TCP 超时值间隔。TCP 超时值间隔取决于网络拓扑及其他多种因素,下列情况将影响实时迁移的速度:
a) 待迁移虚拟机产生改动的页面数量—有改动页面数量越大,虚拟机处于迁移中状态的时间越长。
b) 源与目标服务器之间可用的网络带宽。
c) 源与目标服务器的硬件配置。
d) 源与目标服务器的负载.
e) 运行 Hyper-V 的服务器与共享存储之间的可用带宽(网络或光纤通道)。
2. 基于SMB的实时迁移:
在 Windows Server 2012 R2 Hyper-V 中,可以配置虚拟机使用 SMB 文件共享作为存储。随后即可在非群集服务器上运行的 Hyper-V 宿主机之间执行实时迁移,同时虚拟机的存储依然保留在 SMB 存储内。这样如果用户无需获得有保障的环境可用性,即可获得虚拟机可移植性的收益,但无需投资群集基础结构(如果需要高可用性,还可将使用 SMB 存储的 Hyper-V 配置为故障转移群集)。
该功能并非对使用 SMB 3.0 文件共享存储虚拟磁盘的虚拟机进行移动,通过 SMB 进行的实时迁移属于实时迁移功能的第二个性能改进,可以利用来自 SMB 协议的技术获得比压缩技术更快的实时迁移速度。
通过使用 SMB 实时迁移,虚拟机的内存内容需要通过 SMB 3.0 借助网络传输进行复制。这意味着您可以充分利用 SMB 功能的某些优势加速这一过程。首先,可为宿主机添加更多网卡,宿主机将利用 SMB 多通道功能提高传输速度,同时针对网卡和路径故障可改善适应性并获得冗余。其次,可以用支持远程直接内存访问,即 RDMA 功能的网卡硬件(例如 iWARP (10 Gbps)、ROCE (10/40 Gbps) 或 Infiniband (56 Gbps))的 SMB 直通功能获得最高性能,性能最高可达 56Gbps。支持 RDMA 的网络适配器可全速低延迟运行,同时造成的 CPU 开销也非常低。
通过使用 SMB 多通道,SMB 可检测具备 RDMA 功能的网络适配器,并为单一会话创建多个 RDMA 连接(每个端口两个连接)。这样 SMB 即可使用 RDMA 网络适配器所提供的高吞吐量,低延迟,低 CPU 开销等特性。在使用多个 RDMA 接口时还将获得容错支持。
通过为宿主机提供足够的 RDMA 网卡,并将其全部用于实时迁移,微软在发布该技术时,内部测试发现 CPU、磁盘及网络都不再是瓶颈 – 实际上此时影响实时迁移速度的瓶颈反而成了内存本身。
3. 更快速的并行迁移:
Windows Server 2012 R2 Hyper-V同时执行多个实时迁移,以便更快速地在群集中移动多个虚拟机。如果要将原本负载很重的宿主机切换为维护模式,这种功能将让您方便不少,可快速将虚拟机从宿主机中转移出来。在 Windows Server 2012 R2 Hyper-V 中,虚拟机可同时从源宿主机向其他目标宿主机转移,更充分地利用可用网络带宽,同时不会导致负载停机。
4. 带压缩的实时迁移:
在 Windows Server 2012 R2 中,有多个针对性能的改进可以帮您更快速实现实时迁移,并让操作更流畅高效。在大规模环境,例如私有云或云托管供应商环境中,这些性能改进可降低网络与 CPU 的开销,并能降低实时迁移所需的时间。Hyper-V 管理员可根据环境和具体要求配置所需的实时迁移性能选项。实时迁移性能选项可以在 Hyper-V 管理器控制台的宿主机设置中配置,或使用 Set-VMHost Windows PowerShell cmdlet,并将其应用给宿主机所发起的全部实时迁移操作。
5. 存储实时迁移:
Windows Server 2008 R2 Hyper-V 只能在虚拟机关闭的情况下迁移虚拟机存储。在很多机构中,不影响虚拟机负载的可用性,灵活管理存储的能力已成为一个关键。IT 管理员需要通过这种灵活性针对存储子系统执行维护,升级存储设备的固件与软件,并在需要时对负载和容量进行权衡。Windows Server 2008 R2 可供您通过实时迁移功能移动运行中的虚拟机实例,但依然无法在虚拟机运行过程中移动虚拟机的存储。
Windows Server 2012 R2 中的 Hyper-V 提供了一个名为实时存储迁移的功能,可供您将运行中虚拟机的虚拟磁盘移动到其他位置。通过该功能可不停机将虚拟磁盘传输到升级或迁移后的新存储位置,执行后端的存储维护,或分摊存储负载。您可通过 Hyper-V 管理器中新增的向导执行该操作,或使用新增的 Hyper-V Windows PowerShell cmdlet。实时存储迁移可用于基于存储区域网络(SAN)和基于文件的存储。
在移动运行中虚拟机的虚拟磁盘时,Hyper-V 将通过下列步骤移动存储:
1. 对于大部分操作,磁盘读写都针对源虚拟磁盘进行。
2. 虽然读写操作都是针对源虚拟磁盘进行,但磁盘内容还会被复制到新的目标虚拟磁盘。
3. 初始磁盘复制操作完成后,磁盘写入操作会同时针对源和目标虚拟磁盘进行,同时所有尚未复制的改动也会复制到目标磁盘。
4. 当源与目标虚拟磁盘保持同步后,虚拟机会切换为使用目标虚拟磁盘。
5. 源虚拟磁盘被删除。
与虚拟机在数据中心内动态移动的方式类似,为运行中虚拟磁盘分配的存储有时候也需要移动,以实现存储的负载分配,存储设备维护,或其他场景。
更新 Hyper-V 可用物理存储最常见的原因是移动虚拟机的存储。您可能还需要随时在物理存储设备之间移动虚拟机的存储,以便充分利用新版 Hyper-V 新支持的低成本存储方式(例如基于 SMB 的存储),或排除由于存储吞吐率导致的性能瓶颈对性能产生的影响。只要 Hyper-V 宿主机可以使用 SMB 3.0 网络共享文件夹,Windows Server 2012 R2 即可提供在共享及非共享的存储子系统之间移动虚拟磁盘的灵活性。
您可以为独立系统或 Hyper-V 群集添加物理存储,随后将虚拟机的虚拟磁盘移动到新的物理存储,这一过程不会影响虚拟机的正常运行。
通过将存储迁移与实时迁移功能配合使用,即可在使用不同存储的不同服务器宿主机间移动虚拟机。例如,如果两台 Hyper-V 服务器都配置为使用不同存储设备,要在这两台服务器间迁移虚拟机,就可以使用存储迁移功能将存储迁移到两台服务器都能访问的文件服务器共享文件夹,随后在两台服务器间迁移虚拟机(因为它们都能访问这一共享)。通过实时迁移,还可以使用其他存储迁移功能将虚拟磁盘移动到分配给目标服务器的存储,或使用“无需共享”实时迁移。
6. 无共享实时迁移:
微软的无共享迁移技术首次出现在Windows Server 8中,该技术一经发布,引起了业界轰动,通过Hyper-V无共享迁移技术,让迁移工作实现最高灵活性。
无共享实时迁移可以让 IT 管理员将运行中的虚拟机及虚拟磁盘从一个位置移动到另一个位置,并且不会导致停机。该功能可让虚拟机的迁移实现多种新场景:
1) 使用本地存储的独立宿主机到使用本地存储的独立宿主机
2) 使用本地存储的独立宿主机到使用 SAN 存储的群集宿主机
3) 使用 SAN 存储的群集宿主机到另一个使用其他 SAN 存储的不同群集宿主机
无需共享实时迁移包含多个操作步骤。首先,在两台没有使用共享基础结构的计算机间迁移虚拟机时,源服务器创建到目标服务器的连接。该连接用于将虚拟机配置数据传输到目标服务器。此时需要在目标服务器上创建框架虚拟机,并分配目标虚拟机所需的内存。
配置数据成功传输完毕后,还将传输磁盘内容。
在这一过程中,读写操作依然针对源虚拟磁盘进行。初始磁盘复制操作完成后,磁盘写操作会同时针对源与目标虚拟磁盘进行,未处理完的磁盘改动也会被复制。
当源与目标虚拟磁盘保持同步后,会发起虚拟机实时迁移操作,后续过程与使用共享存储的实时迁移类似。
当实时迁移操作完成,虚拟机成功在目标服务器上运行后,源服务器上的文件会被删除。
7. 跨版本的实时迁移
在老版本 Windows Server 中,迁移到新版平台会导致重要负载停机,因为虚拟机需要从老版平台导出,导入到新版平台。不过在 Windows Server 2012 R2 Hyper-V 中,客户可以不停机从 Windows Server 2012 Hyper-V 升级,因此这些重要负载可以无缝地高效迁移。但是请注意,无法进行降级迁移。,即无法将Windows Server 2012 R2 Hyper-V中的虚拟机无法迁移到Windows Server 2012 Hyper-V
如果企业管理员想使用上述迁移技术,需要具备以下前提:
1. 带 Hyper-V 的 Windows Server 2012 R2 或 Hyper-V Server 2012 R2。
2. 至少两台支持硬件虚拟化的 Hyper-V 宿主机,并使用相同架构处理器(例如同为 AMD 或同为 Intel)。
3. Hyper-V 主机必须位于Active Directory 域中。
4. 虚拟机配置为使用虚拟磁盘或虚拟光纤通道磁盘。
5. 用于实时迁移网络通讯的私有网络。
6. SMB 实时迁移的 SMB 直通功能要求具备支持 RDMA 技术的硬件。
如果虚拟机位于群集环境中,使用迁移技术需要确保一下前提:
1. 虚拟机的所有文件(包括虚拟磁盘、快照,以及配置)都保存在 SMB 3.0 共享中。
2. SMB 共享的权限配置为允许所有 Hyper-V 宿主机的计算机帐户访问。
以下演示非群集环境下的无共享存储迁移技术,关于群集相关的将在群集章节中介绍
1. 登陆Hyper-V主机“BJ-VMhost-01”和“BJ-VMhost-01”,打开Hyper-V管理器,右侧操作区域,点击Hyper-V设置
2. Hyper-V全局设置页面,点击实时迁移,勾选“启用传入和传出的实时迁移”、指定允许的并行实时迁移数量,默认为2个,以及设置传入的实时迁移的网络,可设置任意网络以及指定IP网络实时迁移
3. 点击高级功能,可选择设置身份验证协议,这里提供“使用凭据安全支持提供程序(CredSSP)”和“使用Kerberos”两种协议。
4. 性能选项页面,微软提供TCP/IP、压缩、SMB三种方式,默认使用压缩方式迁移虚拟机
5. 点击存储迁移,指定并行存储迁移数量,默认为2
6. 右键正在运行的虚拟机“BJ-Server-02”,选择移动
7. 移动虚拟机向导页面,点击下一步
8. 选择移动类型页面,这里可以选择移动虚拟机或者移动虚拟机的存储,点击下一步
9. 指定目标计算机页面,键入目标计算机名称,点击下一步
10.移动选项页面,选择希望如何使用虚拟机,点击下一步
1) 将虚拟机的数据移动到一个位置:此选项允许你为虚拟机的所有项目指定一个位置
2) 通过选择项目移动位置来移动虚拟机的数据:此选项允许你选择要移动的每个项目的位置
3) 仅移动虚拟机:此选项允许你仅移动虚拟机而不移动虚拟硬盘。虚拟机的虚拟硬盘必须位于共享存储中
11.由于前面已经指定Hyper-V主机,这里只显示文件夹路径,点击下一步
12.正在完成虚拟机移动向导页面,确认所有信息无误后点击完成
13.等待迁移完成