kvm虚拟机冷迁移与热迁移

冷迁移

原理

对于静态迁移,你可以在宿主机上保存一个完整的客户机镜像快照,然后在宿主机中关闭或 者暂停该客户机,然后将该客户机的镜像文件复制到另一台宿主机中,使用在源主机中启动该客户 机时的命令来启动复制过来的镜像。

1.先关闭虚拟机

2.备份迁移xml文件

virsh dumpxml test1.xml > /path

3.创建与源主机相同的池目录

4.将磁盘复制到目标主机池目录下

virsh domblklist  domain  //查看虚拟机磁盘位置

5.复制xml文件到目标主机的/etc/libvirt/qemu/

6.重新定义虚拟机即可

virsh define test1.xml

热迁移

原理

如果源宿主机和目的宿主机共享存储系统,则只需要通过网络发送客户机的 vCPU 执行状 态、内存中的内容、虚机设备的状态到目的主机上。否则,还需要将客户机的磁盘存储发到目的主 机上。共享存储系统指的是源和目的虚机的镜像文件目录是在一个共享的存储上的。

动态迁移具体过程:

1、迁移开始时,客户机依然在宿主机上运行,与此同时,客户机的内存页被传输到目的主机上。 2、QEMU/KVM 会监控并记录下迁移过程中所有已被传输的内存页的任何修改,并在所有内存页都传 输完成后即开始传输在前面过程中内存页的更改内容。 3、QEMU/KVM 会估计迁移过程中的传输速度,当剩余的内存数据量能够在一个可以设定的时间周期 (默认 30 毫秒)内传输完成时,QEMU/KVM 会关闭源宿主机上的客户机,再将剩余的数据量传输 到目的主机上,最后传输过来的内存内容在目的宿主机上恢复客户机的运行状态。 4、至此,KVM 的动态迁移操作就完成了。迁移后的客户机尽可能与迁移前一致,除非目的主机上 缺少一些配置,比如网桥等。

具体实施步骤

环境准备:

源主机 192.168.1.100

nfs服务器 192.168.1.101

目标主机 192.168.1.102
大致过程
两台虚拟机环境基本kvm环境,搭建同网段网桥,主机名解析,秘钥对相互配对,防火墙seliunx都关闭同时挂载上nfs目录,nfs也得关闭防火墙,seliunx,然后再进行迁移。

1.统一关闭防火墙,selinux,并设置主机名 分别为test1,nfs,test2

2.源主机与目标主机ssh秘钥对相互配对

ssh-key -t rsa 
ssh-copy-id root@192.168.1.102/100

3.主机名解析

vi /etc/hosts
192.168.1.100 test1
192.168.1.102 test2
scp /etc/hosts root@192.168.1.102:/etc/hosts

4.搭建nfs服务器

yum -y install rpcbind nfs-utils
mkdir /nfs
vi /etc/exports
/nfs *(rw,sync,no_root_squash)
systemctl start rpcbind
systemctl start nfs

5.源主机创建池,磁盘

先试下能否挂载
virsh pool-define-as nfspool --type netfs --source-host 192.168.1.101 --source-path /nfs --target /mykvm/nfspool/
virsh pool-build nfspool 
virsh pool-start nfspool
virsh pool-autostart nfspool
virsh vol-create-as nfspool test01 5G --format qcow2

6.创建虚拟机,搭建一服务

virt-install -n test01 -r 512 --vcpus 1 -l /mykvm/iso/centos7.iso --disk /mykvm/nfspool/test01 --nographics -x 'console=ttyS0'

7.搭建网桥

cp ifcfg-ens33 ifcfg-virbr1

vi ifcfg-virbr1
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.1.100
GATEWAY=192.168.1.254
DNS1=8.8.8.8
NAME=virbr5
DEVICE=virbr5
ONBOOT=yes

vi ifcfg-ens33
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=virbr5
重启网卡即可

8.搭建一个服务,以httpd服务为例

为虚拟机配置网桥
virsh attach-interface test1 --type bridge --sourve virbr1 --current
yum -y install httpd
echo "hello" > /var/www/html/index.html
systemctl start httpd

目前为止环境搭建完成,然后热迁移开始

9.为目标主机配置网桥

scp /etc/sysconfig/network-scrips/ifcfg-virbr1 root@test2:/etc/sysconfig/network-scrips/ifcfg-virbr1 
改一下地址不能冲突,再去修改一下ifcfg-ens33

10.目标主机创建相同池路径,挂载nfs

mkdir -p /mykvm/nfspool
virsh pool-define-as nfspool --type netfs --source-host 192.168.1.101 --source-path /nfs --target /mykvm/nfspool/
virsh pool-build nfspool 
virsh pool-start nfspool
virsh pool-autostart nfspool

11.开始迁移

virsh migrate test1 qemu+ssh://192.168.1.102/system --live --unsafe --verbose

12.迁移前可以一直ping虚拟机看看是否中断