【写在前面】飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。点击这里开始你的技术升级之旅吧

image.png

本文分享至飞腾开发者平台《虚拟机迁移方案》

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命令,如图所示,用以验证虚拟机热迁移。

image.png

5.1.2 目标服务器准备工作

  1)创建与源服务器同目录的同名磁盘文件zjd_migrate.img,格式为qcow2,大小为20G。

qemu-img create -f qcow2 zjd_migrate.img 20G

image.png

  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和其他飞腾商标均为飞腾信息技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。

本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。


飞腾开发者
6 声望3 粉丝

飞腾开发者技术小助手,定期分享飞腾技术文档,助力开发者打怪升级。更多材料获取:[链接]