KVM实战之(九)kvm平台<==>kvm平台 虚拟机迁移

实验大版本:centos7系统
原理

上图:第一个是原生数据直接传递(是在两个宿主机的Hypervisor层,进行数据传输,可根据不同的环境,考虑是否使用加密,加密会增大开销)
上图:第二个是libvirt tunnelled隧道化传递(可实现很强的加密功能,但是多了Hypervisor层到libvirt层的传递)

推荐文档:http://libvirt.org/migration.html

第一:静态迁移(静态迁移,先确认需要迁移的虚拟机处于关闭状态)

注意事项:

    1:虚拟机需要关机,
    2:新宿主机平台用于存放虚拟机的路径需要相同,若不同,需要进行更改路径(更改使用virsh edit 修改xml中的路径,或则新宿主机存放路径

场景一:同一宿主机内迁移(由于前期磁盘规划不到位,需要迁移到别的挂载点)

    1:关闭虚拟机后,将磁盘文件移动另一个挂载点上
    2:若是不涉及xml的变动,则直接修改xml中关于disk的路径信息,启动即可
    3:若涉及xml的位置变动,需要修改xml中关于disk的路径信息后,用新的xml文件路径进行注册虚拟机

场景二:不同宿主机之间进行虚拟机迁移

案例:两台kvm平台:kvm-pt1和kvm-pt2,要求将kvm-pt1上的kvm-web01迁移到kvm-pt2上
方法一:导入现有磁盘(要求:将kvm-pt1上的kvm-web01虚拟机迁移到kvm-pt2)

#第一:手工迁移xml文件
    virsh dumpxml kvm-web01 > ./kvm-web01.xml   #在kvm-pt1上导出kvm-web01虚拟机的xml文件
    scp ./kvm-web01.xml root@kvm-pt2:/etc/libvirt/qemu/ #将xml文件迁移到kvm-pt2上的/etc/libvirt/qemu/目录里

#第二:手工迁移磁盘
    virsh domblklist kvm-web01          #列出虚拟机所有的磁盘块镜像
[root@KVM-master ~]# virsh domblklist kvm-web01
目标     源
------------------------------------------------
vda        /kvm-hosts/kvm-web01.qcow2
hda        -

    scp /kvm-hosts/kvm-web01.qcow2 root@kvm-pt2:/kvm-hosts/ #将磁盘镜像文件复制到kvm-pt2上

#第三:切换到kvm-pt2机器上,重新注册虚拟机
    virsh define /etc/libvirt/qemu/kvm-web01.xml    #重新定义虚拟机
    virsh list --all        #查看虚拟机
    virsh start kvm-web01       #启动虚拟机

方法二:使用migrate命令迁移(bug之处在于标准版不能迁移磁盘文件,只能迁移xml文件,升级企业版ev就可以解决)

#第一:在kvm-pt1上使用migrate命令迁移xml文件(迁移后,虚拟机已经在kvm-pt2进行注册了,只是还没有磁盘文件)
    virsh migrate --domain kvm-web01 --desturi qemu+ssh://root@kvm-pt2/system --offline  --persistent

#第二:手工迁移磁盘文件
    scp /kvm-hosts/kvm-web01.qcow2 root@kvm-pt2:/kvm-hosts/

#第三:切换到kvm-pt2上,查看虚拟机,并启动(不需要重新注册虚拟机)
    virsh list --all        #查看虚拟机
    virsh start kvm-web01       #启动虚拟机

第二:动态迁移(服务可用,只是有特别短暂的静默,其实就是基于共享磁盘镜像,迁移实时内存状态,)

在线迁移要求

    1:确保两台主机都启动了libvirtd服务
    2:迁移的平台和版本符合兼容性要求
    3:正确配置防火墙,允许所需端口的通信
    4:两个主机在相同的虚拟网络
    5:如果是共享存储,建议在两个主机上mount的路径一致

场景三:基于共享存储的在线迁移

实验环境搭建

#第一:在三台机器上创建相同目录
    mkdir /iso /kvm-hosts

#第二:在三台机器上安装nfs服务
    yum -y install nfs-utils rpcbind

#第三:将kvm-nfs机器的iso,及kvm-hosts目录共享出来,供kvm-pt1和kvm-pt2使用
    vim /etc/exports
/iso  *(rw,async,no_root_squash)
/kvm-hosts  *(rw,async,no_root_squash)

#第四:将kvm-nfs的nfs服务启动并加入开机自起(注意关闭防火墙)
    systemctl start nfs
    systemctl start rpcbind
    systemctl enable nfs
    systemctl enable rpcbind

#第五:分别在kvm-pt1和kvm-pt2上测试,是否能查看到kvm-nfs上共享出来的可用挂载点
    showmount -e 172.168.1.33

#第六:第五成功后,就可以将kvm-nfs上共享出来的目录设置为开机挂载到kvm-pt1和kvm-pt2上的对应目录上
    kvm-pt1和kvm-pt2都要进行如下操作
    vim /etc/rc.loacl

mount -t nfs 172.168.1.33:/iso  /iso
mount -t nfs 172.168.1.33:/kvm-hosts  /kvm-hosts

#第七:在kvm-pt1上创建一台虚拟机,并安装完成

qemu-img create -f qcow2 /kvm-hosts/kvm-web01.qcow2 10G

virt-install --name kvm-web01 --virt-type kvm --ram 512 --cdrom=/iso/CentOS-7-x86_64-DVD-1611.iso --disk path=/kvm-hosts/kvm-web01.qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7

#第八:放行selinux对nfs的限制(不放行,无法启动虚拟机,或则直接关闭selinux)
    setsebool -P virt_use_nfs 1

实现迁移
方法一:使用virsh migrate 命令行进行迁移(virsh migrate --help查看帮助文档)

#第一:在kvm-pt1上将kvm-web01在线迁移到kvm-pt2上
    virsh migrate kvm-web01 qemu+ssh://root@kvm-pt2/system --live --unsafe --persistent --undefinesource

    #下面是,指定使用专用的迁移URI,进行迁移,迁移流量将走上面规划的迁移网
    virsh migrate kvm-web01 qemu+ssh://root@kvm-pt2/system --migrateuri tcp://10.0.0.32 --live --unsafe --persistent --undefinesource

#第二:查看运行状态
    virsh list --all    #在kvm-pt1上发现已经没有kvm-web01虚拟机了,在kvm-pt2上查看,就有,并且是运行的的

方法二:使用virtual manager 图形化迁移
1:首先连接两台kvm宿主机

2:将kvm-web01从kvm-pt1不安全的永久的迁移至kvm-pt2

3:查看状态

方法三:使用webvirtmgr进行迁移(之前做的实验,与上的环境地址规划不一样,但效果一样)




场景四:基于本地存储的在线迁移(有坑,下面会说怎么填)

需要满足的要求:

1:要使用virsh 的--copy-storage-all
2:需要有实时存储迁移(块迁移)支持
    标准的RHEL/Centos7的qemu-kvm不支持
    oVirt或RHEV支持
        yum install centos-release-qemu-ev
        yum install qemu-kvm-ev     #ev表示企业级,(安装它会替换原本的qemu-kvm组件为qemu-kvm-ev)

升级前的软件版本
[root@kvm-pt1 kvm-hosts]# rpm -qa |grep kvm
qemu-kvm-common-1.5.3-141.el7_4.2.x86_64
qemu-kvm-1.5.3-141.el7_4.2.x86_64
qemu-kvm-tools-1.5.3-141.el7_4.2.x86_64

升级后的软件版本(它会替换成ev版本的)
[root@kvm-pt1 kvm-hosts]# rpm -qa |grep kvm
qemu-kvm-common-ev-2.9.0-16.el7_4.8.1.x86_64
qemu-kvm-tools-1.5.3-141.el7_4.2.x86_64
qemu-kvm-ev-2.9.0-16.el7_4.8.1.x86_64

3:虚拟机要在存储池中
4:要求,两台宿主机存放虚拟机磁盘文件的路径也要相同

实现迁移
第一:尝试用virtual manager图形界面进行迁移(报错,路径下无磁盘)

第二:尝试使用virsh 的--copy-storage-all进行迁移(也报错,)

virsh # hostname
kvm-pt2
virsh # list
 Id    名称                         状态
----------------------------------------------------
 8     kvm-web01                          running

#先不加--copy-storage-all,会报错
virsh # migrate kvm-web01 qemu+ssh://root@kvm-pt1/system --live --persistent  --undefinesource
root@kvm-pt1's password: 
错误:Cannot access storage file '/kvm-hosts/web01.qcow2' (as uid:107, gid:107): No such file or directory

#加--copy-storage-all,也会报错
virsh # migrate kvm-web01 qemu+ssh://root@kvm-pt1/system --live --persistent  --undefinesource --copy-storage-all
root@kvm-pt1's password: 
错误:Cannot access storage file '/kvm-hosts/web01.qcow2' (as uid:107, gid:107): No such file or director

第三:升级qemu-kvm-ev,并使用--copy-storage-all进行迁移(如果没有相同的kvm-hosts存储池,也会报错,只需在另一台上创建相同的目录作为存储池即可)(等待时间会很长,但是不会报错了)

virsh # migrate kvm-web01 qemu+ssh://root@kvm-pt1/system --live --persistent  --undefinesource --copy-storage-all
root@kvm-pt1's password: 

virsh # hostname
kvm-pt2

virsh # list
 Id    名称                         状态
----------------------------------------------------

#注意也可以使用专用的迁移网络
virsh migrate kvm-web01 qemu+ssh://root@kvm-pt1/system --live --persistent  --undefinesource  --migrateuri tcp://10.0.0.31 --copy-storage-all

第四:查看虚拟机运行位置(成功迁移)

声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/256.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2022/12/27作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录