一、冷迁移和热迁移
1.KVM虚拟机的迁移有两种方法:
1、静态迁移(冷迁移):对于冷迁移,就是在虚拟机关闭状态下,将虚拟机的磁盘文件及.xml配置文件(这两个文件组成了一个虚拟机)复制到要迁移到的目标主机上,然后在目标主机上使用“virsh define *.xml”命令重新定义虚拟机即可。
2、动态迁移(热迁移):对于热迁移,比较常用,通常是这台服务器上正在跑着一些业务,而这些业务又不允许中断,那么就需要使用热迁移了,这篇博文将详细写出热迁移的步骤。
2.冷迁移
通常我们存放虚拟机磁盘的目录都是挂在的一个nfs文件系统的磁盘,而这个磁盘通常是LVM文件系统。所以需要进行冷迁移时,只要在目标主机上挂载这个nfs文件系统,就可以看到要迁移的那个虚拟机的磁盘文件,通常以.qcow2或.raw结尾的,然后,只需将虚拟机的.xml配置文件发送到目标服务器上,然后重新定义一下即可通过“virsh list –all”命令查看到迁移过来的虚拟机。
3.热迁移
如果源宿主机和目的宿主机共享存储系统,则只需要通过网络发送客户机的 vCPU 执行状
态、内存中的内容、虚机设备的状态到目的主机上。否则,还需要将客户机的磁盘存储发到目的主
机上。共享存储系统指的是源和目的虚机的镜像文件目录是在一个共享的存储上的。
在基于 共享存储系统 时,KVM 动态迁移的具体过程为:
1、迁移开始时,客户机依然在宿主机上运行,与此同时,客户机的内存页被传输到目的主机上。
2、QEMU/KVM 会监控并记录下迁移过程中所有已被传输的内页的任何修改,并在所有内存页都传输完成后即开始传输在前面过程中内存页的更改内容。
3、QEMU/KVM 会估计迁移过程中的传输速度,当剩余的内存数据量能够在一个可以设定的时间周期(默认 30 毫秒)内传输完成时,QEMU/KVM 会关闭源宿主机上的客户机,再将剩余的数据量传输到目的主机上,最后传输过来的内存内容在目的宿主机上恢复客户机的运行状态。
4、至此,KVM 的动态迁移操作就完成了。迁移后的客户机尽可能与迁移前一致,除非目的主机上缺少一些配置,比如网桥等。注意,当客户机中内存使用率非常大而且修改频繁时,内存中数据不断被修改的速度大于KVM能够传输的内存速度时,动态迁移的过程是完成不了的,这时候只能静态迁移。
4.迁移的注意事项
迁移前目标服务器的要求如下:
(1)最好迁移的服务器cpu品牌一样;
(2)64位只能在64位宿主机间迁移,32位可以迁移32位和64位宿主机;
(3)宿主机中的虚拟机名字不能冲突;
(4)目的宿主机和源宿主机软件配置尽可能的相同,如 有相同的桥接网卡,资源池等;
(5)两台迁移的主机 cat /proc/cpuinfo |grep nx 的设置是相同的NX,全名为“No eXecute”,即“禁止运行”,是应用在CPU的一种技术,用作把存储器区域分隔为只供存储处理器指令集,或只供数据使用。任何使用NX技术的存储器,代表仅供数据使用,因此处理器的指令集并不能在这些区域存储。这种技术可防止大多数的缓冲溢出,即一些恶意程序,把自身的恶意指令集放在其他程序的数据存储区并运行,从而把整台计算机控制。
二、冷迁移实战
1.准备环境
#IP地址:10.0.0.110 [root@kvm-test /opt]# yum install libvirt virt-install qemu-kvm -y [root@kvm-test /opt]# systemctl restart libvirtd.service [root@kvm-test /opt]# systemctl enable libvirtd.service [root@kvm-test /opt]# virsh list --all Id Name State ----------------------------------------------------
2.关闭被迁移的虚拟机
[root@kvm /opt]# virsh shutdown web01 Domain web01 is being shutdown [root@kvm /opt]# virsh list --all Id Name State ---------------------------------------------------- - web01 shut off
3.导出配置信息
[root@kvm /opt]# virsh dumpxml web01 > web01.xml
4.将磁盘格式转换为qcow2
[root@kvm /opt]# qemu-img convert -f raw -O qcow2 web01.raw web01.qcow2 [root@kvm /opt]# ll -rw-r--r-- 1 root root 1737818112 Jul 31 13:06 web01.qcow2
5.将磁盘文件和配置信息传送到另一台虚拟机
[root@kvm /opt]# scp -rp /opt/web01.qcow2 root@10.0.0.110:/opt root@10.0.0.110's password: web01.qcow2 100% 1657MB 39.7MB/s 00:41 [root@kvm /opt]# scp -rp /opt/web01.xml root@10.0.0.110:/opt root@10.0.0.110's password: web01.xml
6.导入配置
[root@kvm-test /opt]# virsh define /opt/web01.xml Domain web01 defined from /opt/web01.xml [root@kvm-test /opt]# virsh list --all Id Name State ---------------------------------------------------- - web01 shut off
7.启动并连接测试
[root@kvm-test /opt]# virsh start web01 Domain web01 started [root@kvm-test /opt]# virsh console web01 Connected to domain web01 Escape character is ^] CentOS Linux 7 (Core) Kernel 3.10.0-957.el7.x86_64 on an x86_64 kvm login: root Password: Last login: Thu Jul 30 21:55:35 on ttyS0 [root@kvm ~]# ls / bin data etc lib media opt root sbin sys usr boot dev home lib64 mnt proc run srv tmp var [c:\~]$ ssh 10.0.0.101 Connecting to 10.0.0.101:22... Connection established. To escape to local shell, press Ctrl+Alt+]. Last failed login: Fri Jul 31 01:18:09 EDT 2020 from 10.0.0.1 on ssh:notty There was 1 failed login attempt since the last successful login. Last login: Fri Jul 31 01:17:33 2020 [root@kvm ~]#
三、热迁移实战
1.环境准备
实现kvm虚拟机热迁移核心:共享存储,在这里使用的是NFS共享存储。
10.0.0.100==kvm01
10.0.0.110==kvm02
10.0.0.120==nfs服务器
2.nfs服务器部署
[root@nfs ~]# yum install -y nfs-utils rpcbind [root@nfs ~]# vim /etc/exports /opt 10.0.0.0/24(rw,sync,no_root_squash,no_all_squash) [root@nfs ~]# systemctl restart rpcbind [root@nfs ~]# systemctl restart nfs
3.kvm01部署
[root@kvm /opt]# yum install -y nfs-utils [root@kvm /opt]# showmount -e 10.0.0.120 Export list for 10.0.0.120: /opt 10.0.0.0/24 [root@kvm /opt]# [root@kvm /opt]# mkdir /data [root@kvm /opt]# mount -t nfs 10.0.0.120:/opt /data/ [root@kvm /opt]# df -h [root@kvm /opt]# cd /data/ [root@kvm /data]# cp -a /opt/web01.qcow2 ./ [root@kvm /data]# ll total 1479880 -rw-r--r-- 1 qemu qemu 1737818112 Jul 31 14:01 web01.qcow2 [root@kvm /data]# mv web01.qcow2 web02.qcow2 [root@kvm /data]# virsh dumpxml web01 > /opt/web02.xml #修改配置文件 [root@kvm /data]# vim /opt/web02.xml <name>web02</name> 删除uuid和mac行 <driver name='qemu' type='qcow2'/> <source file='/kvm_disk/web04.qcow2'/> <driver name='qemu' type='qcow2'/> <interface type='bridge'> <source bridge='br0'/> #导入配置文件 [root@kvm /data]# virsh define /opt/web02.xml Domain web02 defined from /opt/web02.xml #启动虚拟机 [root@kvm /data]# virsh start web02 Domain web02 started
4.kvm02部署
[root@kvm-test /opt]# yum install -y nfs-utils [root@kvm-test /opt]# showmount -e 10.0.0.120 Export list for 10.0.0.120: /opt 10.0.0.0/24 [root@kvm-test /opt]# mkdir /data [root@kvm-test /opt]# mount -t nfs 10.0.0.120:/opt/ /data [root@kvm-test /opt]# vim /etc/hosts 10.0.0.100 kvm
5.开始热迁移
#配置hosts解析 [root@kvm /data]# vim /etc/hosts 10.0.0.110 kvm-test #热迁移命令 [root@kvm /data]# virsh migrate --live --verbose web02 qemu+ssh://10.0.0.110/system --unsafe root@10.0.0.110's password: Migration: [100 %]
四、virt-manager管理工具热迁移虚拟机
#1.安装图形界面 [root@kvm01 ~]# yum groupinstall -y "GNOME Desktop" #2.安装vnc的服务端 [root@kvm01 ~]# yum install -y tigervnc-server #3.给vnc设置个密码 [root@kvm01 ~]# vncpasswd Password: Verify: Would you like to enter a view-only password (y/n)? n A view-only password is not used #4.开启vnc [root@kvm01 ~]# vncserver :1 xauth: file /root/.Xauthority does not exist New 'kvm01:1 (root)' desktop is kvm01:1 Creating default startup script /root/.vnc/xstartup Creating default config /root/.vnc/config Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/kvm01:1.log [root@kvm01 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 16460/Xvnc tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 16460/Xvnc tcp6 0 0 :::5901 :::* LISTEN 16460/Xvnc tcp6 0 0 :::6001 :::* LISTEN 16460/Xvnc #安装管理工具 [root@kvm01 ~]# yum install -y virt-manager #安装ssh插件 [root@kvm01 ~]# yum install -y openssh-askpass