一:迁移概述

虚拟机的迁移是指在VMM(Virtual Machine Monitor)上运行的虚拟机系统,能够被转移到其它物理机上的VMM上运行

1.KVM迁移类型

静态迁移

静态迁移也叫做常规迁移、离线迁移(Offline Migration)就是在虚拟机关机的情况下从一台物理机迁移到另一台物理机;因为虚拟机的文件系统是建立在虚拟机镜像上,所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到外一台物理机上 如果要保存虚拟机迁移之前的状态,在迁移之前将虚拟机暂停,然后拷贝状态至目的主机,最后在目的主机重建虚拟状态,恢复执行 这种方式的迁移过程需要停止虚拟机的运行,从用户角度看,有明确的一段停机时间,这段时间虚拟机上的服务不可用,但这种迁移方式简单易用,适用于对可用性的要求不高的场合

共享存储的动态迁移

动态迁移(Live Migration)也叫做在线迁移(Online Migration)就在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程,该过程不会对最终用户造成明显影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级 与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间,迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机己经具备了运行虚拟机系统的必要资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继续运行 对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对于用户来说是透明的,因此动态迁移适用于对虚拟机服务可用性要求很高的场合 目前主流的动态迁移工具,VMware的VMotion,Citrix的XenMotion,他们都依赖于物理机采用的共享存储,因而在迁移时只需要进行虚拟机系统内存执行状态的迁移,从而获得较好的迁移性能

KVM动态迁移与性能优化_vim


​图上中所示的动态迁移,为了缩短迁移时间,源主机和目的主机采用NFS共享存储;这样,动态迁移只需要考虑虚拟机系统内存执行状态的迁移,从而获得较好的性能

本地存储的动态迁移

动态迁移基于共享存储设备,为的是加速迁移的过程,尽量减少宕机时间,但是在某些情况下需要进行基于本地存储的虚拟机的动态迁移,这就需要存储块动态迁移技术,简称块迁移

​比如某些服务器没有使用共享存储,而且迁移的频率很小,虚拟机上的服务对迁移时间的要求不严格,则可以使用存储块动态迁移技术;尽管共享存储能够提高和系统的稳定性,对于中小型企业仅仅为了加快迁移速度而配置昂贵的存储设备,性价比不高 在集中式共享外部存储的环境下,基于共享存储的迁移技术在这种场合下会受到限制,虚拟机迁移到目的主机后,不能再访问其原有的外存设备 为拓宽动态迁移技术的应用范围,有必要实现一个包括虚拟机外存迁移在内的全系统动态迁移方案,使得在采用分散式本地存储的计算机集群环境下,仍然能够利用迁移技术转移虚拟机环境,并且保证迁移过程中虚拟机系统服务的可用性

KVM动态迁移与性能优化_IP_02


​上图相比较基于共享存储的动态迁移,数据块动态迁移需要同时迁移虚拟机磁盘镜像和虚拟机系统内存,延长了迁移时间,在迁移性能上会大打折扣

KVM静态迁移

主机

系统

IP                 网卡



IP

源主机

centos7

192.168,100.10 vmnet1




目标主机

centos7

192.168.100.20 vmnet2




环境准备(源主机)

KVM动态迁移与性能优化_共享存储_03

环境准备(目标主机)

KVM动态迁移与性能优化_vim_04

静态迁移

源主机

迁移前,需将需要迁移虚拟机关机
[root@kvm-source ~]# virsh shutdown centos6.5

域5被关闭

[root@kvm-source ~]# virsh list --all
Id名称                         状态
----------------------------------------------------
2 centos6.5 running

[root@kvm-source ~]# scp /kvm/store/Centos6.5 192.168.100.20:/kvm/store/


KVM动态迁移与性能优化_共享存储_05

[root@kvm-source ~]# scp /etc/libvirt/qemu/Centos6.5.xml root@192.168.100.20:/etc/libvirt/qemu/     //将源主机虚拟机XML配置文件拷贝到目标主机的/etc/libvirt/qemu/目录下

KVM动态迁移与性能优化_共享存储_06

[root@kvm-source ~]# scp /kvm/iso/CentOS-6.7-x86_64-bin-DVD1.iso ​​root@192.168.100.20​​:/kvm/iso/      //将源主机虚拟机镜像文件拷贝拷贝到目标主机的/kvm/iso/目录下

KVM动态迁移与性能优化_vim_07

[root@kvm-bak ~]# virsh define /etc/libvirt/qemu/Centos_6.5.xml

KVM动态迁移与性能优化_IP_08

[root@kvm-bak ~]# virsh list --all            //验证是否成功添加虚拟机

KVM动态迁移与性能优化_IP_09

KVM动态迁移与性能优化_共享存储_10

三、案例:KVM基于共享存储的动态迁移

迁移拓补图

KVM动态迁移与性能优化_vim_11

主机

系统

IP            网卡

源主机

Centos7

192.168.100.10   vmnet1

目标主机

Centos7

192.168.100.20   vmnet2


主机

系统

IP

网卡

NFS

Centos7

192.168.100.30

vmnet1

1.环境准备(NFS)

​[root@nfs ~]# hostnamectl set-hostname NFS
[root@nfs ~]# systemctl disable firewalld &&systemctl stop firewalld
[root@nfs ~]# setenforce 0
[root@nfs ~]# vim /etc/hosts


192.168.100.10 KVM1
192.168.100.20 KVM2
192.168.100.30 NFS

安装NFS

[root@nfs ~]# yum -y install nfs-utils rpcbind      //安装NFS软件包
[root@nfs ~]# systemctl enable nfs      //开机自启nfs服务


[root@nfs ~]# systemctl enable rpcbind      //开机自启rpcbind服务

配置NFS

​[root@nfs ~]# vim /etc/exports

/kvm_share *(rw,sync,no_root_squash)
[root@nfs ~]# mkdir /kvm_share

[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs     //启动nfs服务

[root@nfs ~]# showmount -e 192.168.100.30 //查看NFS共享信息

2.环境准备(源主机)

· 安装KVM基础环境以及网络桥接配置,略 参见..\2-KVM架构与管理\KVM架构与管理.docx​​

​更改主机名,并且配置hosts信息

​[root@kvm1 ~]# hostnamectl set-hostname KVM1

[root@kvm1 ~]# vim /etc/hosts

192.168.100.10 kVM1
192.168.100.20 KVM2
192.186.100.30 NFS

创建存储池(源主机)

解决:解决问题思路:
安装
安装
确认一下x11是否开启了转发的功能!
grep X11Forwarding –color /etc/ssh/sshd_config
#X11Forwarding no
X11Forwarding yes
X11Forwarding no
查看一下是否安装了这些包!
rpm -qa | grep xorg-x11
xorg-x11-xauth-1.0.2-7.1.el6.x86_64
xorg-x11-xinit-1.0.9-14.el6.x86_64
xorg-x11-server-utils-7.5-13.el6.x86_64
xorg-x11-font-utils-7.2-11.el6.x86_64
xorg-x11-drv-ati-firmware-7.1.0-3.el6.noarch
然后在查看一下,$DISPLAY是否有参数;如果没有的话就需要自己手动添加一个!
12345
echo $DISPLAY 如果返回结果是空行的话,那就是表明没有设置display
DISPLAY=$yourserver_ip 这个写服务器ip地址!
export DISPLAY
echo $DISPLAY
localhost:10.0
再次运行,就可以打开了

双击QEMU/KVM,选择”存储”192选项卡”,然后单击”+”按钮新建存储池

KVM动态迁移与性能优化_IP_12


KVM动态迁移与性能优化_IP_13

根据提示输入存储池名称,如share_kvm,选择磁盘”Type”为netfs

KVM动态迁移与性能优化_共享存储_14

指定NFS服务器参数,挂载到本地/kvm目录

KVM动态迁移与性能优化_IP_15

KVM动态迁移与性能优化_共享存储_16


KVM动态迁移与性能优化_vim_17

新建存储卷(源主机)

KVM动态迁移与性能优化_vim_18

设置新建存储卷取名并指定卷最大容量与分配容量

KVM动态迁移与性能优化_共享存储_19

KVM动态迁移与性能优化_共享存储_20


新建虚拟机(源主机)

KVM动态迁移与性能优化_vim_21


指定新建虚拟机名称为”Centos_6.5”,并指定从本地或光盘中选择镜像安装系统(提前上传镜像文件)

KVM动态迁移与性能优化_共享存储_22

KVM动态迁移与性能优化_vim_23

选择从光盘中安装系统,并指定发行版和系统

KVM动态迁移与性能优化_共享存储_24

指定新建虚拟机内核和CPU数值

KVM动态迁移与性能优化_vim_25


选择使用存储位置


KVM动态迁移与性能优化_共享存储_26


KVM动态迁移与性能优化_vim_27

立即更改虚拟机配置

KVM动态迁移与性能优化_vim_28

宿主机开机时自动启动该虚拟机

KVM动态迁移与性能优化_共享存储_29

键盘布局为宿主机布局

KVM动态迁移与性能优化_IP_30


KVM动态迁移与性能优化_vim_31

开始引导安装系统(其余硬件调整和VMware使用差不多,这里不再阐述)

KVM动态迁移与性能优化_共享存储_32

KVM动态迁移与性能优化_vim_33

2.环境准备(目标主机)

更改主机名,并且配置hosts信息

​[root@kvm2 ~]# hostnamectl set-hostname KVM2

[root@kvm2 ~]# vim /etc/hosts

192.168.100.10 kVM1
192.168.100.20 KVM2
192.186.100.30 NFS

创建存储池(目标主机)

​[root@kvm2 ~]# mkdir -pv /kvm      //新建磁盘存储挂载目录

[root@kvm2 ~]# virt-manager //运行虚拟机管理软件

双击QEMU/KVM,选择”存储选项卡”,然后单击”+”按钮新建存储池

KVM动态迁移与性能优化_共享存储_34

KVM动态迁移与性能优化_共享存储_35

根据提示输入存储池名称,如share_kvm,选择磁盘”Type”为netfs

KVM动态迁移与性能优化_IP_36

指定NFS服务器参数,挂载到本地/kvm目录

KVM动态迁移与性能优化_IP_37

KVM动态迁移与性能优化_vim_38


KVM动态迁移与性能优化_vim_39

3.共享存储动态迁移

KVM动态迁移与性能优化_IP_40


KVM动态迁移与性能优化_共享存储_41

报错·:如果出现提示you need to install openssh-askpass or similar to connect to this host

​解决办法两种

(1)安装openssh-askpass(源和目标主机都需要安装)
(2)或者输入命令:virt-manager --no-fork 命令行输入密码

​输入目标主机root密码

KVM动态迁移与性能优化_vim_42


连接完毕

KVM动态迁移与性能优化_IP_43

KVM动态迁移与性能优化_共享存储_44

指定要迁移到目标主机的地址

KVM动态迁移与性能优化_共享存储_45

KVM动态迁移与性能优化_共享存储_46

迁移中

KVM动态迁移与性能优化_vim_47

KVM动态迁移与性能优化_vim_48