一、迁移方式

(一)  态迁

  虚拟机静态迁移就是虚拟机在关机状态下进行的迁移,拷贝虚拟机磁盘文件和配置文件至目标主机的迁移方式

(二)  动态迁移

  虚拟机动态迁移就是虚拟机在开机状态下进行的迁移,不影响虚拟机业务运行的迁移方式

二、实现方式

(一)  共享储存

  虚拟机的数据储存在共享储存上,迁移时只需要完成内存数据的迁移

(二)  非共享储存

  虚拟机的数据储存在本地,迁移时需要对镜像文件和内存数据同时迁移

三、迁移前准备

(一)  搭建NFS服务器

  1) 系统下创建共享文件夹,修改至最高权限

  2) 修改文件/etc/exports,添加如下内容

    /nfs *(rw)

    /nfs:创建的共享文件夹的路径及名称

    *:允许访问数量

    (rw):可执行操作

  3) 重启NFS服务

    Systemctl restart nfs

(二)  创建磁盘文件

  在NFS共享服务器中创建磁盘文件,操作如下(文件也需要赋予权限)

   

trueNas虚拟化迁移 虚拟机迁移策略_服务器

    

trueNas虚拟化迁移 虚拟机迁移策略_服务器_02

  

trueNas虚拟化迁移 虚拟机迁移策略_服务器_03

   

trueNas虚拟化迁移 虚拟机迁移策略_配置文件_04

   

trueNas虚拟化迁移 虚拟机迁移策略_xml_05

   

trueNas虚拟化迁移 虚拟机迁移策略_服务器_06

(三)  安装虚拟机

  安装虚拟机时选择在上一步中创建在NFS共享服务器中的磁盘

(四)  迁移检查

  1) NFS服务器配置(服务器开启成功,修改共享目录权限)

  2) 迁移主机挂载NFS服务器

  3) 关闭防火墙

  4) 主机设置selinux为disabled(setenforce 0重启生效)

  5) 开启libvirtd服务

    Systemcctl start libvirtd

四、迁移实例

(一)  基于共享储存

  1) 静态迁移-命令行

    迁移虚拟机时需要拷贝虚拟机配置文件和虚拟机磁盘文件至目标主机,源主机与目标主机需要有相同的目录结构

    *基于NFS共享储存的虚拟机,在源主机和目标主机同时挂载NFS共享储存,并拥有相同格式目录结构的前提下,仅拷贝虚拟机配置文件至目标主机即可,配置文件存放位置需要与源主机位置相同。

    a)      确认虚拟机状态

      virsh list --all

    b)      查看虚拟机磁盘位置(此处使用的是NFS共享储存,无需迁移磁盘文件,仅查询)

      virsh domblklist {vm-name}

    c)      导入虚拟机配置文件并拷贝至目标主机

      virsh dumpxml vm3 > /root/vm3.xml

      scp vm3.xml root@10.93.22.13:/etc/libvirt/qemu/

    d)      确认目标主机目录结构后定义注册虚拟机

      virsh define /etc/libvirt/qemu/vm3.xml

    e)      确认并开机

      virsh start vm3

      virsh console vm3

    f)       *迁移之后,两台主机都可以使用该虚拟机,但同时只能由一台使用,虚拟机在目标主机中处于开机状态时,原主机上无法使用该虚拟机,如原主机需要使用,需要将目标主机上的虚拟机关机即可。

    g)      如果想在主机中删除虚拟机,需要取消定义该虚拟机,并删除配置文件

      virsh undefine {vm-name} --nvram

      rm -rf /etc/libvirtd/qemu/vm3.xml

  2) 静态迁移-GUI

    不支持

  3) 动态迁移-命令行

    virsh migrate vm2 qemu+ssh://root@10.93.22.8/system --migrateuri tcp://10.93.22.8 --live --unsafe --persistent –undefinesource

     

trueNas虚拟化迁移 虚拟机迁移策略_配置文件_07

     

trueNas虚拟化迁移 虚拟机迁移策略_xml_08

    回迁

    virsh migrate vm2 qemu+ssh://10.93.20.37/sytem --migrateuri tcp://10.93.20.37 --live --unsafe --persistent --undefinesource

     

trueNas虚拟化迁移 虚拟机迁移策略_xml_09

     

trueNas虚拟化迁移 虚拟机迁移策略_trueNas虚拟化迁移_10

  4) 动态迁移-GUI

    GUI界面右键选择“migrate”

     

trueNas虚拟化迁移 虚拟机迁移策略_配置文件_11

    Adress填写目标主机地址,勾选“Allow unsafe”开始迁移

     

trueNas虚拟化迁移 虚拟机迁移策略_trueNas虚拟化迁移_12

(二)  基于非共享储存

  1) 静态迁移

    a)查询虚拟机配置文件和磁盘文件位置

    b)拷贝虚拟机配置文件和磁盘文件至目标主机,存放在相同的目录下

    c)定义注册虚拟机即可

  2) 动态迁移

    a)从源主机拷贝虚拟机磁盘文件至目标主机,存放在相同目录下

    b)虚拟机开机

    c)迁移

     virsh migrate --live --unsafe --persistent vm-cent qemu+ssh://root@10.93.22.14/system tcp://10.93.22.14

     --live                动态迁移

     --unsafe           跳过安全检查(允许不安全的操作)

     --persistent      添加参数后,迁移至目标主机中的虚拟机可持续存在;如果不添加这个参数,迁移至目标主机中的虚拟机不能关机,关机后虚拟机自动删除,如果要让虚拟机持续存在,可在迁移后再次从源主机拷贝一份虚拟机配置文件至目标主机,重新定义注册即可

     Vm-cent           准备迁移的虚拟机名称

五、常见报错信息分析

(一)  远程图形化管理工具打开失败

   

trueNas虚拟化迁移 虚拟机迁移策略_配置文件_13

  原因一:系统未安装或者未打开libvirtd服务

  原因二:系统未配置图形化管理工具,修改/etc/ssh/sshd_config配置文件,将X11Forwarding no改为X11Forwarding yes,保存退出后重启sshd服务。

(二)  虚拟机管理器链接失败

   

trueNas虚拟化迁移 虚拟机迁移策略_xml_14

  原因:没有安装openssh-askpass,Kylin_arm的操作系统中没有加载这个软件包

   

trueNas虚拟化迁移 虚拟机迁移策略_trueNas虚拟化迁移_15

  原因:libvirtd-4.5.0的源码中存在BUG,升级libvirtd版本即可

(三)  在NFS中创建磁盘文件失败

  原因:NFS服务器中的共享目录权限不足,创建磁盘文件后需要同步赋予权限

(四)  无法选择共享目录下的磁盘作为储存位置

   

trueNas虚拟化迁移 虚拟机迁移策略_服务器_16

  原因:NFS服务器中创建的磁盘文件无权限,修改NFS服务器共享目录中的磁盘文件权限即可

(五)  迁移虚拟机时提示目标服务器没有文件或者文件夹

   

trueNas虚拟化迁移 虚拟机迁移策略_配置文件_17

  原因:目标服务器未挂载NFS共享

(六)PCI设备添加失败

   

trueNas虚拟化迁移 虚拟机迁移策略_服务器_18

  原因:BIOS中未打开虚拟化配置

 

六、实际应用场景介绍

(一)  物理机硬件系统的维护、故障修改和升级,但是运行在这台物理机上的虚拟机不能管理,应为用户的重要服务器在虚拟机不断运行

(二)  物理机软件系统升级、打补丁,为了不影响上面运行的虚拟机,在升级和打补丁之前,需要把虚拟机迁移至其他物理机上

(三)  某物理机上的负载台太重,需要减少一些虚拟机来释放资源

(四)  在某台物理机上的虚拟机太多,导致负载过重,而其他的物理机上虚拟机太少,资源利用不足,做一下资源平衡