【写在前面】飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。点击这里开始你的技术升级之旅吧
本文分享至飞腾开发者平台《虚拟机迁移方案》
1 介绍
本文编写目的是记录虚拟机迁移的方法以及操作步骤,以FT-2000+/64服务器为例。
2 原理
虚拟机的迁移(migration)分为静态迁移(static migration)和动态迁移(live migration),有的又叫冷迁移(cold migration)和热迁移(hot migration)。冷迁移和热迁移最大的区别就是,冷迁移会有一段明显的时间客户机中的服务不可用,而热迁移则没有明显的服务暂停时间。
冷迁移分为两种,一种是关闭客户机后,将硬盘镜像文件复制到另一台宿主机上,然后恢复启动,这种迁移不能保留客户机中运行的工作负载;另一种是两台宿主机共享存储系统,只需在暂停(不是完全关闭)客户机后,复制其内存镜像到另一台宿主机中恢复即可,这种迁移可以保持客户机迁移前的内存状态和系统运行的工作负载。
热迁移就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程。该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。与冷迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继续运行。对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。热迁移适用于对虚拟机服务可用性要求很高的场合。
3 迁移环境
3.1 硬件配置
10.31.81.160 nfs服务器 FT-1500A/16
10.31.81.233 源服务器 FT-2000+/64
10.31.81.214 目标服务器 FT-2000+/64
3.2 nfs服务器搭建
1)安装nfs服务
# apt-get install nfs-kernel-server
2)创建共享目录
# mkdir /opt/nfs
3)添加nfs服务共享目录
# cat >> /etc/exports <<- EOF
/opt/nfs *(rw,sync,no_root_squash,no_subtree_check)
EOF
4)启动nfs服务
# /etc/init.d/nfs-kernel-server restart
4 冷迁移
1)暂停源服务器运行的虚拟机vm1
2)拷贝虚拟机配置文件vm1.xml和镜像vm1.img到目的服务器
3)重新启动目的服务器上的libvirtd服务
systemctl restart libvirtd;
virsh list --all //查看虚拟机状态
至此一个虚拟机的冷迁移已经完成。
5 热迁移
5.1 基于QEMU的虚拟机热迁移
5.1.1 源服务器准备工作
1)源服务器上通过QEMU启动虚拟机,进入到qemu monitor模式。
2)在启动虚拟机时添加如下参数,即可通过串口访问虚拟机。
-serial unix:/tmp/test.sock,server,nowait
//串口访问
nc -U /tmp/test.sock
3)在虚拟机上执行top命令,如图所示,用以验证虚拟机热迁移。
5.1.2 目标服务器准备工作
1)创建与源服务器同目录的同名磁盘文件zjd_migrate.img,格式为qcow2,大小为20G。
qemu-img create -f qcow2 zjd_migrate.img 20G
2)启动命令在目标服务器上创建qemu进程。
通过如下参数让且木进程处于迁移监听状态,等待虚拟机数据迁入。
-incoming tcp:0:8888
3)使用命令查看目标服务器可以发现,迁移端口处于监听状态。
netstat -nltp
5.1.3 虚拟机迁移
1)在源服务器qemu monitor上执行迁移命令:
(qemu) migrate -d tcp:10.31.81.214:8888
//10.31.81.214:目标服务器IP地址
2)可以通过以下命令查看迁移过程中的状态:
(qemu) info migrate
3)迁移完成后,在目标服务器qemu monitor上,查看虚拟机状态为运行状态。
4)通过串口进入到虚拟机,可以看到top命令还在运行。
至此,基于qemu的虚拟机热迁移完成。
5.2 基于libvirt的虚拟机热迁移(nfs共享存储)
5.2.1 源服务器准备工作
1)使用以下命令查看远程主机的共享目录:
# showmount -e 10.31.81.160
Export list for 10.31.1.8160:
/opt/nfs *
2)挂载NFS服务器的共享文件夹到源服务器“/opt/kvm_data”目录:
# mkdir /opt/kvm_data
# mount -t nfs 10.31.81.160:/opt/nfs /opt/kvm_data/
3)df查看挂载:
10.31.81.160:/opt/nfs 55G 7.6G 45G 15% /opt/kvm_data/
4)克隆一台虚拟机用于迁移实验
# virt-clone -o generic -n generic_migrate -f /opt/kvm_data/generic_migrate.img
5.2.2 目标服务器准备工作
1)挂载NFS服务器的共享文件夹到目标服务器本地“/opt/kvm_data”目录:
# mkdir /opt/kvm_data
# mount -t nfs 10.31.81.160:/opt/nfs /opt/kvm_data/
5.3.3 迁移过程-源服务器
1)通过virsh命令启动要迁移的虚拟机。
# virsh start generic_migrate //启动虚拟机
2)通过console登录到虚拟机控制命令行,执行top命令可以看到进程执行状态。
# virsh console generic_migrate // 进入虚拟机串口
3)执行以下迁移命令。
# virsh migrate --live --verbose generic_migrate qemu+ssh://10.3181.214/system tcp://10.31.81.214
虚拟机generic_migrate在迁移出去的过程中,状态有从“running”到“shut off”的一个改变。
5.2.4 迁移过程-目标服务器
1)在目标服务器上查询虚拟机状态,发现已经为“running”状态。
#virsh domstate --domain generic_migrate
2)通过console登录到虚拟机控制命令行,可以看到迁移之前执行“top”命令依然在运行。
#virsh console generic_migrate
3)将虚拟机内存状态保存为xml文件。
virsh dumpxml generic_migrate > /etc/libvirt/qemu/generic_migrate.xml
4)通过上面配置的文件重新定义虚拟机。
virsh define /etc/libvirt/qemu/generic_migrate.xml
迁移完成。
5.2.5 注意事项
a)基于libvirt的虚拟机动态迁移(nfs共享存储)迁移的只是虚拟机的状态而不是虚拟机的状态和配置文件,因此在目标服务器上还需要执行最后两个步骤迁移才是真正的完成。
b)最好迁移的服务器cpu品牌一样;
c)64位只能在64位宿主机间迁移,32位可以迁移32位和64位宿主机;
d)宿主机中的虚拟机名字不能冲突;
e)目的宿主机和源宿主机软件配置尽可能的相同,如 有相同的桥接网卡,资源池等;
至此,基于libvirt的虚拟机热迁移(nfs共享存储)已经完成。
推荐阅读
欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料
如开发者在使用飞腾产品有任何问题可通过在线工单联系我们
版权所有。飞腾信息技术有限公司 2023。保留所有权利。
未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。
商标声明
Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。
本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。