介绍
当前我们有一整套运行长达5年之久的VMware,因服务器逐步报废的原因,我们决定将所有的VMware虚拟主机迁移至OpenStack。OpenStack是采用Kolla部署的Train版本的高可用环境,Ceph为独立部署的Nautilus版本。
当前我们需要从VMware ESXi迁移超过220个VMware虚拟机(Linux和Windows)到OpenStack。除了VMware主机外,还有少部分的Hyper-V虚拟主机也要进行迁移。本文将为大家演示用于迁移虚拟机的步骤和命令。通过这些步骤和命令,可以轻松创建自动进行迁移的脚本。
本次迁移仅仅涉及V2V,不涉及任何的P2V。
比较新版本的libguestfs-tools和qemu-img convert可以很好地处理VMDK文件(旧版本的工具存在一些问题),因此迁移效率更高。迁移过程中去除了从VMDK到VMDK(单个文件)以及从VMDK到RAW的转换步骤。通过减少这些步骤,使迁移速度将加倍。
迁移过程中需要注意本文涉及到的命令,因为一些命令非常强大,并且可以破坏Ceph和OpenStack中的配置和数据。因此,请谨慎的使用相关的命令
全局步骤
安装VirtIO驱动程序
扩展分区(可选)
自定义虚拟机(可选)
创建Cinder卷
将VMDK转换为Ceph
创建Neutron端口(可选)
在OpenStack中创建和启动实例
技术指标
以下是用于迁移的基础结构的规范:
云平台:OpenStack Train
云存储:Ceph
Windows实例:Windows Server 2012R2至2016
Linux实例:RHEL5/6/7,SLES,Debian和Ubuntu
只能转换来自ESXi的VMDK文件,无法使用qemu-img从VMware Player转换VMDK文件
不涉及加密磁盘的迁移
OpenStack为实例提供VirtIO半虚拟化硬件
需求
Linux“迁移服务器”(可以使用Ubuntu 14.04/16.04/18.04,CentOS6/CentOS7,Redhat6/Redhat7,Fedora19-22),同时需满足以下需求:
服务器操作系统(已成功通过以下测试):
RHEL6(RHEL7没有“libguestfs-winsupport”)
Fedora 19、20、21和22
Ubuntu 14.04,16.04和18.04
与正在运行的OpenStack环境的网络连接。最好不要通过公网Internet,因为我们需要“超级管理员”权限。本地网络连接通常比Internet连接更快。如果能保证是万兆网络的话将会更好。
足够的硬件性能与功能来转换磁盘并能在KVM中运行实例(大小取决于您要在一定时间内迁移的实例,如有SSD最佳)。
我们使用的服务器配置为,8核Intel Xeon E3-1230@3.3 GHz,64 GB RAM,8块1TB SSD,并且每小时能够迁移超过500 GB 。但是,这实际上取决于实例磁盘空间的使用情况。我的旧公司笔记本电脑(Core i5和8GB RAM和一个旧的4500rmp HDD)也可以工作,但是显然性能很差。
在迁移之前还要满足如下需求:
拥有Linux迁移主机上的本地sudo(root)权限
QEMU/KVM主机
OpenStack的权限(通过Keystone获取)
对Ceph的相应的操作权限
对OpenStack API和Ceph的不受限制网络访问
VirtIO驱动程序(可从Red Hat,Fedora等主站下载)
软件包(所有软件包都应位于默认的发行版存储库中):
“python-cinderclient”(用于云盘)
“python-keystoneclient”(用于向OpenStack进行身份验证)
“python-novaclient”(控制实例)
“python-neutronclient”(用于控制网络)
“python-httplib2”(以便能够与Web服务通信)
“libguestfs-tools”(用于访问磁盘文件)
“libguestfs-winsupport”(应该仅在基于RHEL的系统上单独安装)
“libvirt-client”(控制KVM)
“qemu-img”(转换磁盘文件)
“ceph”(将虚拟磁盘导入Ceph)
“vmware-vdiskmanager”(用于扩展VMDK磁盘,可从VMware站点下载)
步骤1.注入VirtIO驱动程序1.1 Windows Server 2012
从Windows Server 2012和Windows 8.0开始,驱动程序受Windows保护。在脱机Windows磁盘中注入驱动程序非常困难。Windows Server 2012默认无法从VirtIO硬盘启动。因此,我采取了以下后续步骤将VirtIO驱动程序安装到Windows中。请注意,这些步骤应适用于所有经过测试的Windows版本(2008/2012/2016)。
创建一个新的KVM实例。确保将Windows vmdk磁盘创建为IDE磁盘!网卡应该是VirtIO设备。
添加额外的VirtIO磁盘,以便Windows可以安装VirtIO驱动程序。
当然,您应该添加包含驱动程序的VirtIO ISO或软盘驱动器。您还可以使用virt-copy-in注入驱动程序文件,并注入必要的注册表设置以自动安装驱动程序。
启动虚拟机,并给Windows大约两分钟时间,以找到新的VirtIO硬件。为所有新发现的硬件安装驱动程序。确认没有设备没有安装驱动程序。
关闭系统并卸下额外的VirtIO磁盘。
将Windows vmdk磁盘重新定义为VirtIO磁盘(这是IDE)并启动实例。现在应该可以正常启动了。关闭虚拟机。
1.2 Linux(内核2.6.25及更高版本)
Linux 2.6.25及更高版本的内核已经内置了对VirtIO硬件的支持。因此,无需注入VirtIO驱动程序。使用VirtIO硬件创建并启动新的KVM虚拟机。如果LVM分区没有自动安装,请运行以下命令进行修复:
mount -o remount,rw /pvscanvgscanreboot