KVM的虚拟化研究及应用
引言
虚拟化技术是IBM在20世纪70年代首先应用在IBM/370大型机上,这项技术极大地提高了大型机资源利用率。随着软硬件技术的迅速发展,这项属于大型机及专利的技术开始在普通X86计算机上应用并成为当前计算机发展和研究的一个热点方向。目前,虚拟化技术在高校数据中心虚拟化、计算机教学、数字图书馆等各方面都有所应用并取得了较好的效果。文中提出基于KVM的教学平台虚拟化方案设计,较好地解决了使用加密狗作为加密手段的应用虚拟化问题。
1 KVM虚拟化技术概述
虚拟化技术能够在一台计算机上运行多个操作系统,每个系统上运行自己独立的应用软件。虚拟化技术可以对这些系统进行有效隔离,对资源进行按需分配,从而保证每个系统的安全性和性能。目前虚拟化技术已经形成从硬件到软件一整套的解决方案。基于X86架构的硬件技术主要是由Intel和AMD提供的VirtualizationTechnology(VT)和Pacifica(AMD—V)虚拟化技术,该技术对处理器进行了扩展,从而实现了处理器的虚拟化。软件方面主要有Vmware公司的VSpare和VmwareWorkstation、Microsofl公司的Hy—per—V和VirtualPC以及Linux系统下的Xen和KVM等。前两个软件是已经商业化的系统,Xen也开始了商业化运作,KVM是免费的开源系统并在迅速发展当中,是目前唯一进入Linux核心的虚拟化解决方案。
KVM是由以色列的一个名为Qumrant的开源组织于2006年10月提出的基于硬件虚拟化的虚拟机(VirtualMachine,VM)实现方案,2007年2月发布的Linux2.6.20内核第一次包含了KVM。实际上KVM只是虚拟化解决方案的一部分,其底层需要处理器支持,为多个操作系统提供虚拟化处理器,I/O通过QE—MU进行,其架构如图1所示。
图1 KVM系统架构
KVM包含内核模块和处理器模块两部分,内核模块kvm.ko提供核心的虚拟化支持,处理器模块kvm—inte1.ko和kvm—amd.ko分别提供了对Intel和AMD处理器虚拟化技术的支持。KVM通过加载kvm.ko内核模块将Linux内核转换为一个VirtualMachineMonitor(VMM,Hypervisor),因此KVM可以随着Linux标准内核的升级而获得性能提升(如调度程序、内存支持等)。虚拟机对应成为标准的Linux进程,因而可以用标准的Linux进程管理机制进行管理。
在普通的Linux进程有内核模式和用户模式两种运行模式,内核模式表示代码执行的特权模式,用户模式表示代码执行的非特权模式。在KVM系统中为Linux引入了一种新的进程模式,新的模式称为客户模式,客户模式用来执行虚拟机操作系统非I/O代码。在客户模式中包含内核模式和用户模式两种标准模式,VM操作系统可在内核模式下运行标准的内核,在用户模式下支持自己的内核和用户空间应用程序。
虚拟机操作系统的I/O操作是由修改过的QEMU支持的。QEMU是一种用动态翻译技术实现的快速指令集层虚拟机,它支持整个计算机系统的模拟,包括多种处理器(X86、ARM、PowerPC等)、磁盘、图形适配器和网络设备等。KVM是用硬件虚拟化技术代替了QEMU的动态翻译技术,实现虚拟机操作系统代码直接由硬件处理从而提高系统性能。VM操作系统生成的I/O请求会被截获并转发到用户空间,由QEMU的设备模型来模拟I/O操作,在需要的情况下触发真实的I/O操作。
2 KVM教学平台虚拟化应用系统设计
随着经济模式的转变和信息技术的发展,社会对复合型人才的数量和质量要求越来越高。为了适应这种变化,高等教育不断重视和加强实践教学,利用现代计算技术贴近现实成为其中最重要的手段之一。国内大部分院校均已建立起一定规模的实践教学环境,初步建立了教学、科研等各种网络应用系统。这些系统在实践教学秩序的稳定性和教学质量的提升等方面发挥了重要作用。
一般实践教学数据中服务器拓扑结构如图2所示,其中包括目录服务器、数据库服务器、文件服务器、WEB服务器及专业教学软件应用服务器,部分院校还部署了防火墙、负载均衡等扩展设备,以保证服务器的安全性、高性能和高可靠性。
图2 实践教学数据中心服务器拓扑结构
在实践教学快速发展过程中,各院校的数据中心在建设和管理上也面临着许多困难和问题。
①服务器数量越来越庞大,经常是一个建设项目建立一套服务器系统,在此情况下服务器利用率相当低;
②服务器资源争夺,有时为了提高服务器利用率,将不同系统部署在同一台服务器上,造成不同应用系统之间的冲突,比如加密狗之间的冲突、端口之间的争夺、环境资源冲突等。虚拟化技术的应用为解决这些问题提供了一条很好的思路。
2.1KVM技术在虚拟化中的优势
KVM虚拟化技术具有较强的灵活性,能较好地将不同操作系统和特殊硬件设备加以利用,降低不同系统间维护的复杂度。
KVM支持VM操作系统种类多,常见的基于X86架构的Windows、Linux、Unix操作系统绝大部分可以稳定运行。
KVM本身运行在Linux系统内核当中,属于瘦虚拟化方案,KVM本身体积很小,其支持硬件取决于Linux系统本身对硬件的支持。目前主流硬件设备均有对应的Linux驱动,这也就决定了KVM可以在最广泛的硬件系统之上运行。
KVM可以直接使用指定的硬件设备,如USB端口等。利用此项功能,可以直接将特定应用USB加密狗与运行该应用的VM绑定,从而解决加密狗冲突的问题。
同时KVM具有优良的系统性能和稳定性,系统更新便捷。
2.2虚拟化设计的原则
现有系统的分类整合,对目前应用系统按照技术架构进行分类,分析其应用特性,将类似的系统进行合并服务器处理,以利于将应用迁移到虚拟主机上。对将来要增加的应用系统进行预测,以保证系统的扩展性满足未来的需求。
数据集中存储,将虚拟机文件及数据库集中存放到存储设备中,实现数据的集中统一管理。
2.3服务器虚拟化方案设计
根据现有应用系统的性质将其分为两大类,一类为教学服务器,专门运行教学相关的专业软件。另一类为环境支持系统,包括域服务器、网站服务器、文件服务器。教学服务器平时压力并不大,但是当展开教学活动时,服务器负载会迅速提高鉴于教学系统的特点,将教学系统服务器作为首先进行虚拟化的部分,系统结构如图3所示。
图3 应用服务器虚拟化架构
将教学系统服务器按资源利用率分为两部分,利用率超过20%的系统将单独设置虚拟机,利用率在20%以下的按照提供服务种类组合在不同虚拟机中。按服务性质将服务分为纯加密保护验证类、B/S应用服务类、C/S应用服务类、自有专用服务类等四类。在教学系统中大量应用使用USB加密狗进行版权保护,为避免加密狗之间相互冲突,将加密狗对应USB端口直接指向对应的虚拟机,使之成为私有端口,不被主机系统和其它虚拟机系统所识别和使用,从而达到消除冲突的目的。
依据数据集中存储的原则,采用SAN(存储区域网络)集中存储方式,将虚拟机镜像文件部署在SAN共享存储阵列中。当物理主机发生故障时,可通过集群转移或者指定其他物理主机重新运行虚拟机,缩短应用中断时间。
通过分析应用系统的运行原理,建立分布式数据库,使其与应用分离,数据库集中存储在数据库服务器上。应用采用虚拟机多机备份机制,保证在应用的安全性。对于部分数据库和应用不能分离的业务,采用多级备份的方式,以降低风险发生时造成的损失。
3 KVM虚拟化应用系统部署
采用Ubuntu910系统,基于KVM84对服务器进行虚拟化,设置CPU、内存、硬盘、网络等硬件环境,安装操作系统及应用,加载相应USB加密狗,实现从虚拟化平台到软件应用的完整虚拟化解决方案。
3.1 环境检查及软件配置
KVM是基于CPU硬件虚拟化基础之上的,在安装KVM之前必须确认CPU支持虚拟化技术。使用cat/proc/cpuinfolgrep-E(vmxIsvn1)命令进行检测,有输出结果说明CPU支持虚拟化。部分服务器默认是关闭虚拟化技术的,需要进入BIOS打开CPU的虚拟化支持。
Linux内核是从2.6.20版本开始集成KVM,因此Linux内核版本必须在此之上。使用uname—a命令查看Linux内核版本。
在Ubuntu下安装KVM模块和安装其他软件类似,使用apt—getinstallkvm安装KVM模块并添加到Linux核心。lsmod命令可查看KVM模块是否加载成功,如果未加载成功可以使用命令modprobekvm载入。
3.2V M操作系统实例化
3.2.1建立虚拟磁盘镜像
虚拟磁盘镜像在逻辑上足提供给虚拟机使用的硬盘,在物理上可以是Linux系统内一普通镜像文件,也可以是真实的物理磁盘或分区。本方案设计中将虚拟机集中存储在SAN存储阵列中,采用文件方式,用dd命令创建如下
ddif=/dev/zeroof=hdisk.imgbs=1Gcount=10
dd命令创建一个名为hdisk.img的容量为10G的虚拟磁盘。虚拟磁盘并不会立即分配全部空问,而是根据使用情况在不超过1OG范围内动态分配。
3.2.2配置虚拟网络
KVM有NAT和TUN/TAP两种网络接入方式。NAT方式下主机操作系统和虚拟机操作系统不需要进行特殊设置,虚拟机操作系统内网卡采用内部DH.CP方式获取私有IP地址,可以与外部网络通讯,但是虚拟机不能向外提供服务,也不能与主机进行通信。TUN/TAP方式是采用网桥连接,虚拟机与主机、虚拟机与外部网络通讯都正常,其拓扑结构如图4所示。
图4 KVM网络桥接模式拓扑图
TUN/TAP模式是将物理网卡eht0设置成混杂模式,建立一个虚拟网桥br0和虚拟网卡taro,然后将虚拟网卡tarO和物理网卡eth0加入网桥,设置成网桥端口并激活虚拟网卡tarO。网桥IP设置成原主机IP地址,这时主机操作系统可正常通讯。当虚拟机操作系统启动时将自动以tarO为模板建立所需数量的虚拟网卡并插入系统,VM操作系统启动后可按正常系统DHCP方式或手工指定方式设置网卡IP地址。
3.2.3部署操作系统
KVM虚拟机硬件配置的设定或更改非常灵活,KVM通过虚拟机启动命令参数指定虚拟机所对应的CPU、内存、硬盘、网卡、声卡、系统时钟等硬件配置。使用启动命令将虚拟磁盘文件和虚拟机关联起来,启动后开始安装操作系统。
kvm—m512-hda/home/kvm/hdisk.img—cdrom/dev/cdrom..bootd——localtime
此命令是设置虚拟机使用磁盘镜像文件/home/kvm/hdisk.img作为硬盘,设置内存容量为512兆,从光驱启动虚拟机安装操作系统,安装界面出现后和在物理机器上正常安装操作系统一致。
安装完毕后将启动命令中的-bootd参数修改为-boote即可实现从磁盘镜像正常启动虚拟机。
3.3虚拟机的优化和统一集中管理
Virtio是一套Linux下用于虚拟I/O的通用框架,采用半虚拟化技术以提高I/0性能,通过在VM内加载virtio驱动以支持网卡、块存取设备、PCI等设备。启用virtio虚拟千兆网卡替换KVM默认的RealteckRTL8029虚拟网卡,可大幅度提高虚拟网卡的性能和稳定性。如选用virtio网卡并指定网卡物理地址,可使用-netnic,model=virtio,mac=52:54:00:l2:34:68参数。虚拟机启动后安装对应的网卡驱动即可正常使用。虚拟机系统调试完毕后可将复杂的启动命令存为脚本,避免出错并提高管理效率。
KVM虚拟机是针对服务器虚拟化进行设计和开发的虚拟化方案,因此KVM虚拟机对虚拟显卡支持相对较弱。但是KVM提供了不在物理服务器端启动虚拟机图形界面,而是通过VNC远程访问的方式对虚拟机进行管理的工作机制。如使用远程管理启动虚拟机,可使用-vrlc172.16.32.3:3参数启动VNC服务器,VNC客户端通过访问172.16.32.3:5093地址对虚拟机进行远程管理控制,为不同虚拟机指定不同端口,形成统一的集中管理。
3.4部署USB加密设备
在部署应用过程中,加密狗冲突问题可以利用KVM硬件端口指定技术将不同USB设备与特定虚拟机绑定,主机操作系统不需要安装相应USB驱动,由此可解决USB加密狗在同一系统下冲突的问题。
KVM可使用-usbdevicehost*.*参数将所有主机上的USB设备全部指定转接到虚拟机上,此时主机将无法正常使用USB设备。因此,必须向KVM说明哪些USB设备由客户机控制。这里需要使Hj到的是USB设备的rid和pid两个参数,每个usb设备都有这两个id,vid代表生产商,pid代表产品。可以通过lsusb命令来察看USB设备的这两个参数,其中一条结果如下
Bus001Device007:ID0aSe:2110BroadcomCorp
在启动命令里边修改一usbdevice选项,增加该USB设备一usbdevieehost:0aSe:2110,操作系统启动后再加载相应USB加密狗驱动即可正常使用。
3.5虚拟化应用效果分析
目前实验中心实际运行的教学专用应用中符合虚拟化条件的为37个,分布在l3台服务器上,通过虚拟化部署共建立虚拟机12个,分布在4台服务器上,有效提高了服务器的资源利用率。其它服务器中3台服役时间已超过6年,实施虚拟化后随着服务器的压力减小,故障率明显降低,故障修复周期也大幅缩短,保障了教学秩序的稳定。
KVM虚拟机只依赖于虚拟磁盘镜像文件,其他配置在Linux系统中完成。因此只需要复制磁盘镜像文件,修改对应启动命令即可完成一台新服务器的部署,有效缩短部署新服务器的工作周期,极大地降低部署复杂程度,提高工作效率。服务器数据备份是管理员日常工作的一个重要组成部分,实施虚拟化后只需备份虚拟磁盘文件,恢复时将虚拟磁盘文件复制回来即可实现应用和数据的完整恢复。
4 结束语
KVM是一个发展时间比较短,但是性能和稳定性表现优秀的虚拟化解决方案。文中通过一个实例介绍了KVM在虚拟化过程中的具体应用,其灵活的网络拓扑结构、简便的硬件配置方案、集中统一管理可满足于大多数数据中心虚拟化实践。当然KVM也有很多不足,对一些虚拟化扩展特性,如泛虚拟化支持、虚拟机动态迁移、图形化管理界面等新功能正在进一步研究和开发当中。
KVM的虚拟化研究及应用的更多相关文章
- 基于KVM的虚拟化研究及应用
引言 虚拟化技术是IBM在20世纪70年代首先应用在IBM/370大型机上,这项技术极大地提高了大型机资源利用率.随着软硬件技术的迅速发展,这项属于大型机及专利的技术开始在普通X86计算机上应用并成为 ...
- VM 操作系统实例化(基于 KVM 的虚拟化研究及应用--崔泽永(2011))的论文笔记
一.VM操作系统实例化 1.建立虚拟磁盘镜像 虚拟磁盘镜像在逻辑上是提供给虚拟机使用的硬盘, 在物理上可以是 L inux系 统内一普通镜像文件, 也可以是真实的物理磁盘或分区. 本方案设计中将虚拟机 ...
- KVM 内存虚拟化
内存虚拟化的概念 除了 CPU 虚拟化,另一个关键是内存虚拟化,通过内存虚拟化共享物理系统内存,动态分配给虚拟机.虚拟机的内存虚拟化很象现在的操作系统支持的虚拟内存方式,应用程序看到邻近的内存 ...
- KVM中断虚拟化浅析
2017-08-24 今天咱们聊聊KVM中断虚拟化,虚拟机的中断源大致有两种方式,来自于用户空间qemu和来自于KVM内部. 中断虚拟化起始关键在于对中断控制器的虚拟化,中断控制器目前主要有APIC, ...
- Xen,VMware ESXi,Hyper-V和KVM等虚拟化技术的原理解析
Xen,VMware ESXi,Hyper-V和KVM等虚拟化技术的原理解析 2018年04月03日 13:51:55 阅读数:936 XEN 与 VMware ESXi,Hyper-V 以及 K ...
- KVM虚拟化研究-1
使用qemu-img创建镜像 例子: [root@HOST31 rybtest]# qemu-img create -f raw /rybtest/test1.raw 1G 使用qemu-img查看镜 ...
- KVM 存储虚拟化 - 每天5分钟玩转 OpenStack(7)
KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的. Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型,后面会详细讨论.Volume 是 ...
- KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)
网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...
- KVM嵌套虚拟化nested之CPU透传
嵌套式虚拟nested是一个可通过内核参数来启用的功能.它能够使一台虚拟机具有物理机CPU特性,支持vmx或者svm(AMD)硬件虚拟化.该特性需要内核升级到Linux 3.X版本 ,所以在cento ...
随机推荐
- UV印刷
UV就是在一张印上你想要的图案上面过上一层油,主要是增加产品亮度,保护产品表面,其硬度高,耐腐蚀摩擦,不易出现划痕等,有些复膜产品现改为上UV,能达到环保要求,但UV产品不易粘接,有些只能通过局部UV ...
- BZOJ 1005 明明的烦恼 (组合数学)
题解:n为树的节点数,d[ ]为各节点的度数,m为无限制度数的节点数. 则 所以要求在n-2大小的数组中插入tot各序号,共有种插法: 在tot各序号排列中,插第一个节点的 ...
- SharePoint 2010 用Event Receiver将文件夹自动变成approved状态 (1)
当开发一个sharepoint门户网站,或者是一个内容管理的网站的时候,站点的模板通常会选用publish portal,或者是开启了publishing feature来对内容进行版本控制和流程控制 ...
- asp导航条子菜单横向
示意图:(代码红色部分为主要.) <%@ Master Language="C#" AutoEventWireup="true" CodeFile=&qu ...
- POJ 2695 The Pilots Brothers' refrigerator(神奇的规律)
转载请注明出处:http://blog.csdn.net/a1dark 分析:如果想要将一个“+”翻转成“-”,那么必然会把对应的行和列上的所有点翻转一次.由于一个点翻偶数次就相当于不翻转.所以我需要 ...
- GCC编译四阶段
Linux下程序编译的四个阶段:预处理.编译.汇编.链接 GCC: GUN C Compiler 但现在不只局限于c语言 预处理(Preprocessing): gcc -E hello.c - ...
- 【已解决】谁动了我的CurrentPrincipal?求助我在给Artech的wcf petshop增加授权机制的时候遇到的问题。
这个问题已解决,是绑定设置的问题,主要还是因为我自己没有深入理解WCF绑定的安全机制.在这篇博客里面我来说说怎么解决的. 下载了Artech的wcf petshop源码(博文链接)并调试运行成功后,打 ...
- 《Java TCP/IP Socket 编程 》读书笔记之十一:深入剖析socket——TCP套接字的生命周期
转载请注明出处:http://blog.csdn.net/ns_code/article/details/16113083 建立TCP连接 新的Socket实例创建后,就立即能用于发送和接收 ...
- POJ 1947 - Rebuilding Roads 树型DP(泛化背包转移)..
dp[x][y]表示以x为根的子树要变成有y个点..最少需要减去的边树... 最终ans=max(dp[i][P]+t) < i=(1,n) , t = i是否为整棵树的根 > 更新的时 ...
- Swift编程语言学习2.1——基础运营商(在)
操作员正在检查,更改.归并值特殊符号或短语.例如,加+这两个数字相加(例如let i = 1 + 2). 算如更复杂的逻辑和操作的实施&&(例如if enteredDoorCode & ...