博文大纲:linux
1、KVM虚拟机迁移的方式 2、实现KVM虚拟机静态迁移 3、实现KVM虚拟机动态迁移
1、KVM虚拟机迁移的方式
KVM平台中的KVM虚拟机迁移分为如下两种:centos
(1)冷迁移(静态迁移)
咱们存放虚拟机磁盘的目录都是挂在的一个nfs文件系统的磁盘,进行冷迁移时,只要在目标主机上挂载这个nfs文件系统,就能够看到要迁移的那个虚拟机的磁盘文件,一般以.qcow2或.raw结尾的,而后,只需将虚拟机的.xml配置文件发送到目标服务器上,而后从新定义一下迁移过来的虚拟机便可!
服务器
(2)热迁移(动态迁移)
若是源宿主机和目的宿主机共享存储系统,则只须要经过网络发送客户机的 vCPU 执行状态、内存中的内容、虚机设备的状态到目的主机上。不然,还须要将客户机的磁盘存储发到目的主机上。共享存储系统指的是源和目的虚机的镜像文件目录是在一个共享的存储上的。
网络
基于共享存储系统,动态迁移的具体过程:
(1)迁移开始时,客户端依然在宿主机上运行,与此同时,客户机的内存页被传输到目的主机上;
(2)QEMU/KVM 会监控并记录下迁移过程当中全部已被传输的内存页的任何修改,并在全部内存页都传输完成后即开始传输在前面过程当中内存页的更改内容;
(3)QEMU/KVM 会估计迁移过程当中的传输速度,当剩余的内存数据量可以在一个能够设定的时间周期(默认 30 毫秒)内传输完成时,QEMU/KVM 会关闭源宿主机上的客户机,再将剩余的数据量传输到目的主机上,最后传输过来的内存内容在目的宿主机上恢复客户机的运行状态;
(4)至此,KVM的动态迁移操做完成!迁移后的客户机尽量与迁移前一致,除非目的主机上缺乏一些配置,好比网桥等。注意,当客户机中内存使用率很是大并且修改频繁时,内存中数据不断被修改的速度大于KVM可以传输的内存速度时,动态迁移的过程是完成不了的,这时候只能静态迁移。
ssh
(3)注意事项ide
(1)迁移的服务器CPU品牌最好一致; (2)64位只能在64位宿主机间迁移,32位能够迁移32位和64位宿主机; (3)宿主机中的虚拟机名字不能冲突; (4)目的宿主机和源宿主机软件配置尽量相同;
(4)总结工具
**静态迁移:** (1)复制镜像文件和虚拟机配置文件; (2)从新定义虚拟机便可! **动态迁移:** (1)建立共享存储; (2)两台KVM宿主机挂载共享存储; (3)启动动态迁移; (4)建立迁移后的虚拟配置文件; (5)从新定义虚拟机;
2、实现KVM虚拟机静态迁移
(1)环境要求centos7
* 一台KVM服务求A:IP地址:192.168.45.134 * 一台KVM服务器B:IP地址:192.168.35.137
(2)实现步骤spa
KVM服务器A的操做:3d
[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. root@192.168.45.134'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/ root@192.168.45.134'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上应用启动一下就完事了!
3、实现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,修改一下内容: <interface type='bridge'> 修改成bridge <mac address='52:54:00:ef:a3:93'/> <source bridge='br0'/> 修改成 bridge='br0' [root@KVM1 ~]# virsh start centos7.0 //启动centos7虚拟机 [root@KVM1 ~]# virsh list --all Id Name State ---------------------------------------------------- 5 centos7.0 running
KVM服务器B的操做:
[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虚拟机的访问是否存在终端现象,如图: