实验大版本: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
第四:查看虚拟机运行位置(成功迁移)
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论