博文大纲:

一、KVM虚拟机迁移的方式
二、实现KVM虚拟机静态迁移
三、实现KVM虚拟机动态迁移

一、KVM虚拟机迁移的方式

KVM平台中的KVM虚拟机迁移分为以下两种:

(1)冷迁移(静态迁移)
我们存放虚拟机磁盘的目录都是挂在的一个nfs文件系统的磁盘,进行冷迁移时,只要在目标主机上挂载这个nfs文件系统,就可以看到要迁移的那个虚拟机的磁盘文件,通常以.qcow2或.raw结尾的,然后,只需将虚拟机的.xml配置文件发送到目标服务器上,然后重新定义一下迁移过来的虚拟机即可!

(2)热迁移(动态迁移)
如果源宿主机和目的宿主机共享存储系统,则只需要通过网络发送客户机的 vCPU 执行状态、内存中的内容、虚机设备的状态到目的主机上。否则,还需要将客户机的磁盘存储发到目的主机上。共享存储系统指的是源和目的虚机的镜像文件目录是在一个共享的存储上的。

基于共享存储系统,动态迁移的具体过程:
(1)迁移开始时,客户端依然在宿主机上运行,与此同时,客户机的内存页被传输到目的主机上;
(2)QEMU/KVM 会监控并记录下迁移过程中所有已被传输的内存页的任何修改,并在所有内存页都传输完成后即开始传输在前面过程中内存页的更改内容;
(3)QEMU/KVM 会估计迁移过程中的传输速度,当剩余的内存数据量能够在一个可以设定的时间周期(默认 30 毫秒)内传输完成时,QEMU/KVM 会关闭源宿主机上的客户机,再将剩余的数据量传输到目的主机上,最后传输过来的内存内容在目的宿主机上恢复客户机的运行状态;
(4)至此,KVM的动态迁移操作完成!迁移后的客户机尽可能与迁移前一致,除非目的主机上缺少一些配置,比如网桥等。注意,当客户机中内存使用率非常大而且修改频繁时,内存中数据不断被修改的速度大于KVM能够传输的内存速度时,动态迁移的过程是完成不了的,这时候只能静态迁移。

(3)注意事项

(1)迁移的服务器CPU品牌最好一致;
(2)64位只能在64位宿主机间迁移,32位可以迁移32位和64位宿主机;
(3)宿主机中的虚拟机名字不能冲突;
(4)目的宿主机和源宿主机软件配置尽可能相同;

(4)总结

**静态迁移:**
(1)复制镜像文件和虚拟机配置文件;
(2)重新定义虚拟机即可!

**动态迁移:**
(1)创建共享存储;
(2)两台KVM宿主机挂载共享存储;
(3)启动动态迁移;
(4)创建迁移后的虚拟配置文件;
(5)重新定义虚拟机;

二、实现KVM虚拟机静态迁移

(1)环境要求

* 一台KVM服务求A:IP地址:192.168.45.134
* 一台KVM服务器B:IP地址:192.168.35.137

(2)实现步骤

KVM服务器A的操作:

[root@KVM1 ~]# systemctl  stop firewalld.service 
[root@KVM1 ~]# setenforce 0
[root@KVM1 ~]# lsmod | grep kvm      //确认虚拟机支持kvm环境
kvm_intel             170181  3 
kvm                   554609  1 kvm_intel
irqbypass              13503  3 kvm
[root@KVM1 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     test01                         shut off

KVM服务器B的操作:

[root@KVM2 ~]# systemctl  stop  firewalld.service  
[root@KVM2 ~]# setenforce 0
[root@KVM2 ~]# lsmod  | grep kvm      //确认虚拟机支持kvm环境
kvm_intel             170181  0 
kvm                   554609  1 kvm_intel
irqbypass              13503  1 kvm
[root@KVM2 ~]# virsh  list --all       //确定当前没有KVM虚拟机
 Id    Name                           State
----------------------------------------------------
[root@KVM2 ~]# scp 192.168.45.134:/etc/libvirt/qemu/test01.xml /etc/libvirt/qemu    //复制KVMA的配置文件
The authenticity of host '192.168.45.134 (192.168.45.134)' can't be established.
ECDSA key fingerprint is d7:77:71:90:34:25:c0:ec:e0:b6:5c:cc:6b:44:93:7b.
Are you sure you want to continue connecting (yes/no)? yes           //确定
Warning: Permanently added '192.168.45.134' (ECDSA) to the list of known hosts.
[email protected]'s password:                                               //密码为KVMA主机的密码
test01.xml                                                                                            100% 3822     3.7KB/s   00:00   

[root@KVM2 ~]# scp 192.168.45.134:/kvm-vm/test01.raw /kvm-vm/
[email protected]'s password:                                      //密码为KVMA主机的密码
test01.raw                                                                                            100%   10GB  83.3MB/s   02:03   
[root@KVM2 ~]# ls /kvm-vm/
test01.raw  virtual-kvm.qcow2
[root@KVM2 ~]# ls /etc/libvirt/qemu
networks  test01.xmltest
[root@KVM2 ~]# cd /etc/libvirt/qemu/
[root@KVM2 qemu]# virsh  define test01.xml           
     定义域 test01(从 test01.xml)
    //根据配置文件生成虚拟机
Domain test01 defined from test01.xml

[root@KVM2 qemu]# virsh  list --all
 Id    Name                           State
----------------------------------------------------
 -     test01                         shut off

[root@KVM2 qemu]# virsh  start test01      //开启虚拟机
Domain test01 started

[root@KVM2 qemu]# virsh  list --all
 Id    Name                           State
----------------------------------------------------
 1     test01                         running
 注:正常启动表示正常,请自行配置

静态迁移迁移完成!

静态迁移其实没什么好说的,说白了,跟克隆其实差不多!
也就是说把配置文件和磁盘文件复制到KVMB上应用启动一下就完事了!

三、实现KVM虚拟机动态迁移

(1)环境要求

一台NFS服务器:IP地址:192.168.45.130.;
一台KVM服务器A:IP地址:192.168.45.134;
一台KVM服务器B:IP地址:192.168.45.137;

(2)实现步骤
NFS服务器的操作:


[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
//实验环境,简单起见关闭防火墙与SElinux
[root@localhost ~]# yum -y install nfs-utils rpcbind     注意:两台KVM都需要安装NFS
//安装NFS所需软件
[root@localhost ~]# mkdir /kvmshare          //创建共享目录
[root@localhost ~]# echo "/kvmshare  (rw,sync,norootsquash)" >> /etc/exports 
//配置共享目录的权限,共享的用户
//norootsquash:使其获取NFS服务器的root权限
[root@localhost ~]# systemctl start rpcbind           //启动远程传输控制服务
[root@localhost ~]# systemctl start nfs       //启动NFS共享服务
[root@KVM1 ~]# showmount -e 192.168.45.130
Export list for 192.168.45.130:
/kvmshare *

两台KVM进行验证:

[root@KVM1 ~]# showmount -e 192.168.45.130
Export list for 192.168.45.130:
/kvmshare *
[root@KVM2 ~]# showmount -e 192.168.45.130
Export list for 192.168.45.130:
/kvmshare *

KVM服务器A的操作:


[root@KVM1 ~]# virt-manager  //打开图形化界面管理KVM

KVM虚拟平台--迁移KVM虚拟机_第1张图片
KVM虚拟平台--迁移KVM虚拟机_第2张图片
KVM虚拟平台--迁移KVM虚拟机_第3张图片
KVM虚拟平台--迁移KVM虚拟机_第4张图片
KVM虚拟平台--迁移KVM虚拟机_第5张图片
KVM虚拟平台--迁移KVM虚拟机_第6张图片
接下来创建虚拟机,如图:
KVM虚拟平台--迁移KVM虚拟机_第7张图片
KVM虚拟平台--迁移KVM虚拟机_第8张图片
KVM虚拟平台--迁移KVM虚拟机_第9张图片
KVM虚拟平台--迁移KVM虚拟机_第10张图片
KVM虚拟平台--迁移KVM虚拟机_第11张图片
KVM虚拟平台--迁移KVM虚拟机_第12张图片
KVM虚拟平台--迁移KVM虚拟机_第13张图片
KVM虚拟平台--迁移KVM虚拟机_第14张图片
KVM虚拟平台--迁移KVM虚拟机_第15张图片
虚拟机重启完成之后,将其关机,配置其为桥接网络,方法如下:

[root@KVM1 ~]# virsh destroy centos7.0     //强制关机这样比较快
Domain centos7.0 destroyed

[root@KVM1 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     centos7.0                      shut off
 -     test01                         shut off
 [root@KVM1 ~]# systemctl  stop NetworkManager      //关闭网络管理工具
[root@KVM1 ~]# virsh iface-bridge ens33 br0      //通过ens33生成br0
[root@KVM1 ~]# virsh  edit centos7.0                 //使用“edit”命令编辑虚拟机的配置文件
   定位到interface,修改一下内容:
              修改为bridge
      
           修改为 bridge='br0'
[root@KVM1 ~]# virsh  start centos7.0 //启动centos7虚拟机
[root@KVM1 ~]# virsh  list --all
 Id    Name                           State
----------------------------------------------------
 5     centos7.0                      running

KVM虚拟平台--迁移KVM虚拟机_第16张图片
KVM虚拟平台--迁移KVM虚拟机_第17张图片
KVM服务器B的操作:


[root@KVM2 ~]# virt-manager 

创建存储池,跟KVM服务器A的操作一模一样,如图:
KVM虚拟平台--迁移KVM虚拟机_第18张图片
KVM虚拟平台--迁移KVM虚拟机_第19张图片
KVM虚拟平台--迁移KVM虚拟机_第20张图片
KVM虚拟平台--迁移KVM虚拟机_第21张图片
KVM虚拟平台--迁移KVM虚拟机_第22张图片
生成桥接网卡br0,便于一会进行热迁移操作,操作如下:

[root@KVM2 ~]# systemctl  stop NetworkManager
[root@KVM2 ~]# virsh iface-bridge ens33 br0 
注:记得更改两台KVM主机名,避免两台主机名相同容易起冲突

KVM服务器A进行以下操作:
KVM虚拟平台--迁移KVM虚拟机_第23张图片
KVM虚拟平台--迁移KVM虚拟机_第24张图片
如果出现以下错误,如图:
KVM虚拟平台--迁移KVM虚拟机_第25张图片
那是因为没有安装使用SSH协议连接所需的询问密码的软件包!

接下来的操作需要在两台KVM都进行操作:

[root@KVM1 ~]# yum -y install openssh-askpass
[root@KVM2 ~]# yum -y install openssh-askpass
//安装询问密码的依赖包,注意两台KVM服务器都需安装

KVM虚拟平台--迁移KVM虚拟机_第26张图片
KVM虚拟平台--迁移KVM虚拟机_第27张图片

接下来进行热迁移操作,如图:
注:两边KVM服务器可以互相迁移自己的虚拟机:
KVM虚拟平台--迁移KVM虚拟机_第28张图片
KVM虚拟平台--迁移KVM虚拟机_第29张图片
KVM虚拟平台--迁移KVM虚拟机_第30张图片
迁移完成后,就会发现centos7虚拟机移到了KVM服务器B上了
查看KVM虚拟机的访问是否存在终端现象,如图:
KVM虚拟平台--迁移KVM虚拟机_第31张图片