一、迁移概述

虚拟机的迁移是指在VMM(Virtual Machine Monitor)上运行的虚拟机系统,能够被转移到其它物理机上的VMM上运行

1.KVM迁移类型

静态迁移

静态迁移也叫做常规迁移、离线迁移(Offline Migration)就是在虚拟机关机的情况下从一台物理机迁移到另一台物理机;因为虚拟机的文件系统是建立在虚拟机镜像上,所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到外一台物理机上 如果要保存虚拟机迁移之前的状态,在迁移之前将虚拟机暂停,然后拷贝状态至目的主机,最后在目的主机重建虚拟状态,恢复执行 这种方式的迁移过程需要停止虚拟机的运行,从用户角度看,有明确的一段停机时间,这段时间虚拟机上的服务不可用,但这种迁移方式简单易用,适用于对可用性的要求不高的场合

共享存储的动态迁移

动态迁移(Live Migration)也叫做在线迁移(Online Migration)就在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程,该过程不会对最终用户造成明显影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级 与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间,迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机己经具备了运行虚拟机系统的必要资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继续运行 对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对于用户来说是透明的,因此动态迁移适用于对虚拟机服务可用性要求很高的场合 目前主流的动态迁移工具,VMware的VMotion,Citrix的XenMotion,他们都依赖于物理机采用的共享存储,因而在迁移时只需要进行虚拟机系统内存执行状态的迁移,从而获得较好的迁移性能

图上中所示的动态迁移,为了缩短迁移时间,源主机和目的主机采用NFS共享存储;这样,动态迁移只需要考虑虚拟机系统内存执行状态的迁移,从而获得较好的性能

本地存储的动态迁移

动态迁移基于共享存储设备,为的是加速迁移的过程,尽量减少宕机时间,但是在某些情况下需要进行基于本地存储的虚拟机的动态迁移,这就需要存储块动态迁移技术,简称块迁移 比如某些服务器没有使用共享存储,而且迁移的频率很小,虚拟机上的服务对迁移时间的要求不严格,则可以使用存储块动态迁移技术;尽管共享存储能够提高和系统的稳定性,对于中小型企业仅仅为了加快迁移速度而配置昂责的存储设备,性价比不高 在集中式共享外部存储的环境下,基于共享存储的迁移技术在这种场合下会受到限制,虚拟机迁移到目的主机后,不能再访问其原有的外存设备 为拓宽动态迁移技术的应用范围,有必要实现一个包括虚拟机外存迁移在内的全系统动态迁移方案,使得在采用分散式本地存储的计算机集群环境下,仍然能够利用迁移技术转移虚拟机环境,并且保证迁移过程中虚拟机系统服务的可用性

上图相比较基于共享存储的动态迁移,数据块动态迁移需要同时迁移虚拟机磁盘镜像和虚拟机系统内存,延长了迁移时间,在迁移性能上会大打折扣

2.虚拟机管理工具

KVM仅仅是Linux内核的一个模块,管理和创建完整的KYM虚拟机,需要更多的辅助工具

  • QEMU-KVM:QEMU是一个强大的虚拟化软件,它可以虚拟不同的CPU构架,比如说在X86的CPU上虚拟一个Power的CPU,并利用它编译出可运行在Power上的程序;KYM使用了QEMU的基于X86的部分,并稍加改造,形成可控制KVM内核模块的用户空间工具QEMU-KVM,所以Linux发行版中分为kernel部分的KVM内核模块和QEMU-KVM工具;这就是KYM和QEMU的关系
  • libvirt、virsh、virt-manager:尽管QEMU-KVM工具可以创建和管理KVM虚拟机,但Red Hat依然为KVM开发了更多的辅助工具,比如libvirt、libguestfs等,原因是QEMU工具效率不高,不易于使用;libvirt是一套提供了多种语言接口的API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持KVM,而且支持Xen等其他虚拟机;使用libvirt, 需要通过libvirt提供的函数连接到KVM或Xen宿主机,便可以用同样的命令控制不同的虚拟机;当然libvirt不仅提供了API,还自带一套基于文本的管理虚拟机的命令virsh,可以通过使用virsh命令来使用libvirt的全部功能;但最终用户更渴望的是图形用户界面,这就是virt-manager,他是一套用python编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机,virt-manager就是利用Iibvirt的API实现的

二、 案例:KVM静态迁移

主机 系统 IP 网卡
源主机 Centos 7 64bit 192.168.100.10 vmnet1
目标主机 Centos 7 64bit 192.168.100.20 vmnet1

1.环境准备(源主机)

  • 构建KVM环境并且安装一台虚拟机,具体过程略,参见KVM架构与管理

2.环境准备(目标主机)

  • 目标主机只需构建KVM环境即可,无需安装虚拟机。具体过程参见KVM架构与管理

静态迁移

源主机

迁移前,需将需要迁移虚拟机关机
[root@kvm-source ~]# virsh shutdown centos6.5域 centos6.5 被关闭[root@kvm-source ~]# virsh list --allId    名称                         状态
----------------------------------------------------2     centos6.5                      running[root@kvm-source ~]# scp /kvm/store/Centos6.5 192.168.100.20:/kvm/store/           //将源主机虚拟机磁盘镜像文件拷贝到目标主机的/kvm/store/目录下[root@kvm-source ~]# scp /etc/libvirt/qemu/Centos6.5.xml root@192.168.100.20:/etc/libvirt/qemu/          //将源主机虚拟机XML配置文件拷贝到目标主机的/etc/libvirt/qemu/目录下[root@kvm-source ~]# scp /kvm/iso/CentOS-6.7-x86_64-bin-DVD1.iso root@192.168.100.20:/kvm/iso/           //将源主机虚拟机镜像文件拷贝拷贝到目标主机的/kvm/iso/目录下

目标主机

[root@kvm-bak ~]# virsh define /etc/libvirt/qemu/Centos_6.5.xml         //通过从源主机拷贝的配置文件,重新将Centos_6.7虚拟机添加到当前主机[root@kvm-bak ~]# virsh list --all                       //验证是否成功添加虚拟机[root@kvm-source ~]# virsh start Centos6.5

三、案例:KVM基于共享存储的动态迁移

迁移拓扑图

主机 系统 IP 网卡
源主机 Centos 7 64bit 192.168.100.10 vmnet1
目标主机 Centos 7 64bit 192.168.100.20 vmnet1
NFS Centos7 64bit 192.168.100.30 vmnet1

1.环境准备(NFS)

[root@nfs ~]# hostnamectl set-hostname NFS[root@nfs ~]# systemctl disable firewalld &&systemctl stop firewalld[root@nfs ~]# setenforce 0[root@nfs ~]# vim /etc/hosts192.168.100.10 KVM1
192.168.100.20 KVM2
192.168.100.30 NFS

安装NFS

[root@nfs ~]# yum -y install nfs-utils rpcbind          //安装NFS软件包[root@nfs ~]# systemctl enable nfs           //开机自启nfs服务[root@nfs ~]# systemctl enable rpcbin           //开机自启rpcbind服务

配置NFS

[root@nfs ~]# vim /etc/exports/kvm_share *(rw,sync,no_root_squash)[root@nfs ~]# mkdir /kvm_share[root@nfs ~]# systemctl start rpcbind         //启动rpcbind服务[root@nfs ~]# systemctl start nfs         //启动nfs服务[root@nfs ~]# showmount -e 192.168.100.30         //查看NFS共享信息

2.环境准备(源主机)

  • 安装KVM基础环境以及网络桥接配置,略 参见KVM架构与管理

更改主机名,并且配置hosts信息

[root@kvm1 ~]# hostnamectl set-hostname KVM1[root@kvm1 ~]# vim /etc/hosts192.168.100.10 kVM1
192.168.100.20 KVM2
192.186.100.30 NFS

创建存储池(源主机)

[root@kvm1 ~]# mkdir -pv /kvm           //新建磁盘存储挂载目录[root@kvm1 ~]# virt-manager            //运行虚拟机管理软件

双击QEMU/KVM,选择”存储选项卡”,然后单击”+”按钮新建存储池

根据提示输入存储池名称,如share_kvm,选择磁盘”Type”为netfs

指定NFS服务器参数,挂载到本地/kvm目录

新建存储卷(源主机)

新建卷

设置新建存储卷取名并指定卷最大容量与分配容量

新建虚拟机(源主机)

回到虚拟系统管理器后,选择”New”选项

指定新建虚拟机名称为”Centos_6.5”,并指定从本地或光盘中选择镜像安装系统(提前上传镜像文件)

选择从光盘中安装系统,并指定发行版和系统

指定新建虚拟机内核和CPU数值

选择使用存储位置

选择NFS共享存储卷

立即更改虚拟机配置

宿主机开机时自动启动该虚拟机

键盘布局为宿主机布局

开始引导安装系统(其余硬件调整和VMware使用差不多,这里不再阐述)

安装过程略。

2.环境准备(目标主机)

  • 安装KVM基础环境以及网络桥接配置,略 参见KVM架构与管理

更改主机名,并且配置hosts信息

[root@kvm2 ~]# hostnamectl set-hostname KVM1[root@kvm2 ~]# vim /etc/hosts192.168.100.10 kVM1
192.168.100.20 KVM2
192.186.100.30 NFS

创建存储池(目标主机)

[root@kvm2 ~]# mkdir -pv /kvm           //新建磁盘存储挂载目录[root@kvm2 ~]# virt-manager            //运行虚拟机管理软件

双击QEMU/KVM,选择”存储选项卡”,然后单击”+”按钮新建存储池

根据提示输入存储池名称,如share_kvm,选择磁盘”Type”为netfs

指定NFS服务器参数,挂载到本地/kvm目录

3.共享存储动态迁移

源主机

选择”File”连接目标主机

添加目标主机参数,并自动连接

输入目标主机root密码

连接完毕

选择需要迁移的虚拟机,选择”Migrate”迁移

指定要迁移到目标主机的地址

迁移中

现已将KVM虚拟机迁移到目标主机上

KVM动态迁移与性能优化相关推荐

  1. Kvm虚拟化性能测试与性能优化实践

    1.环境介绍 1.1测试简介 本次测试是针对KVM虚拟化在CPU.内存.磁盘.网络4大方面的全面性能测试与性能优化实践,目的在于通过对比测试,找出最适合我们所使用的硬件与软件架构的最佳优化配置,为Op ...

  2. 基于iscsi存储的kvm动态迁移(V2V)

    实验环境:Centos7.7 实验拓扑: 实验目的:完成基于iscsi存储的kvm迁移 三台虚拟机 2台计算节点 1台iscis存储网络配置: 业务网 192.168.100.0 心跳网 172.16 ...

  3. kvm虚拟机静态和动态迁移

    一.kvm虚拟机静态迁移 1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储 ...

  4. python虚拟机优化_KVM虚拟机管理及性能优化

    KVM虚拟机管理及性能优化 本章接上一篇文章继续为大家讲解,如何使用KVM的操作命令,对虚拟机进行管理(虚拟机开启关闭.挂起恢复.删除虚拟机.通过备份配置文件重新恢复删除的虚拟机).KVM文件管理(磁 ...

  5. 【云和恩墨业务介绍】之数据库性能优化服务

    数据库性能优化的必要性 性能问题对于行业.企业用户的信息化处理能力.客户的直接体验.硬件资源的投入成本. 运维要求都有着直接的影响,一旦性能问题爆发,将导致业务系统不可正常使用,客户体验变差等一系列影 ...

  6. kvm性能优化方案---cpu/内存/磁盘/网络

    kvm性能优化方案 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. cpu 在介 ...

  7. 物理虚拟化服务器之间的KVM在线动态迁移

    show ~  前几天,我蛋疼的时候做的~     实验下虚拟化可以套嵌几层...   vm套嵌vm主机,大家看看我套嵌了几层. ubuntu-xp-centos-ubuntu  ~ 说正题~ 简单讲 ...

  8. KVM 虚拟机在物理主机之间迁移的实现 -- 静态迁移/动态迁移/存储迁移

    原文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm2/ 静态迁移 静态迁移:也叫做常规迁移.离线迁移(Offline Migrati ...

  9. 《C++应用程序性能优化::第五章动态内存管理》学习和理解

    <C++应用程序性能优化::第五章动态内存管理>学习和理解 说明:<C++应用程序性能优化> 作者:冯宏华等 2007年版. 2010.8.29 cs_wuyg@126.com ...

最新文章

  1. 怎么把外部参照合并到图纸_做电气设计的,拿到建筑图,怎么下手呢?
  2. 2019年1月16日【第三天学习】
  3. Leaflet文档阅读笔记-Quick Start Guide笔记
  4. all, any, some查询
  5. java哈希映射干什么的_java – 为什么在哈希映射中有空值或空键是有用的?
  6. JS闭包中未使用的引用变量回收机制浅探
  7. 计算机科学的方法论有三个过程,计算机科学与技方法论3.ppt
  8. oppo手机解锁_ColorOS一键解锁工具
  9. springboot使用yml格式报错
  10. 【leetCode】69. x 的平方根
  11. linux 小企鹅输入法,Linux基础操作小全及Fcitx(小企鹅五笔输入法)
  12. 用js计时器写倒计时
  13. notepad++ paste data vertically
  14. 机器学习基础01--scikit-learn库的运用使用库中的数据集与make_blobs/moons/circles的使用
  15. 制作精致闪电天气APP图标的PS教程
  16. Viterbi-Algorithm(维特比)算法
  17. paddle 标注_一看就会,手把手教你编程,批量文章标注拼音(附源码)
  18. graphql 有必要吗_为graphql准备好移动开发了吗
  19. 战战已被修改到穷途末路
  20. Ubuntu重置密码 passwd 出现 Authentication token manipulation error

热门文章

  1. 【Linux】连接远程Linux服务器
  2. 丢掉盔甲,我们依然是骄傲的骑士——Secooler“三问四看”话认证培训
  3. [讨论] 2015-8-13日 主题:关于指针和堆栈
  4. c语言图形学扫描线填充算法,《计算机图形学》OpenGL实现扫描线填充算法
  5. lol提示游戏环境异常重启计算机,教你win7系统lol游戏环境异常请重启机器后再试的解决教程...
  6. html代码右上角标签,html实现上角标的效果
  7. 计算机毕业设计ssm基于java的仓储信息管理系统o9ypl系统+程序+源码+lw+远程部署
  8. C++数据结构课程设计——文学研究助手
  9. java猜数字游戏实验报告_java猜数游戏实验报告.doc
  10. 鼠标移到button上变手型