前言
系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机, 并且能够在目的主机上正常运行在没有虚拟机的时代, 物理机之间的迁移依靠的是系统备份和恢复技术在源主机上实时备份操作系统和应用程序的状态, 然后把存储介质连接到目标主机上, 最后在目标主机上恢复系统随着虚拟机技术的发展, 系统的迁移更加灵活和多样化
本系列文章全面介绍了虚拟机迁移的三种方式 P2VV2V 和 V2P, 及他们在内核虚拟机 KVM 上的实现方法, 分成五个部分第一部分, 介绍虚拟机迁移的各种方法和相应的迁移工具, 并且着重分析 Linux 平台上开源的虚拟化工具 KVM 和 XEN 实时迁移中的的内存预拷贝技术;
第二部分介绍 KVM 虚拟机之间的 V2V 迁移技术, 包括离线迁移和在线迁移; 第三部分介绍基于 VMware 或 XEN 的虚拟机如何迁移到基于 KVM 的虚拟机; 第四部分介绍物理机到虚拟机迁移 P2V 和虚拟机到物理机迁移 V2P 在 KVM 虚拟机上的实现; 第五部分介绍和虚拟机迁移密切相关的虚拟机克隆快照和备份技术
虚拟机迁移简介
为什么要迁移服务器
迁移服务器可以为用户节省管理资金维护费用和升级费用以前的 x86 服务器, 体积比较庞大; 而现在的服务器, 体积已经比以前小了许多, 迁移技术使得用户可以用一台服务器来同时替代以前的许多台服务器, 这样就节省了用户大量的机房空间另外, 虚拟机中的服务器有着统一的虚拟硬件资源, 不像以前的服务器有着许多不同的硬件资源 (如主板芯片组不同, 网卡不同, 硬盘, RAID 卡, 显卡不同) 迁移后的服务器, 不仅可以在一个统一的界面中进行管理, 而且通过某些虚拟机软件, 如 VMware 提供的高可用性工具, 在这些服务器因为各种故障停机时, 可以自动切换到网络中另外相同的虚拟服务器中, 从而达到不中断业务的目的总之, 迁移的优势在于简化系统维护管理, 提高系统负载均衡, 增强系统错误容忍度和优化系统电源管理
虚拟机迁移的性能指标
一个优秀的迁移工具, 目标是最小化整体迁移的时间和停机时间, 并且将迁移对于被迁移主机上运行服务的性能造成的影响降至最低当然, 这几个因素互相影响, 实施者需要根据迁移针对的应用的需求在其中进行衡量, 选用合适的工具软件虚拟机迁移的性能指标包括以下三个方面:
整体迁移时间: 从源主机开始迁移到迁移结束的时间
停机时间: 迁移过程中, 源主机目的主机同时不可用的时间
对应用程序的性能影响: 迁移对于被迁移主机上运行服务性能的的影响程度
虚拟机迁移的分类及原理
物理机到虚拟机的迁移(Physical-to-Virtual)
P2V 指迁移物理服务器上的操作系统及其上的应用软件和数据到 VMM(Virtual Machine Monitor)管理的虚拟服务器中这种迁移方式, 主要是使用各种工具软件, 把物理服务器上的系统状态和数据镜像到 VMM 提供的虚拟机中, 并且在虚拟机中替换物理服务器的存储硬件与网卡驱动程序只要在虚拟服务器中安装好相应的驱动程序并且设置与原来服务器相同的地址(如 TCP/IP 地址等), 在重启虚拟机服务器后, 虚拟服务器即可以替代物理服务器进行工作
P2V 迁移方法
手动迁移: 手动完成所有迁移操作, 需要对物理机系统和虚拟机环境非常了解
关闭原有的物理机上的服务和操作系统, 并且从其他媒质上启动一个新的系统比如从 LiveCD 上启动一个新的光盘系统大部分的发行版都会带有 LiveCD
把物理机系统的磁盘做成虚拟机镜像文件, 如有多个磁盘则需要做多个镜像, 并且拷贝镜像到虚拟主机上
为虚拟机创建虚拟设备, 加载镜像文件
启动虚拟机, 调整系统设置, 并开启服务
半自动迁移: 利用专业工具辅助 P2V 的迁移, 把某些手动环节进行自动化比如将物理机的磁盘数据转换成虚拟机格式, 这一向是相当耗时的工作, 你可以选择专业的工具来完成这个步骤这里有大量的工具可以使用, 如 RedHat 的开源工具 virt-p2v,Microsoft Virtual Server Migration Toolkit 等
P2V 热迁移: 迁移中避免宕机 大部分 P2V 工具也有一个很大的限制: 在整个迁移过程中, 物理机不可用在运行关键任务的环境或有 SLA(服务水平协议)的地方, 这种工具不可选幸运的是随着 P2V 技术的发展, VMware vCenter Converter 和 Microsoft Hyper-V 已经能够提供热迁移功能, 避免宕机目前, P2V 热迁移仅在 Windows 物理服务器可用, 未来将添加对 Linux 的支持
虚拟机到虚拟机的迁移(Virtual-to-Virtual)
V2V 迁移是在虚拟机之间移动操作系统和数据, 照顾主机级别的差异和处理不同的虚拟硬件虚拟机从一个物理机上的 VMM 迁移到另一个物理机的 VMM, 这两个 VMM 的类型可以相同, 也可以不同如 VMware 迁移到 KVM, KVM 迁移到 KVM 可以通过多种方式将虚拟机从一个 VM Host 系统移动到另一个 VM Host 系统
V2V 离线迁移
离线迁移(offline migration): 也叫做常规迁移静态迁移在迁移之前将虚拟机暂停, 如果共享存储, 则只拷贝系统状态至目的主机, 最后在目的主机重建虚拟机状态, 恢复执行如果使用本地存储, 则需要同时拷贝虚拟机镜像和状态到目的主机到这种方式的迁移过程需要显示的停止虚拟机的运行从用户角度看, 有明确的一段服务不可用的时间这种迁移方式简单易行, 适用于对服务可用性要求不严格的场合
V2V 在线迁移
在线迁移 (online migration): 又称为实时迁移 (live migration) 是指在保证虚拟机上服务正常运行的同时, 虚拟机在不同的物理主机之间进行迁移, 其逻辑步骤与离线迁移几乎完全一致不同的是, 为了保证迁移过程中虚拟机服务的可用, 迁移过程仅有非常短暂的停机时间迁移的前面阶段, 服务在源主机运行, 当迁移进行到一定阶段, 目的主机已经具备了运行系统的必须资源, 经过一个非常短暂的切换, 源主机将控制权转移到目的主机, 服务在目的主机上继续运行对于服务本身而言, 由于切换的时间非常短暂, 用户感觉不到服务的中断, 因而迁移过程对用户是透明的在线迁移适用于对服务可用性要求很高的场景
目前主流的在线迁移工具, 如 VMware 的 VMotion,XEN 的 xenMotion, 都要求物理机之间采用 SAN(storage area network), NAS(network-attached storage)之类的集中式共享外存设备, 因而在迁移时只需要考虑操作系统内存执行状态的迁移, 从而获得较好的迁移性能
另外, 在某些没有使用共享存储的场合, 可以使用存储块在线迁移技术来实现 V2V 的虚拟机在线迁移相比较基于共享存储的在线迁移, 数据块在线迁移的需要同时迁移虚拟机磁盘镜像和系统内存状态, 迁移性能上打了折扣但是他使得在采用分散式本地存储的环境下, 仍然能够利用迁移技术转移计算机环境, 并且保证迁移过程中操作系统服务的可用性, 扩展了虚拟机在线迁移的应用范围 V2V 在线迁移技术消除了软硬件相关性, 是进行软硬件系统升级, 维护等管理操作的有力工具
V2V 内存迁移技术
对于 VM 的内存状态的迁移, XEN 和 KVM 都采用了主流的的预拷贝 (pre-copy) 的策略迁移开始之后, 源主机 VM 仍在运行, 目的主机 VM 尚未启动迁移通过一个循环, 将源主机 VM 的内存数据发送至目的主机 VM 循环第一轮发送所有内存页数据, 接下来的每一轮循环发送上一轮预拷贝过程中被 VM 写过的脏页内存 dirty pages 直到时机成熟, 预拷贝循环结束, 进入停机拷贝阶段, 源主机被挂起, 不再有内存更新最后一轮循环中的脏页被传输至目的主机 VM 预拷贝机制极大的减少了停机拷贝阶段需要传输的内存数据量, 从而将停机时间大大缩小
然而, 对于更新速度非常快的内存部分, 每次循环过程都会变脏, 需要重复 pre-copy, 同时也导致循环次数非常多, 迁移的时间变长针对这种情况, KVM 虚拟机建立了三个原则: 集中原则, 一个循环内的 dirty pages 小于等于 50; 不扩散原则, 一个循环内传输的 dirty pages 少于新产生的; 有限循环原则, 循环次数必须少于 30 在实现上, 就是采取了以下措施:
有限循环: 循环次数和效果受到控制, 对每轮 pre-copy 的效果进行计算, 若 pre-copy 对于减少不一致内存数量的效果不显著, 或者循环次数超过了上限, 循环将中止, 进入停机拷贝阶段
在被迁移 VM 的内核设置一个内存访问的监控模块在内存 pre-copy 过程中, VM 的一个进程在一个被调度运行的期间, 被限制最多执行 40 次内存写操作这个措施直接限制了 pre-copy 过程中内存变脏的速度, 其代价是对 VM 上的进程运行进行了一定的限制
KVM 的预拷贝在线迁移过程详解:
系统验证目标服务器的存储器和网络设置是否正确, 并预保留目标服务器虚拟机的资源
图 1. 源服务器和目标服务器简图
当虚拟机还在源服务器上运转时, 第一个循环内将全部内存镜像复制到目标服务器上在这个过程中, KVM 依然会监视内存的任何变化
图 2. 内存镜像复制示意图
以后的循环中, 检查上一个循环中内存是否发生了变化 假如发生了变化, 那么 VMM 会将发生变化的内存页即 dirty pages 重新复制到目标服务器中, 并覆盖掉先前的内存页在这个阶段, VMM 依然会继续监视内存的变化情况
图 3. 进行有变化的内存复制
VMM 会持续这样的内存复制循环随着循环次数的增加, 所需要复制的 dirty pages 就会明显减少, 而复制所耗费的时间就会逐渐变短, 那么内存就有可能没有足够的时间发生变化最后, 当源服务器与目标服务器之间的差异达到一定标准时, 内存复制操作才会结束, 同时暂停源系统
图 4. 所需复制的数据在减少
在源系统和目标系统都停机的情况下, 将最后一个循环的 dirty-pages 和源系统设备的工作状态复制到目标服务器
图 5. 状态信息的复制
然后, 将存储从源系统上解锁, 并锁定在目标系统上启动目标服务器, 并与存储资源和网络资源相连接
图 6. 停止源服务器, 启动目标服务器
Virtual-to-Physical 虚拟机到物理机的迁移
V2P 指把一个操作系统应用程序和数据从一个虚拟机中迁移到物理机的主硬盘上, 是 P2V 的逆操作它可以同时迁移虚拟机系统到一台或多台物理机上尽管虚拟化的基本需求是整合物理机到虚拟机中, 但这并不是虚拟化的唯一的应用比如有时虚拟机上的应用程序的问题需要在物理机上验证, 以排除虚拟环境带来的影响另外, 配置新的工作站是件令 IT 管理者头痛的事情, 但虚拟化的应用可以帮助他解决这个难题先配置好虚拟机, 然后运用硬盘克隆工具复制数据至工作站硬件, 比如赛门铁克的 Save & Restore (Ghost)不过这种克隆方法有两个局限: 一个镜像只能运用在同种硬件配置的机器上; 要想保存配置的修改, 只能重做新的镜像
V2P 的迁移可以通过确定目标的物理环境来手动完成, 如把一个特定的硬盘加载到虚拟系统中, 然后在虚拟环境中安装操作系统应用程序和数据, 最后手动修改系统配置和驱动程序这是一个乏味且不确定的过程, 特别是在新的环境比旧的环境包含更多大量不同的硬件的情况下为了简化操作, 我们可以利用专门的迁移工具以自动的方式来完成部分或全部迁移工作目前支持 V2P 转换的工具有 PlateSpin Migrate 和 EMC HomeBase 使用这样的工具使得 V2P 转换过程更简易, 并且比使用第三方磁盘镜像工具更快捷
V2P 迁移方法
V2P 的不确定性导致自动化工具不多, 目前主要有以下几种解决方案:
VMware 官方推荐的是使用 Ghost+sysprep 来实现半自动化的迁移
基于备份和恢复操作系统的解决方案这个方案利用了现成的系统备份恢复工具, 没有体现虚拟机和物理机的差别, 类似于 P2P(Physical-to-Physical 物理机到物理机迁移)注意备份工具能够恢复系统到异构硬件平台上
开源工具的解决方案适合 Linux/Unix 系统, 使用开源工具和脚本, 手动迁移系统这个方案难度较大, 适合有经验的管理员
Linux 系统在虚拟机迁移中的技术难点
通常我们期望虚拟机的迁移能够全部自动化或者部分自动化完成, 但实际上 Linux 系统在 P2V 和 V2V 的迁移中可能遇到一些困难本节列举了 Linux 迁移中需要注意的地方
磁盘分区名被硬编码当我们做磁盘虚拟化时, 可能会使用不同类型的虚拟磁盘设备, 这将会导致磁盘名字的变化比如 Xen 虚拟机中的半虚拟化设备使用 /dev/xvda 而标准的 Linux 半虚拟化设备使用 /dev/vda 准备迁移的 Linux 系统中存在对 /dev/hd* 和 /dev/sd* 磁盘分区名分散的关联, 比如在 /etc/fstab 文件, 启动初始化文件系统 ramfs 和一些解析磁盘设备的开机启动脚本文件中 V2V 迁移工具需要在整个磁盘上查找并修改这些关联有一个简单的方法来避免这种情况: Linux 系统上主流的文件系统和交换分区类型可以使用 Lables 或 UUID 作为分区名迁移时这些信息是被重点保护的, 系统应该小心使用这些信息, 一定不要使用设备作为分区名另外, LVM 分区名和设备无关, 在迁移中也不受影响
网络硬件设备的改变当系统迁移时, 网络设备很可能产生变化比如虚拟网络设备和物理网络设备的转化或者不同类型的网络设备之间的转变但是是他们的 MAC 地址没有变化 MAC 地址是 IEEE 分配给物理设备制造商的, 两个物理设备不会有相同的 MAC 地址; 然而虚拟网络设备可能出现这种情况所以在做虚拟机迁移时, 你必须记录每一个网络设备的 MAC 地址, 保证 MAC 地址和网络设备的对应关系
内核不支持某些虚拟设备某些 Linux 发行版没有 virtio 虚拟设备的驱动, 可能是因为 Linux 发行版早于虚拟设备发布了; 或者虚拟设备的驱动是闭源的; 或者是在系统编译时去掉了因此, 有时我们另外需要一个完全不同的内核 (比如 Xen 早期的版本就是这样的) 无论如何, 在客户机上安装一个新的内核并且使之可以启动是一个很大的冒险, 最好避免这样做
Xwindow 需要重新配置与磁盘网络设备一样, 系统迁移后显示设备也会变化理想的情况是 Xwindow 会自动处理这个的变化, 探测所有的显示设备并且使用它发现的第一个设备但是这不意味着所有的 Linux 发行版都会以这种方式工作
网络环境的变化静态 IP 地址和静态 DNS 解析在虚拟机迁移中 是一个麻烦的事情尽管不是必须的, 但是最好配置系统从 DHCP 服务器自动获得所有的网络配置信息
CPU 的扩展指令集发生变化迁移后的系统中, 新的虚拟 CPU 或主板和旧的会有一些不同 CPU 的扩展指令集如 SSE,Vectors, NX 可能被加入或去掉 CPU 的型号和制造商信息可能被改变因此, 如果你想要优化虚拟系统上的软件, 这可能是浪费时间并且导致系统崩溃最好是使用通用的软件, 让程序在每次启动的时候检查运行环境和是否需要优化实际上, 实时迁移的状况比这个还要复杂, 因为处理器可能在程序的运行的过程中被改变目前为止还没有一个方案能很好的解决这个问题
如你所见, P2V 和 V2V 最大的问题在于硬件的改变 Linux 发行版本身应该可以处理所有的硬件变化: 在系统启动的时候去检查所有的硬件, 操作系统内核识别新的设备并寻找新的驱动处理它们 , 所有应用软件都不要和硬件绑定, 设计一个很好的模式来应对突然的环境变化
目前流行的虚拟机软件的迁移特性介绍
P2V 迁移工具
虚拟机所呈现出来的虚拟硬件通常与原始服务器上的物理硬件不同 P2V 迁移工具是这样解决这个问题的:
VMware vCenter Converter: 支持从诸如物理机 VMware 和 Microsoft 虚拟机格式以及某些第三方磁盘映像格式的源进行转换他替代了旧的迁移工具 VMware Workstation Importer 和 VMware P2V AssistantVMware vCenter Converter 可以支持和识别大多数服务器硬件类型 VMware vCenter Converter 提供以下两种克隆机制: 热克隆 (实时迁移) 和冷克隆 (使用 BootCD 的克隆) 使用热克隆时, VMware vCenter Converter 直接与源物理机上运行的操作系统通信, 因此没有直接的硬件级别依赖性; 使用冷克隆时, VMware vCenter Converter BootCD 提供一个可支持最新硬件的 Windows PE 引导环境, 因此可以识别大多数物理服务器系统硬件目前只支持基于 Microsoft Windows 的物理机迁移
XenConvert: 是 XenServer 物理机到虚拟机的迁移工具不仅可以迁移 Window 物理机到 XenServer 管理的虚拟机, 而且可以导入 VMware 虚拟机 VMDK 格式和 OVF 包
Virtual Machine Manager 2008: 提供基于任务的向导, 将自动执行大部分转换过程, 以此来简化 P2V 转换由于可通过编写脚本来完成 P2V 转换过程, 因此可以通过 Windows PowerShell 命令行进行大规模的 P2V 转换 VMM2008 同时支持联机转换和脱机转换
Symantec Ghost: 制作镜像文件和把镜像文件恢复到虚拟机用来把需要迁移的服务器的硬盘通过网络做成镜像文件, 然后通过网络把镜像文件恢复到虚拟机
Virt-p2v:RedHat 的开源迁移工具
V2V 迁移工具
支持 V2V 迁移是虚拟机的管理工具的重要功能, 所以各种虚拟化软件都提供了实现 V2V 迁移的模块或工具 V2V 在线迁移大大的减少了虚拟机的迁移的停机时间这使动态迁移成了用户在需要不间断工作时迁移虚拟机的首选通常的在线迁移方案, 是虚拟机使用共享存储, 迁移时只拷贝虚拟机的内存原理参见前面的小节 V2V 内存迁移技术
VMware VMotion
VMware 的在线迁移是由 VMotion 这个组件实现的 Vmotion 的实时解决方案的特点是有其自己的 Cluster File System: VMFS, 此外也支持 NFSVmotion 把整个虚拟机包括其完整状态封装在几个文件中, 存放在 SAN/NAS 等共享存储中迁移的过程是把内存和运行状态通过高速网从源复制到目标
Citrix XenMotion
XenMotion 是 XenServer 的一项功能, 能够将正在运行的虚拟机从一台 XenServer 主机上迁移到另外一台, 而不带有停机的危险这就意味着在整个迁移过程中, 被移动的虚拟机在任意时刻都可以访问 XenMotion 的主要目的是在某台服务器进行计划维修时, 使终端用户觉察不到应用程序出现过极短暂的中断, 令整个服务过程正常顺畅
Microsoft Hyper-V
微软的 Hyper-V 从 2.0 开始支持了动态迁移技术利用 Hyper-V 动态迁移, 在不中断任何服务或者不允许停机的前提下, 将一个运行中的虚拟机从一个 Hyper-V 物理主机移动到另外一个上面, 通过预复制迁移的虚拟机中的内存到目的主机管理员或者脚本在启动动态迁移的时候控制选择此次迁移的目标计算机, 客户使用被迁移系统时是不会感觉到迁移在进行的
QEMU-KVM/Libvirt
内核虚拟机 KVM 技术的原创公司 Qumranet 在 2008 年被 RedHat 收购以后, 得到了全面快速的发展在 2009 年发布的 Redhat Enterprise Linux 5.4 全面支持了 KVM 虚拟机, 其中已经包含了离线迁移和在线迁移的技术 2010 年发布的 Redhat Enterprise Linux 5.5 和 Suse Linux Enterprise Server 11 Service Pack 1 中集成了图形化的 KVM 虚拟机管理工具 virt-manager, 使虚拟机的迁移更加直观和方面在本系列文章的下一篇中将详细介绍如何迁移 KVM 虚拟机
自动化迁移的未来
目前许多企业都已将包括 CPU 内存 I/O 存储网络在内的数据中心设备进行了虚拟化, 如何更好管理和利用这些虚拟的和物理的资源, 已经成为数据中心异构虚拟化时期急需解决的问题 P2V 迁移工具使物理资源虚拟化数据中心转移更加简单; V2V 迁移工具使虚拟资源达到最优化配置; 而 V2P 迁移工具可以快速部署虚拟机到物理机在不远的将来, P2V/V2P/V2V 工具都会失去原有的意义, 所有功能的实现都集成到一个智能化自动化自治化数据中心的优化系统中去 高度自动化的监测模块将 24 小时扫描整个数据中心, 寻找过载和闲赋的虚拟机; 规划模块根据监测报告和收集的信息选择最好的迁移工具进行资源优化, 迁移过程将在应用程序正常运行的状况下自动执行那时, 整个环境就像液体一样可以自由流动, 负载不停地在各服务器上保持着均衡, 虚拟环境与物理环境对用户将再无差别
虚拟化和云计算
云计算就是以服务的形式提供计算资源云计算背后最重要的概念之一就是可伸缩性, 而实现它的关键则是虚拟化虚拟化在一台共享计算机上聚集多个操作系统和应用程序, 以便更好地利用服务器虚拟化还允许在线迁移, 因此, 当一个服务器超载时, 可以将其中一个操作系统以及它的应用程序迁移到一个新的不繁忙的服务器上在云中, 可以在多个操作系统和应用程序之间共享虚拟化服务器, 从而减少服务器的数量更少的服务器意味着需要更少的空间 (减少数据中心占用的空间) 和更少用于制冷的电力(减少碳污染) IBM 认为, 虚拟化是未来云计算架构的关键组成模块, 而衡量一家 IT 企业的云能力的关键也正是其虚拟化实施能力虚拟化技术正在普及, 也许不用太久, 我们每天都会与虚拟机打交道
小结
本文介绍了虚拟机迁移的各种方法及工具, 分析了内存预拷贝技术的原理, 还列举了虚拟机迁移中应该注意的问题不仅对于系统管理员全面了解迁移方法和策略, 进行虚拟机迁移规划有参考意义; 而且对于虚拟机的开发和测试人员也有指导意义本系列后面的文章中, 将具体介绍在 KVM 虚拟机上, 如何操作和实现系统迁移
来源: http://www.bubuko.com/infodetail-2519682.html