kvm虚拟机的在线迁移:

kvm 磁盘热迁移 kvm在线迁移_xml

首先资源都在同一个服务器上进行设置也就是A,A上有123456789个虚拟机,但是受困于硬件A不能同时开启那么多虚拟机。
1、于是先将9个虚拟机分发到集中存储的NFS上
2、再将24684个虚拟机分发到B上
3、然后NFS挂载并覆盖A原来存放9个虚拟机的目录,变为NFS上的9个。
4、NFS继续挂载B,覆盖B原来的4个变为NFS的9个。
A 启动13579 B启动2468。
当NFS出故障了。那么AB只需要冲洗启动原来被覆盖的虚拟机就可以保证继续运行。
5、如果还不够,就要在加入C服务器,NFS挂载直接使用,AB上先关机,然后C上再开机,注意,这时他们都用的NFS上的文件,同一个虚拟机文件,不能在A上开启又在B上开启。

6、如果有需求必须在线迁移,那么要用到这个命令。

virsh migrate --live --unsafe --persistent UAT-MySQLB qemu+tcp://root@172.16.14.7:16509/system

UAT-MySQLB   虚拟机名字
后边的是IP 
system固定写法

就能在开机状态下进行迁移了。

宿主机1:172.16.0.29
宿主机2:172.16.14.7
NFS:172.16.0.30

虚拟机:
存储文件,保存在NFS上。
在宿主机本地,还有一份存储文件。

172.16.0.29:
/kvm 15个虚拟机
172.16.0.29 8个 /kvm 有8个存储文件
172.16.14.7 7个 /kvm 有7个存储文件

NFS的共享目录,挂载到 14.7和0.29 /kvm 上
共享目录里,有15个存储文件。

如果存储节点故障,虚拟机就死了。
因为宿主机本地有一份虚拟机的存储文件,直接重启宿主机,启动虚拟机的初始存储文件,再将数据导入。

两台宿主机,主机名要不一致,写好/etc/hosts!!!

[root@kvm29 ~]# vim /etc/hosts
172.16.0.29 kvm29.up.com    kvm29
172.16.14.7 kvm7.up.com     kvm7
[root@kvm29 ~]# scp /etc/hosts 172.16.14.7:/etc/

【1】NFS

[root@NFS ~]# yum install -y nfs-utils
#安装
[root@NFS ~]# fdisk /dev/sda
[root@NFS ~]# partx -a /dev/sda
#分区
[root@NFS ~]# pvcreate /dev/sda3
[root@NFS ~]# vgcreate vgkvm /dev/sda3
[root@NFS ~]# lvcreate -L 50G -n lvkvm vgkvm
[root@NFS ~]# lvcreate -L 1G -n xml vgkvm
[root@NFS ~]# mkfs.xfs /dev/vgkvm/lvkvm
[root@NFS ~]# mkfs.xfs /dev/vgkvm/xml
#做文件系统
[root@NFS ~]# vim /etc/fstab
/dev/vgkvm/lvkvm   /nfs/qcow2  xfs defaults    0 0
/dev/vgkvm/xml	   /nfs/xml    xfs defaults    0 0

[root@NFS ~]# mkdir -p /nfs/{qcow2,xml}
[root@NFS ~]# mount -a
[root@NFS ~]# df -h | tail -2
/dev/mapper/vgkvm-lvkvm   50G  1.9G   49G   4% /nfs/qcow2
/dev/mapper/vgkvm-xml   1014M   33M  982M   4% /nfs/xml
#挂载
[root@NFS ~]# chmod 757 /nfs/qcow2/ /nfs/xml/
#给权限
[root@NFS ~]# vim /etc/exports
/nfs/qcow2  172.16.0.0/16(rw,sync,no_root_squash)
/nfs/xml    172.16.0.0/16(rw,sync,no_root_squash)
#NFS共享目录
[root@NFS ~]# systemctl start nfs
[root@NFS ~]# systemctl enable nfs
#重启服务

注意挂载选线一定要这样写(rw,sync,no_root_squash)
否则会因为属主和属组的问题导致不能在列表中显示,也不能启动,不能进行写操作。

【2】宿主机

[root@kvm29 ~]# yum install -y nfs-utils
[root@kvm7 ~]# yum install -y nfs-utils
[root@kvm29 ~]# showmount -e 172.16.0.30
Export list for 172.16.0.30:
/nfs/xml   172.16.0.0/16
/nfs/qcow2 172.16.0.0/16
[root@kvm7 ~]# showmount -e 172.16.0.30
Export list for 172.16.0.30:
/nfs/xml   172.16.0.0/16
/nfs/qcow2 172.16.0.0/16
[root@kvm29 ~]# mkdir /mnt/{qcow2,xml}
[root@kvm29 ~]# mount 172.16.0.30:/nfs/xml /mnt/xml/
[root@kvm29 ~]# mount 172.16.0.30:/nfs/qcow2 /mnt/qcow2/

保证虚拟机是关机状态!!!
[root@kvm29 /kvm]# cp UAT-MySQLB.qcow2 /mnt/qcow2/
[root@kvm29 /etc/libvirt/qemu]# cp UAT-MySQLB.xml /mnt/xml/
#分发文件
[root@kvm29 ~]# umount /mnt/qcow2/
[root@kvm29 ~]# umount /mnt/xml/
停止虚拟化服务:
[root@kvm29 ~]# systemctl stop libvirtd
[root@kvm7 ~]# systemctl stop libvirtd
挂载集中存储:
[root@kvm29 ~]# mount 172.16.0.30:/nfs/qcow2 /kvm/
[root@kvm29 ~]# mount 172.16.0.30:/nfs/xml /etc/libvirt/qemu

[root@kvm7 ~]# mount 172.16.0.30:/nfs/qcow2 /kvm/
[root@kvm7 ~]# mount 172.16.0.30:/nfs/xml /etc/libvirt/qemu
启动虚拟化服务:
[root@kvm29 ~]# systemctl start libvirtd
[root@kvm7 ~]# systemctl start libvirtd
[root@kvm29 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     UAT-MySQLB                     shut off
[root@kvm7 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     UAT-MySQLB                     shut off
	
	千万不能在2个宿主机启动同一个虚拟机。

编辑配置文件:

[root@kvm29 ~]# vim /etc/libvirt/libvirtd.conf 
 22 listen_tls = 0
 33 listen_tcp = 1
 45 tcp_port = "16509"
 55 listen_addr = "0.0.0.0"
 64 mdns_adv = 0
158 auth_tcp = "none"

[root@kvm29 ~]# scp /etc/libvirt/libvirtd.conf 172.16.14.7:/etc/libvirt/
[root@kvm29 ~]# vim /etc/sysconfig/libvirtd 
  9 LIBVIRTD_ARGS="--listen"


  [root@kvm29 ~]# scp /etc/sysconfig/libvirtd 172.16.14.7:/etc/sysconfig/
[root@kvm29 ~]# vim /etc/libvirt/qemu.conf
 66 vnc_listen = "0.0.0.0"


[root@kvm29 ~]# scp /etc/libvirt/qemu.conf 172.16.14.7:/etc/libvirt/
[root@kvm29 ~]# systemctl restart libvirtd
[root@kvm7 ~]# systemctl restart libvirtd
[root@kvm29 ~]# netstat -antp | grep 16509
tcp        0      0 0.0.0.0:16509           0.0.0.0:*     LISTEN      5385/libvirtd 

[root@kvm7 ~]# netstat -antp | grep 16509
tcp        0      0 0.0.0.0:16509           0.0.0.0:*     LISTEN      1950/libvirtd

开始迁移:

[root@kvm29 ~]# virsh start UAT-MySQLB
#开机
[root@NFS ~]# ping 172.16.0.52
#确定不丢包

迁移命令

[root@kvm29 ~]# virsh migrate --live --unsafe --persistent UAT-MySQLB qemu+tcp://root@172.16.14.7:16509/system

测试结果
在另一台机器上启动了。并且没丢包。

[root@kvm29 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     UAT-MySQLB                     shut off

[root@kvm7 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 3     UAT-MySQLB                     running