博文大纲:vim
- 1、KVM虚拟机的迁移方式及须要注意的问题
- 2、kvm虚拟机热迁移配置实例
KVM虚拟机的迁移有两种方法:
一、静态迁移(冷迁移):对于冷迁移,就是在虚拟机关闭状态下,将虚拟机的磁盘文件及.xml配置文件(这两个文件组成了一个虚拟机)复制到要迁移到的目标主机上,而后在目标主机上使用“virsh define *.xml”命令从新定义虚拟机便可。
二、动态迁移(热迁移):对于热迁移,比较经常使用,一般是这台服务器上正在跑着一些业务,而这些业务又不容许中断,那么就须要使用热迁移了,这篇博文将详细写出热迁移的步骤。centos
一般咱们存放虚拟机磁盘的目录都是挂在的一个nfs文件系统的磁盘,而这个磁盘一般是LVM文件系统。因此须要进行冷迁移时,只要在目标主机上挂载这个nfs文件系统,就能够看到要迁移的那个虚拟机的磁盘文件,一般以.qcow2或.raw结尾的,而后,只需将虚拟机的.xml配置文件发送到目标服务器上,而后从新定义一下便可经过“virsh list --all”命令查看到迁移过来的虚拟机。服务器
若是源宿主机和目的宿主机共享存储系统,则只须要经过网络发送客户机的 vCPU 执行状
态、内存中的内容、虚机设备的状态到目的主机上。不然,还须要将客户机的磁盘存储发到目的主
机上。共享存储系统指的是源和目的虚机的镜像文件目录是在一个共享的存储上的。网络
在基于 共享存储系统 时,KVM 动态迁移的具体过程为:
一、迁移开始时,客户机依然在宿主机上运行,与此同时,客户机的内存页被传输到目的主机上。
二、QEMU/KVM 会监控并记录下迁移过程当中全部已被传输的内页的任何修改,并在全部内存页都传输完成后即开始传输在前面过程当中内存页的更改内容。
三、QEMU/KVM 会估计迁移过程当中的传输速度,当剩余的内存数据量可以在一个能够设定的时间周期(默认 30 毫秒)内传输完成时,QEMU/KVM 会关闭源宿主机上的客户机,再将剩余的数据量传输到目的主机上,最后传输过来的内存内容在目的宿主机上恢复客户机的运行状态。
四、至此,KVM 的动态迁移操做就完成了。迁移后的客户机尽量与迁移前一致,除非目的主机上缺乏一些配置,好比网桥等。注意,当客户机中内存使用率很是大并且修改频繁时,内存中数据不断被修改的速度大于KVM可以传输的内存速度时,动态迁移的过程是完成不了的,这时候只能静态迁移。ssh
不管是冷迁移仍是热迁移,注意事项大都差很少。ide
迁移前目标服务器的要求以下:工具
- 最好迁移的服务器cpu品牌同样;
- 64位只能在64位宿主机间迁移,32位能够迁移32位和64位宿主机;
- 宿主机中的虚拟机名字不能冲突;
- 目的宿主机和源宿主机软件配置尽量的相同,如 有相同的桥接网卡,资源池等;
- 两台迁移的主机 cat /proc/cpuinfo |grep nx 的设置是相同的NX,全名为“No eXecute”,即“禁止运行”,是应用在CPU的一种技术,用做把存储器区域分隔为只供存储处理器指令集,或只供数据使用。任何使用NX技术的存储器,表明仅供数据使用,所以处理器的指令集并不能在这些区域存储。这种技术可防止大多数的缓冲溢出,即一些恶意程序,把自身的恶意指令集放在其余程序的数据存储区并运行,从而把整台计算机控制。
小结:测试
一、静态迁移ui
- 拷贝镜像文件和虚拟机配置文件;
- 从新定义此虚拟机。
二、动态迁移- 建立共享存储;
- 两台机器挂载共享存储(手工挂载;使用资源池);
- 启动动态迁移;
- 建立迁移后的虚拟机配置文件;
- 从新定义虚拟机。
我这里的环境以下:centos7
- 三台Linux服务器,其中两台是KVM服务器,IP是192.168.20.2和192.168.20.3。一台是NFS服务器,IP是192.168.20.4,用来作共享存储(要求三台服务器可互相ping通);
- 两台KVM虚拟机必须都有KVM环境。
我这的KVM环境是现成的,这里就不展现了,若是没有KVM环境,能够参考博文:KVM虚拟化基础管理进行搭建(很简单,yum安装一些包,启动“libvirtd”服务便可,可能须要重启服务器)。
nfs服务器192.168.20.4配置以下:
[root@nfs ~]# yum -y install nfs-utils rpcbind #安装所需软件包 [root@localhost ~]# systemctl enable nfs #设置NFS开机自启 [root@localhost ~]# systemctl enable rpcbind #设置rpcbind开机自启 [root@nfs ~]# mkdir -p /nfsshare #建立须要共享的目录 [root@nfs ~]# vim /etc/exports #编辑NFS的配置文件,默认为空 /nfsshare *(rw,sync,no_root_squash) #第一列表明共享的目录 #第二列的星号表明容许全部网络访问; #rw表明读写权限;sync表明同步写入磁盘; #no_root_squash表示当前客户机以root身份访问时赋予本地root权限 #(默认是root_squash,将做为nfsnobody用户对待),若不加no_root_squash, #可能会致使被降权,而没法进行读写(wr)。 [root@nfs ~]# systemctl restart rpcbind #启动该服务 [root@nfs ~]# systemctl restart nfs #启动该服务 [root@nfs ~]# netstat -anpt | grep rpc #确认服务已启动 [root@nfs ~]# showmount -e #查看本机共享的目录 Export list for nfs: /nfsshare * [root@nfs ~]# firewall-cmd --add-service=rpc-bind --permanent [root@nfs ~]# firewall-cmd --add-service=nfs --permanent [root@nfs ~]# firewall-cmd --add-service=mountd --permanent [root@nfs ~]# systemctl restart firewalld #重启防火墙,使配置生效
NFS服务器至此配置完成!!!
我这里的迁移操做依赖于桌面图形化环境,若须要使用命令迁移,能够下载这个文档进行参考,我没有研究过使用命令迁移。
两台KVM服务器配置以下(两台kvm主机都须要进行下面的配置):
1.安装rpcbind软件包,并启动rpcbind服务,为了使用showmount查询工具,因此将nfs-utils也一块儿装上:
[root@localhost ~]# yum -y install nfs-utils rpcbind [root@localhost ~]# systemctl enable rpcbind [root@localhost ~]# systemctl start rpcbind [root@kvm ~]# showmount -e 192.168.20.4 #查询nfs服务器共享的目录 Export list for 192.168.20.4: /nfsshare * [root@kvm ~]# mount -t nfs 192.168.20.4:/nfsshare /kvm/disk/ #进行挂载 [root@kvm ~]# df -hT /kvm/disk/ 文件系统 类型 容量 已用 可用 已用% 挂载点 192.168.20.4:/nfsshare nfs4 50G 33M 50G 1% /kvm/disk #在其中一台服务器上写入一个测试文件,看看在其余服务器上是否能够看到 [root@kvm1 ~]# touch /kvm/disk/test #在其中一个kvm服务器上建立测试文件 [root@kvm2 ~]# ls /kvm/disk #保证在第二台kvm服务器的目录下也能够看到 test
至此,就保证了两台kvm服务器使用的目录都是同一块磁盘存储的(注意:两台kvm虚拟机的挂载nfs文件系统的目录路径必须一致,我这里两台kvm虚拟机都是挂载到了/kvm/disk/目录下,不然会在后面的操做中发生错误)。
[root@kvm1 ~]# virt-manager #打开虚拟机控制台
下面对话框中,目标路径是KVM本机的“/kvm/disk”,主机名写的是nfs服务器的IP地址,源路径是nfs服务器共享的目录。
以上操做一样须要在第二台KVM上进行操做,最好定义的存储池名字等都一致。以避免发生没必要要的麻烦。
:
自行上传一个centos的iso系统文件,这里须要指定要安装的iso文件:
至此,正常的自行安装虚拟机便可。
如下操做主要是为了模拟虚拟机为公网用户提供服务中进行热迁移。
1)kvm1操做以下:
[root@kvm ~]# systemctl stop NetworkManager #中止此服务 [root@kvm ~]# virsh iface-bridge ens33 br0 #执行此命令时,若提示如下信息,不用在乎,由于其已经存在了 使用附加设备 br0 生成桥接 ens33 失败 已启动桥接接口 br0 [root@kvm ~]# ls /etc/sysconfig/network-scripts/ | grep br0 ifcfg-br0 #肯定有此文件就行 [root@kvm ~]# virsh destroy centos7.0 #关闭新建的虚拟机 域 centos7.0 被删除 [root@kvm ~]# virsh edit centos7.0 #编辑虚拟机的配置文件,定位到interface <interface type='bridge'> #将此处改成bridge <mac address='52:54:00:a9:cc:5f'/> #删除Mac地址这行 <source bridge='br0'/> #将此处更改成这样 #保存退出便可 [root@kvm1 ~]# virsh start centos7.0 域 centos7.0 已开始
开启虚拟机后,配置虚拟机的网卡配置文件,默认网卡文件为ifcfg-eth0:
重启网络服务,而且确认IP地址:
如今能够在虚拟机上执行“ping www.baidu.com” 命令,使其持续ping公网。
2)kvm2操做以下:
[root@kvm ~]# systemctl stop NetworkManager #中止此服务 [root@kvm ~]# virsh iface-bridge ens33 br0 #执行此命令时,若提示如下信息,不用在乎,由于其已经存在了 使用附加设备 br0 生成桥接 ens33 失败 已启动桥接接口 br0 [root@kvm ~]# ls /etc/sysconfig/network-scripts/ | grep br0 ifcfg-br0 #肯定有此文件就行 #因为kvm2没有虚拟机,因此只需将网络更改成桥接模式便可,。 #以上配置是为了防止虚拟机迁移到这台服务器后,没法和公网进行联系。
1)kvm1服务器上进行如下操做:
[root@kvm1 ~]# virt-manager #打开虚拟机控制台
填写以下,填写完成后,单击“链接”:
会提示须要安装如下软件包:
进行安装:
[root@kvm1 ~]# yum -y install openssh-askpass
根据弹出的对话框提示,输入“yes”:
输入目标主机的root密码:
等待迁移完成,这个过程很快:
迁移完成:
如今去目标kvm服务器上,打开新迁移过去的虚拟机(会发现ping命令还在继续,压根就没有中断过):
能够自行使用“virsh list --all”分别在两台kvm服务器上进行确认,这个虚拟机是否真的迁移到第二台kvm服务器上了。
———————— 本文至此结束,感谢阅读 ————————