1、KVM 虚拟机的迁移方式vim
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可以传输的内存速度时,动态迁移的过程是完成不了的,这时候只能静态迁移。
三、迁移的注意事项
不管是冷迁移仍是热迁移,注意事项大都差很少markdown
迁移前目标服务器的要求以下:网络
- 最好迁移的服务器cpu品牌同样;
- 64位只能在64位宿主机间迁移,32位能够迁移32位和64位宿主机;
- 宿主机中的虚拟机名字不能冲突;
- 目的宿主机和源宿主机软件配置尽量的相同,如 有相同的桥接网卡,资源池等;
- 两台迁移的主机 cat /proc/cpuinfo |grep nx 的设置是相同的NX,全名为“No eXecute”,即“禁止运行”,是应用在CPU的一种技术,用做把存储器区域分隔为只供存储处理器指令集,或只供数据使用。任何使用NX技术的存储器,表明仅供数据使用,所以处理器的指令集并不能在这些区域存储。这种技术可防止大多数的缓冲溢出,即一些恶意程序,把自身的恶意指令集放在其余程序的数据存储区并运行,从而把整台计算机控制。
.ssh
一、静态迁移ide
拷贝镜像文件和虚拟机配置文件;
从新定义此虚拟机。
二、动态迁移测试建立共享存储;
两台机器挂载共享存储(手工挂载;使用资源池);
启动动态迁移;
建立迁移后的虚拟机配置文件;
从新定义虚拟机。ui
冷迁移呢,比较简单,能够理解为就是在一台电脑上将虚拟机的配置文件复制到另外一台电脑上centos7
#将虚拟机磁盘文件和配置文件都复制到一台新设备上 [root@kvm-test ~]# scp /kvm/disk/test1.raw root@192.168.171.10:/kvm/disk/ [root@kvm-test ~]# scp /etc/libvirt/qemu/test1.xml root@192.168.171.10:/etc/libvirt/qemu/ #在新设备上能够将配置文件中的UUID上删除掉 #而后直接在新设备上定义配置文件 [root@kvm2 ~]# virsh define test1.xml #以后就能够启动了
2、kvm虚拟机热迁移配置实例
环境以下:
hostname | IP | service |
---|---|---|
kvm1 | 192.168.171.151 | kvm |
kvm2 | 192.168.171.10 | kvm |
nfs | 192.168.171.152 | nfs |
若是没有kvm环境可参考:KVM虚拟化 进行搭建
一、配置NFS共享存储
[root@nfs ~]# yum -y install nfs-utils rpcbind # 安装nfs [root@nfs ~]# systemctl enable nfs # 设置为开机自启 [root@nfs ~]# systemctl enable rpcbind [root@nfs ~]# mkdir -p /nfs-share # 建立须要共享的目录 [root@nfs ~]# vim /etc/exports /nfs-share *(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 -anput | grep rpc # 肯定已经启动 [root@nfs ~]# showmount -e # 查看本机共享的目录 Export list for nfs: /nfs-share * #设置防火墙规则,测试环境也能够直接关闭防火墙 [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 #重启防火墙,使配置生效
我这里的迁移操做依赖于桌面图形化环境,命令热迁移暂时没研究过。
二、两台KVM服务器配置以下(两台kvm主机都须要进行下面的配置):
安装rpcbind软件包,并启动rpcbind服务
[root@kvm1 ~]# yum -y install nfs-utils rpcbind [root@kvm1 ~]# systemctl enable rpcbind [root@kvm1 ~]# systemctl start rpcbind [root@kvm1 ~]# showmount -e 192.168.171.152 # 查询nfs服务器共享的目录 Export list for 192.168.171.152: /nfs-share * [root@kvm1 ~]# mount -t nfs 192.168.171.152:/nfs-share /kvm/disk/ # 挂载 [root@kvm1 ~]# df -hT /kvm/disk/ Filesystem Type Size Used Avail Use% Mounted on 192.168.171.152:/nfs-share nfs4 50G 5.2G 45G 11% /kvm/disk #在其中一台服务器上写入一个测试文件,看看在其余服务器上是否能够看到 [root@kvm1 ~]# touch /kvm/disk/test1 [root@kvm2 ~]# ls /kvm/disk/ test1
至此,就保证了两台kvm服务器使用的目录都是同一块磁盘存储的(注意:两台kvm虚拟机的挂载nfs文件系统的目录路径必须一致,我这里两台kvm虚拟机都是挂载到了/kvm/disk/目录下,不然会在后面的操做中发生错误)。
三、在两个kvm服务器上分别建立存储卷:
[root@kvm1 ~]# virt-manager # 打开虚拟机控制台
下面对话框中,目标路径是KVM本机的“/kvm/disk”,主机名写的是nfs服务器的IP地址,源路径是nfs服务器共享的目录。
以上操做一样须要在第二台KVM上进行操做,最好定义的存储池名字等都一致。以避免发生没必要要的麻烦。
四、在kvm1上新建一个虚拟机以便进行迁移测试
自行上传一个centos的iso系统文件,这里须要指定要安装的iso文件:
下来正常安装便可
五、将新建的虚拟机网络配置为Bridge模式,能够ping通外网
如下操做主要是为了模拟虚拟机为公网用户提供服务中进行热迁移。
1)kvm1操做以下:
[root@kvm1 ~]# systemctl stop NetworkManager # 关闭此服务 [root@kvm1 ~]# virsh iface-bridge ens33 br0 # 执行此命令时,若提示如下信息,不用在乎,由于其已经存在了 Created bridge br0 with attached device ens33 Bridge interface br0 started [root@kvm1 ~]# ls /etc/sysconfig/network-scripts/ | grep br0 #肯定有此文件 ifcfg-br0 [root@kvm1 ~]# virsh destroy centos7.0 Domain centos7.0 destroyed [root@kvm1 ~]# virsh edit centos7.0 # 编辑虚拟机的配置文件,定位到interface <interface type='bridge'> # 定位到interface <mac address='52:54:00:3c:45:fb'/> # 删除mac <source bridge='br0'/> <model type='virtio'/> [root@kvm1 ~]# virsh start centos7.0 # 启动
开启虚拟机后,配置虚拟机的网卡配置文件,默认网卡文件为ifcfg-eth0:
重启网络服务,而且确认IP地址:
如今能够在虚拟机上执行“ping www.baidu.com” 命令,使其持续ping公网。
2)kvm2操做以下:
[root@kvm2 ~]# systemctl stop NetworkManager [root@kvm2 ~]# virsh iface-bridge ens33 br0 Created bridge br0 with attached device ens33 Bridge interface br0 started [root@kvm2 ~]# ls /etc/sysconfig/network-scripts/ | grep br0 ifcfg-br0 #因为kvm2没有虚拟机,因此只需将网络更改成桥接模式便可,。 #以上配置是为了防止虚拟机迁移到这台服务器后,没法和公网进行联系。
六、开始准备对新建的centos 7进行热迁移
[root@kvm1 ~]# virt-manager
填写以下,填写完成后,单击“链接”:
[root@kvm1 ~]# yum -y install openssh-askpass # 安装
根据弹出的对话框提示,输入“yes”:
输入目标主机的密码
七、开始进行热迁移
迁移完成:
如今去目标kvm服务器上,打开新迁移过去的虚拟机(会发现ping命令还在继续,压根就没有中断过):