KVM虚拟机实现在线热迁移的方法步骤(图文)

一、KVM虚拟机的迁移方式及需要注意的问题

KVM虚拟机的迁移有两种方法:
1、静态迁移(冷迁移):对于冷迁移,就是在虚拟机关闭状态下,将虚拟机的磁盘文件及.xml配置文件(这两个文件组成了一个虚拟机)复制到要迁移到的目标主机上,然后在目标主机上使用“virsh define *.xml”命令重新定义虚拟机即可。
2、动态迁移(热迁移):对于热迁移,比较常用,通常是这台服务器上正在跑着一些业务,而这些业务又不允许中断,那么就需要使用热迁移了,这篇博文将详细写出热迁移的步骤。

1、冷迁移

通常我们存放虚拟机磁盘的目录都是挂在的一个nfs文件系统的磁盘,而这个磁盘通常是LVM文件系统。所以需要进行冷迁移时,只要在目标主机上挂载这个nfs文件系统,就可以看到要迁移的那个虚拟机的磁盘文件,通常以.qcow2或.raw结尾的,然后,只需将虚拟机的.xml配置文件发送到目标服务器上,然后重新定义一下即可通过“virsh list --all”命令查看到迁移过来的虚拟机。

2、热迁移

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

在基于 共享存储系统 时,KVM 动态迁移的具体过程为:

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

3、迁移的注意事项

无论是冷迁移还是热迁移,注意事项大都差不多。

迁移前目标服务器的要求如下:

  • 最好迁移的服务器cpu品牌一样;
  • 64位只能在64位宿主机间迁移,32位可以迁移32位和64位宿主机;
  • 宿主机中的虚拟机名字不能冲突;
  • 目的宿主机和源宿主机软件配置尽可能的相同,如 有相同的桥接网卡,资源池等;
  • 两台迁移的主机 cat /proc/cpuinfo |grep nx 的设置是相同的NX,全名为“No eXecute”,即“禁止运行”,是应用在CPU的一种技术,用作把存储器区域分隔为只供存储处理器指令集,或只供数据使用。任何使用NX技术的存储器,代表仅供数据使用,因此处理器的指令集并不能在这些区域存储。这种技术可防止大多数的缓冲溢出,即一些恶意程序,把自身的恶意指令集放在其他程序的数据存储区并运行,从而把整台计算机控制。

小结:

1、静态迁移

  • 拷贝镜像文件和虚拟机配置文件;
  • 重新定义此虚拟机。

2、动态迁移

  • 创建共享存储;
  • 两台机器挂载共享存储(手工挂载;使用资源池);
  • 启动动态迁移;
  • 创建迁移后的虚拟机配置文件;
  • 重新定义虚拟机。

二、kvm虚拟机热迁移配置实例

1、环境准备:

我这里的环境如下:

三台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”服务即可,可能需要重启服务器)。

2、配置NFS共享存储

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/目录下,否则会在后面的操作中发生错误)。

3、在两个kvm服务器上分别创建存储卷:

[root@kvm1 ~]# virt-manager     #打开虚拟机控制台

下面对话框中,目标路径是KVM本机的“/kvm/disk”,主机名写的是nfs服务器的IP地址,源路径是nfs服务器共享的目录。

以上操作同样需要在第二台KVM上进行操作,最好定义的存储池名字等都一致。以免发生不必要的麻烦。

3、在kvm1上新建一个虚拟机以便进行迁移测试

自行上传一个centos的iso系统文件,这里需要指定要安装的iso文件:

至此,正常的自行安装虚拟机即可。

4、将新建的虚拟机网络配置为Bridge模式,可以ping通外网

以下操作主要是为了模拟虚拟机为公网用户提供服务中进行热迁移。

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没有虚拟机,所以只需将网络更改为桥接模式即可,。
#以上配置是为了防止虚拟机迁移到这台服务器后,无法和公网进行联系。

5、开始准备对新建的centos 7进行热迁移

1)kvm1服务器上进行以下操作:

[root@kvm1 ~]# virt-manager     #打开虚拟机控制台

填写如下,填写完成后,单击“连接”:

会提示需要安装以下软件包:

进行安装:

[root@kvm1 ~]# yum -y install openssh-askpass

根据弹出的对话框提示,输入“yes”:

输入目标主机的root密码:

6、开始进行热迁移

等待迁移完成,这个过程很快:

迁移完成:

现在去目标kvm服务器上,打开新迁移过去的虚拟机(会发现ping命令还在继续,压根就没有中断过):

可以自行使用“virsh list --all”分别在两台kvm服务器上进行确认,这个虚拟机是否真的迁移到第二台kvm服务器上了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • KVM虚拟机的创建、管理与迁移介绍

    虚拟机迁移技术为服务器虚拟化提供了便捷的方法.尽管商业的虚拟软件功能比较强大,但是开源虚拟机如 Linux 内核虚拟机 KVM 和 XEN 发展迅速,迁移技术日趋完善.  一.安装guest虚拟机 1.直接通过virt-manager安装.管理虚拟机(略) 2.通过命令行安装guest虚拟机 qemu-img create -f qcow2 /images/centos6.3-x86_64.img 10G chown qemu:qemu /images/centos6.3-x86_64.img

  • 详细介绍kvm虚拟机静态和动态迁移(图文介绍)

    本文主要介绍了kvm虚拟机静态和动态迁移,具体如下: 一.kvm虚拟机静态迁移 1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储虚拟机磁盘文件的迁移方式, (2)虚拟主机之间使用共享存储存放虚拟机磁盘文件 该方式只是在目标虚拟主机上重新定义虚拟机就可以了. 2.静态迁移过程如下 (1)确定虚拟机关闭状态 (2)准备迁移oeltest02虚拟机,查看该虚拟机配置的磁盘文件

  • 详解基于本地存储的kvm虚拟机在线迁移

    kvm虚拟机迁移分为4种 (1)热迁移基于共享存储 (2)热迁移基于本地存储 (3)冷迁移基于共享存储 (4)冷迁移基于本地存储 这里介绍的是基于本地存储的热迁移 动态块迁移版本要求 qemu版本要求  大于或等于0.12.1(centos6.7或以上都没问题) rpm -qa|grep qemu qemu-kvm-0.12.1.2-2.491.el6_8.1.x86_64 qemu-kvm-tools-0.12.1.2-2.491.el6_8.1.x86_64 目标宿主机:192.168.1.

  • KVM虚拟机实现在线热迁移的方法步骤(图文)

    一.KVM虚拟机的迁移方式及需要注意的问题 KVM虚拟机的迁移有两种方法: 1.静态迁移(冷迁移):对于冷迁移,就是在虚拟机关闭状态下,将虚拟机的磁盘文件及.xml配置文件(这两个文件组成了一个虚拟机)复制到要迁移到的目标主机上,然后在目标主机上使用"virsh define *.xml"命令重新定义虚拟机即可. 2.动态迁移(热迁移):对于热迁移,比较常用,通常是这台服务器上正在跑着一些业务,而这些业务又不允许中断,那么就需要使用热迁移了,这篇博文将详细写出热迁移的步骤. 1.冷迁移

  • vmware虚拟机安装安卓Android x86的方法步骤

    有时候只是想测试一个app,又不想在手机上做个测试,这个时候我们就可以用虚拟机来完成这件事情.首先到官网上去下载一个安卓系统(https://www.android-x86.org/),我这里用:android-x86-9.0-rc1.iso做演示. 或者选择本地安卓系统下载地址:https://www.jb51.net/softs/203311.html 在提供一个VMware15的下载地址:https://www.jb51.net/softs/638385.html VMware15 for

  • IDEA 中创建并部署 JavaWeb 程序的方法步骤(图文)

    目录 前言 创建项目 配置Tomcat 验证访问 注意 总结 前言 在之前 Java 的学习中,我们可能更多地是和控制台程序打交道,也就是我们日常说的黑框框程序. 现在既然完成了 Java SE 部分的基础知识,是时候来学习 JavaWeb 部分.而随着 IDEA 的强势崛起和不断更新,使用 Eclipse 的同学可能会有些不习惯 IDEA.这一点确实是,IDEA 不同版本之间的操作和设置可能都有微小的变动,就算你之前一直使用的 IDEA,也可能会随着 IDEA 的更新找不到某些隐藏在犄角旮旯的

  • Eclipse工程转为兼容Android Studio模式的方法步骤图文详解

    方法/步骤 准备好需要转换的工程 , 最好是新建一个文件夹 , 然后将主工程和依赖工程放到同一个目录 屏幕快照 2016-12-24 12.43.02.png 在eclipse中导入主工程和依赖工程 , 导入之后最好先跑一遍 , 确定没有问题再继续操作 屏幕快照 2016-12-24 12.40.03.png 在主工程上右键导出 屏幕快照 2016-12-24 12.53.51.png 将工程导出为Generate Gradle build files , 这一步很重要哦 , 只有导出为这个模式

  • IDEA导入Eclipse项目的方法步骤(图文教程)

    背景:用习惯了idea再去用eclipse实在用的不习惯,于是将老的eclipse项目导入到eclipse,网上有很多教程,看了很多博客都不行,一直报错,各种报错,现在终于好了,我们一起来看看怎么将eclipse的项目导入到idea 1新建一个文件夹,idea打开这个空文件夹 2.将项目导入 3.窗口右下角等待项目编译完成 4.配置项目环境和结构 注意:上面的webapp有可能是webcontent和webRoot (不同项目不同文件夹名称) 5.配置Tomcat 6.重新编译项目,编译完成后启

  • Python3.7下安装pyqt5的方法步骤(图文)

    第一步:首先进入python安装目录下的 [scripts]. 第二步:执行安装pyqt5的命令:python37 -m pip install pyqt5 出现以下安装过程代表安装成功. 第三步:在豆瓣网上安装pyqt5 ,在后面加上" -i https://pypi.douban.com/simple"表示使用豆瓣所提供的镜像: 命令:python37 -m pip install PyQt5 -i https://pypi.douban.com/simple 第四步:安装Qt5图

  • idea克隆maven项目的方法步骤(图文)

    一定要注意重新导入时,根目录的结构 一.idea从github上克隆maven项目 1.选择Check Out from Version Control,点击git 2.将自己项目在github上的项目url复制上 3.问你创建是否在***目录下创建idea项目,点击yes 4.注意 这里时选择import 不要选create 我知道你本地没有文件 这里应该是从远程导入文件 5.一定要注意修改根目录的位置 6.这是修改根目录后一路next 即可 二.maven项目导入之后的工作 修改maven的

  • Redis主从同步配置的方法步骤(图文)

    一丶主从概念 一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构 master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1 通过主从配置可以实现读写分离 master和slave都是一个redis实例(redis服务) 二丶主从配置 说明:搭建redis主服务和从服务可以在同一台电脑上搭建,也可以在不同电脑上搭建,博主这里使用一台电脑进行搭建 1.配置主 step1 查看电脑中的ip地址 step2 编辑

  • IDEA 创建一个Mybatis Maven项目的方法步骤(图文)

    第一步:先新建一个工程 直接next就行了,不用选内容,不然他会下载骨架会卡很久 第一个箭头是项目名称,第二个箭头是项目路径,根据自己需要修改就行了.新建好的项目是这样的. 第二步:我们需要添加一个web框架支持 右键你的项目然后选择Add Framework那一项. 选中Web Application点击ok. 这样项目结构就有了,重点是啥都不用调了很方便. 第三步:去配置Tomcat 选择Tomcat Server下面的Local 这里选择你的Tomcat在哪里 按照箭头步骤来从上到下把工程

随机推荐