基于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所示。

 KVM系统架构

图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载入。

 

转载于:https://www.cnblogs.com/heidsoft/p/3525655.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 进阶—— super 和 this 的用法

一、this Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方…

unity中脚本编辑器UnIDE

引言 unity默认脚本编辑器是MonoDevelop,随着unity4.3面世,MonoDevelop (4.0.1)版本也随之而来,更新为界面更改和bug自动修复功能等,具体还未使用。 点击unity的Edit下的属性(preference),可以更改默认脚本编辑器&…

apk,task,进程区别

2019独角兽企业重金招聘Python工程师标准>>> apk,task,进程区别 apk一般占一个dalvik,一个进程,一个task。通过设置也可以多个进程,占多个task。 task是一个activity的栈,其中"可能"含有来自…

Java 线程 —— 基础篇

一、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe…

【Java并发性和多线程】线程安全及不可变性

2019独角兽企业重金招聘Python工程师标准>>> 本文为转载学习 原文链接:http://tutorials.jenkov.com/java-concurrency/thread-safety-and-immutability.html 译文链接:http://ifeve.com/thread-safety-and-immutability/ 当多个线程同时访问…

Java 高级—— IO 基础

一、File 类 先看一下File 类的定义 [java] view plaincopy public class File extends Object implements Serizliable Comparable<File> 从定义看&#xff0c;File类是Object的直接子类&#xff0c;同时它继承了Comparable接口可以进行数组的排序。 File类的操作包括…

安装 SharePoint 2013 Foundation

一、Foundation版本的区别Foundation版本的区别见附件&#xff08;英文&#xff09;。官网下载地址 http://www.microsoft.com/zh-cn/download/details.aspx?id35488二、安装必备软件三、独立安装模式1. 启动安装向导2. 接受软件许可条款3. 选择服务器类型和数据位置4. 结束安…

Java 异常处理机制

异常处理是程序设计中一个非常重要的方面&#xff0c;也是程序设计的一大难点&#xff0c;从C开始&#xff0c;你也许已经知道如何用if...else...来控制异常了&#xff0c;也许是自发的&#xff0c;然而这种控制异常痛苦&#xff0c;同一个异常或者错误如果多个地方出现&#x…

架构师未来性的基础:简单性

作者&#xff1a;高焕堂&#xff0c;misoo.twqq.com 首页&#xff1a;Backee e架构师未来性的基础&#xff1a;简单性 Apple公司创始人乔布斯(Steve Jobs)曾说到&#xff1a;“简单比复杂更难&#xff0c;你必须努力让你的想法变得清晰…

Android 基础—— 对Context的理解与使用技巧

一、Context 基础概念 1、什么是Context 1) Context是一个抽象类&#xff0c;其通用实现在ContextImpl类中。 2) Context&#xff1a;是一个访问application环境全局信息的接口&#xff0c;通过它可以访问application的资源和相关的类&#xff0c;其主要功能如下&a…

Android 四大组件 —— 广播(广播机制解析)

在网络通信中&#xff0c;一个IP网络范围中最大的IP 地址是被保留作为广播地址来使用的。比如某个网络的IP 范围是192.168.0.XXX&#xff0c;子网掩码是255.255.255.0&#xff0c;那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一网络上的所有端口&#xff…

Android 基础 —— 活动的生存周期

一、返回栈 Android 中的活动是可以层叠的。我们每启动一个新的活动&#xff0c;就会覆盖在原活动之上&#xff0c;然后点击Back 键会销毁最上面的活动&#xff0c;下面的一个活动就会重新显示出来。 其实Android 是使用任务&#xff08;Task&#xff09;来管理活动的&#xff…

产品经理做市场调研和数据分析的方法

产品经理&#xff0c;你对用户的需求了解多少呢&#xff1f;你知道用户想要什么样的产品吗&#xff1f;你想知道用户将会如何看待你的产品吗&#xff1f;你想知道你设计的产品在用户中的口碑如何吗&#xff1f; 是 的。每一个产品经理都希望在产品开始立项设计前&#xff0c;得…

Android 基础 —— 活动的启动模式

活动的启动模式来说应该是个全新的概念&#xff0c;在实际项目中我们应该根据特定的需求为每个活动指定恰当的启动模式。启动模式一共有四种&#xff0c;分别是standard、singleTop、singleTask 和singleInstance &#xff0c; 可以在AndroidManifest.xml 中通过给<activity…

Android 四大组件 —— 服务

一、服务是什么 服务&#xff08;Service&#xff09;是Android 中实现程序后台运行的解决方案&#xff0c;它非常适合用于去执行那些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面&#xff0c;即使当程序被切换到后台&#xff0c;或者用户打开了…

Highlighting System

Highlighting System 法线贴图漫反射着色器 Unity论坛&#xff1a;http://forum.unity3d.com/threads/143043-Highlighting-System-Released 需要条件 Requires Unity 3.5.6 or higher.This package requires Unity Pro, as it uses post-processing!Now supports Unity iOS Pr…

Android 基础 —— 模拟实现拨打电话功能

前面已经学习活动的显示跳转及隐式跳转&#xff0c;也学习 TextView 及 Button 两个控件的使用&#xff0c;下面我们来学习 EditText的使用&#xff1a; EditText 是程序用于和用户进行交互的另一个重要控件&#xff0c;它允许用户在控件里输入和编辑内容&#xff0c;并可以在程…

Android 四大组件 —— 活动(活动的隐式跳转)

上一篇我们讨论了活动的显示跳转&#xff0c;现在来学习活动的隐式跳转 相比于显式Intent&#xff0c;隐式Intent 则含蓄了许多&#xff0c;它并不明确指出我们想要启动哪一个活动&#xff0c;而是指定了一系列更为抽象的action 和category 等信息&#xff0c;然后交由系统去分…

ALAssetsLibrary-代码操作iOS相册资源

2019独角兽企业重金招聘Python工程师标准>>> 在iOS中&#xff0c;我们调用摄像头和选择相册中的资源&#xff0c;我们可以使用&#xff1a;UIImagePickerController类来完成。 当然&#xff0c;我们也可以不使用UI的形式来访问iOS设备的相册资源。 那就是使用&#…

Android 四大组件 —— 活动(使用Intent 实现活动的显示跳转)

一、什么是Intent&#xff1f;Intent的中文意思是目的。在Android中也是“目的”的意思。就是我们要去哪里&#xff0c;从这个activity要前往另一个Activity就需要用到Intent。 下面是 Intent 两个最基本的函数&#xff1a; 1、定义一个Intent [java] view plaincopy Intent in…