客户要将业务从自建的虚拟化数据中心迁移至UCloud,但愿可以将多年前的VMware体系换到公有云体系。其中:git
另外,但愿迁移过程不要太长,不要影响市场推广等工做及业务创新。github
通过可行性分析,至少存在如下挑战:web
基于以上缘由,没法使用现成的工具,由于迁移工具对主流操做系统(CentOS、Ubuntu)支持较好,可是比较老的系统,因为新的硬件驱动缺少厂商支持缘由,致使没法使用。数据库
所以,只能经过镜像方式迁移。windows
基于上,总体迁移思路,基本是2个方向:安全
前置条件是:服务器
二、线下磁盘拷贝网络
对于数据量太大、公网带宽不够大、因安全因素不方便公网传输等,是公网在线传输作不到的,能够体现线下磁盘拷贝的优点。架构
这里使用U闪盘(能够理解为aws的snowball、阿里的闪电立方)来作镜像的传输。主要有如下优点:运维
为了简化步骤,减小中间态等待时间,且为了缩短单个迁移过程时间,采用异步操做,减小同步操做带来的等待时间。
在此例中,因为数据太大,为加快迁移速度,所以选择了方案2,线下磁盘迁移方式。
迁移流程图以下:
首先须要:
上述流程中需提早建立物理云服务器,经过U闪盘进行系统盘和数据盘镜像的传输,将存储好数据的U闪盘挂载到物理云服务器,同时在物理云主机内完成系统盘镜像的格式转换和驱动的注入过程。
在物理云主机内经过内部API,建立临时中起色器,并建立具备系统盘属性的云盘,把挂载的U闪盘看成本地盘,经过qemu-nbd,将U闪盘的系统盘和数据盘分别远程挂载到建立的中起色的两块云盘上(系统盘与数据盘)。
将临时建立的中起色绑定的两块云盘卸载下来,经过系统盘建立云主机(该过程须要内部API来实现),将另外一块磁盘看成数据盘挂载,完成对云主机系统盘数据盘的迁移。
3.1IDC中VMware环境准备
1.vSphere客户端链接vCenter服务器
安装vsphere客户端,远程链接到IDC中VMware的管理节点vCenter,其将对应克隆出的镜像传输到U闪盘中保存。
2.导出镜像
对于关机离线的系统,能够直接导出OVF或者VMDK格式的镜像;对于未能离线导出的系统,可进行镜像克隆,克隆后的格式为VMDK。
3.2中转服务器环境准备
①安装KVM虚拟化环境
安装CentOS 7操做系统,并确保支持开启硬件虚拟化功能;确保磁盘空间很多于迁移数据量。安装KVM虚拟化,执行命令以下:
# yum install qemu-kvm qemu-key-tools libvirt qemu-img # yum install virt-* # modprobe kvm # modprobe kvm_intel # systemctl start libvirtd # systemctl enable libvirtd.service
②安装virt-v2v
考虑到兼容云服务商的兼容性问题(例如IO及网络的加速,系统的高内核版本),针对老旧的系统,如:Windows 2000,Windows Server 2003,Windows Server 2008等,须要用virt-v2v转换。
对于IO加速,经过virt-v2v自动注入VirtIO驱动来解决,能够把虚拟机从一个虚拟平台导入到另一个虚拟平台,使用 virt-v2v 命令将其它虚拟机监控程序(hypervisor)上运行的虚拟机进行转换,从而能够在 Red Hat Enterprise Virtualization 或由 libvirt 管理的 KVM 上运行。当前,virt-v2v 能够转换在 Xen、KVM 和 VMware ESX / ESX(i) 上运行的 Red Hat Enterprise Linux 虚拟机和 Windows 虚拟机。在须要的状况下,virt-v2v 会在被转换的虚拟机上启用准虚拟化(VirtIO)驱动。
virt-v2v将外部的虚拟化平台上的虚拟机转化到能够运行的KVM平台上。它能够读取运行在VMware、Xen、Hyper-V和其余虚拟机管理程序上的Windows和Linux的虚拟机,并将其转换为KVM的libvirt,OpenStack,oVirt,红帽虚拟化(RHV)等几种方式。
# yum install virt-v2v
③宿主机上安装VirtIO驱动
Virtio驱动程序是KVM虚拟机的半虚拟化设备驱动程序,半虚拟化驱动程序可提升机器性能,减小I / O延迟并将吞吐量提升到接近裸机水平。安装Windows的VirtIO驱动以下:
# yum install libguestfs-winsupport libguestfs-tools # wget https://fedorapeople.org/groups/virt/VirtIO-win/VirtIO-win.repo -O /etc/yum.repos.d/VirtIO-win.repo # yum install VirtIO-win
④安装ntfs-3g,用于挂载U闪盘
NTFS-3G支持在Linux, FreeBSD, Mac OS X, NetBSD, Haiku等操做系统下读写NTFS格式的分区。除了彻底的文件属主和访问权限,它支持全部符合POSIX标准的磁盘操做。目的是为那些用户须要与NTFS可靠互通的硬件平台和操做系统提供可信任的、功能丰富的高性能方案。
# yum install epel-release # yum install ntfs*
⑤编译安装NDB
安装NBD可被用来进行远程存储和备份,NBD的驱动程序在本地客户端模拟了一个块设备,好比一个磁盘或者是一块磁盘分区,但实际提供物理支持的倒是经过网络链接的远程服务器。
3.3镜像格式转换与VirtIO驱动注入
转换磁盘文件并注入VirtIO驱动程序,执行命令以下:
# export LIBGUESTFS_BACKEND=direct # virt-v2v -i vmx server2003.vmx -of qcow2 -o qemu -os ./ // 注:执行命令virt-v2v -i vmx “vmx文件名” –of qcow2 –o qemu –os “转换后磁盘文件存放路径”,默认是把系统盘与数据盘都进行转换,为了节省转换时间,能够修改vmx文件只进行系统盘的转换。
3.4经过API建立中转系统盘及数据盘
经过API建立新的云盘,做为用来开启云主机的系统盘,以及用来导入数据的数据盘(_其中系统属性的磁盘为内部API_)。新建立的两块云盘均为临时中转盘,用来存储导入镜像的系统以及数据。
具体的API可参考:https://github.com/ucloud
3.5远程挂载云盘与磁盘拷贝
为减小迁移耗时的流程,将U闪盘的系统盘和数据盘以网络的形式直接挂载到新建立的VM上,而后将U闪盘内的数据与临时中起色建立的云盘实现内网的磁盘数据拷贝。鉴于磁盘IO和网络带宽的限制,上述方案可省去公网传输和对象存储存储镜像的中转过程。
具体过程以下:使用qemu-nbd的远程磁盘挂载,将U闪盘的数据盘,直接挂载到云盘上。而后将云盘卸载,挂载到对应的客户机器上去。
①在物理云服务器上将U闪盘的磁盘镜像挂载到nbd的特定端口
# qemu-nbd -r -t -v -f qcow2 -p 5000 web-sdc.qcow2 // 注:5000为端口号,web-sdc为数据盘镜像。
②在中起色上安装qemu-img,将远程的数据盘镜像挂载到新建立的云硬盘。
# qemu-img convert nbd://10.23.xx.xx:5000 /dev/vdc // 注:10.23.xx.xx为物理服务器内网IP地址,/dev/vdc为新建立的云盘。
3.6建立云主机并挂载数据盘
对于已经同步过数据的系统盘与数据盘,经过API对系统盘进行云主机的建立;对于云数据盘,须要先将中起色上的云盘进行卸载,而后挂载到须要开启的目标云主机上,从而达到云主机的建立与数据盘的挂载功能。UCloud有自动化的脚本及程序来实现以上过程。
经过本次迁移,确承认以支持和限制因素以下,供参考。
4.1支持
对于VMware,此迁移支持如下环境:
4.2限制
本文来自UCloud华南架构中心,若有相关需求或业务咨询,欢迎私信联系或评论区留言!