一、KVM虚拟机迁移分为动态(热迁移)和静态两种

    静态迁移就是复制虚拟机的镜像文件到另外的一台KVM主机上,然后通过define重新定义出该虚拟机。操作简单,一般用于更换KVM主机时使用。

    动态迁移则是基于共享存储系统,将虚拟机在不中断服务的情况下进行迁移。动态迁移过程:1、迁移开始时,客户机依然在宿主机上运行,与此同时,客户机的内存页被传输到目的主机上2、QEMU/KVM会监控并记录下迁移过程中所有己被传输的内存页的任何修改

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

虚拟机动态迁移
#环境:nfs服务器、kvm_host01、kvm_host02
#步骤:
#搭建nfs服务器
#两台kvm个添加一块网卡
#在kvm_host01上创建netfs存储,并安装虚拟机,拍摄快照
#在kvm_host02上部署环境
#在kvm_host02上开始迁移
#注意:应当在kvm主机上关闭selinux,开放迁移使用的端口;nfs部署时应当开放MOUNT端口(一般为tcp892)以及udp111、tcp2049端口
首先:nfs服务器搭建
yum -y install rpcbind nfs-utils
mkdir /nfs_share
echo '/nfs_share 192.168.159.*(rw,no_root_squash)' >> /etc/exports
sed -i 's/#MOUNTD_PORT=892/MOUNTD_PORT=892/' /etc/syconfig/nfs
systemctl start rpcbind && systemctl enable rpcbind
systemctl start nfs && systemctl enable nfs
firewall-cmd --add-port=111/udp
firewall-cmd --add-port=2049/tcp
firewall-cmd --add-port=892/tcp
然后:在kvm_host01上
hostnamectl set-hostname kvm_host01
cat >> /etc/hosts << EOF
>192.168.159.148 kvm_host01
>192.168.159.149 kvm_host02
>EOF
nmcli con add con-name br5 type bridge ifname br5
nmcli con add con-name slave_br5 type bridge-slave ifname master br5 autoconnect yes
nmcli con delete `nmcli con show |grep ens37 |awk '{print $4}'`
nmcli con up slave-br5
mkdir /nfs
virsh pool-define-as nfspool netfs --source-host 192.168.159.151 --source-path /nfs_share --target /nfs_share
virsh pool-build nfspool
virsh pool-start nfspool
virsh pool-autostart nfspool
virsh vol-create-as nfspool vm01_nfsvol 20G
virt-install -n vm01 -r 1024 --vcpus 1 -l /kvmdir/iso/centos7.iso --disk path=/nfs_share/vm01_nfsvol --accelerate --nographics -x 'console=ttyS0' --network bridge=br5
然后:在kvm_host02上
hostnamectl set-hostname kvm_host02
cat >> /etc/hosts << EOF
>192.168.159.148 kvm_host01
>192.168.159.149 kvm_host02
>EOF
nmcli con add con-name br5 type bridge ifname br5
nmcli con add con-name slave_br5 type bridge-slave ifname master br5 autoconnect yes
nmcli con delete `nmcli con show |grep ens37 |awk '{print $4}'`
nmcli con up slave-br5
mkdir /nfs
virsh pool-define-as nfspool netfs --source-host 192.168.159.151 --source-path /nfs_share --target /nfs_share
virsh pool-build nfspool
virsh pool-start nfspool
virsh pool-autostart nfspool
最后开始迁移
virsh migrate vm_centos7 --live --unsafe --verbose qemu+ssh://192.168.159.149/system
迁移时可能会出现的故障
1、error: unable to connect to server at 'kvm_host02':No route to host
原因:免密登陆错误,无法建立连接
解决方法:检查你的ssh连接
2、error: Failed to open file '/nfs_share/vm01_nfsvol':Input/Output error
原因:一般为存储错误,可能是共享存储的挂载出现问题
解决方法:检查你的nfs配置,kvm主机和nfs之间的通信
3、error: internal error hostname on destination resoleved to localhost, but migration requires an FQDN
原因:域名解析的问题
解决方法:修改hosts文件
4、error: start domain vm1_nfs failed
error:internal error: process exited while connecting to monitor: 2018-07-20T11:58:24.264383Z qemu-kvm: -drive file=/mnt/vmnfs,format=qcow2,if=none,id=drive-virtio-disk0: could not open disk image /mnt/vmnfs: Could not open '/mnt/vmnfs': Permission denied
原因:selinux权限拒绝
解决方法:关闭selinux