kvm虚拟机的在线迁移:
首先资源都在同一个服务器上进行设置也就是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