
介绍
当前我们有一整套运行长达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云存储:
CephWindows
实例:Windows Server 2012R2
至2016Linux
实例: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
和22Ubuntu 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
分区没有自动安装,请运行以下命令进行修复:




