博文大纲:
一、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
接下来创建虚拟机,如图:
虚拟机重启完成之后,将其关机,配置其为桥接网络,方法如下:
[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
[root@KVM2 ~]# virt-manager
创建存储池,跟KVM服务器A的操作一模一样,如图:
生成桥接网卡br0,便于一会进行热迁移操作,操作如下:
[root@KVM2 ~]# systemctl stop NetworkManager
[root@KVM2 ~]# virsh iface-bridge ens33 br0
注:记得更改两台KVM主机名,避免两台主机名相同容易起冲突
KVM服务器A进行以下操作:
如果出现以下错误,如图:
那是因为没有安装使用SSH协议连接所需的询问密码的软件包!
接下来的操作需要在两台KVM都进行操作:
[root@KVM1 ~]# yum -y install openssh-askpass
[root@KVM2 ~]# yum -y install openssh-askpass
//安装询问密码的依赖包,注意两台KVM服务器都需安装
接下来进行热迁移操作,如图:
注:两边KVM服务器可以互相迁移自己的虚拟机:
迁移完成后,就会发现centos7虚拟机移到了KVM服务器B上了
查看KVM虚拟机的访问是否存在终端现象,如图: