热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Xen虚拟化技术简介

Xen是RedHatEnterpriseLinux5提供的新功能,通过Xen技术,可以让一台电脑同时执行多个操作系统,将计算机的效能发挥得淋漓尽致。本章将介绍Xen这个新功能的概念与实际配置的方法。1Xen简介我们都知道,一个计算机中最重要也最昂贵的设备应该就是中央
Xen是 Red Hat Enterprise Linux 5 提供的新功能,通过Xen技术,可以让一台电脑同时执行多个操作系统,将计算机的效能发挥得淋漓尽致。本章将介绍 Xen 这个新功能的概念与实际配置的方法。

1  Xen简介

我们都知道,一个计算机中最重要也最昂贵的设备应该就是中央处理器(Central Processing Unit,CPU)了。现在计算机的中央处理器越来越快,除了增加频率外,中央处理器的架构也从单内核跃进到多内核。然而,中央处理器在大部分的时间都是闲置的。以"效能/成本"的比率来说,中央处理器可以说是不符合投资报酬率的设备。
为了提高中央处理器的使用率,后来人类发展了虚拟化技术,让中央处理器可以同时执行多个操作系统。如此一来,我们就可以把一台计算机当做很多台使用。通过虚拟化的技术,可以提高中央处理器的使用量。相对的,也提高了中央处理器的投资报酬率。
最早实现虚拟化技术的,应属IBM的Mainframe平台。它通过实体的切割,使一台计算机可以同时执行多个操作系统,如同许多台计算机一般。但Mainframe成本高,并不是每个用户都有能力购买的;后来虚拟化技术转往软件面来实现,这样就使一台低廉的个人计算机也可以享受虚拟化的好处了。在软件的虚拟化技术中,最著名的应属VMware, Inc.开发的系列产品。
在Linux领域中,也有许多软件虚拟化的产品 ,其中最广受好评的就是由XenSource 公司 (http://www.xensource.com/)发展的Xen。Red Hat也从Red Hat Enterprise Linux 5 开始正式收录Xen,使其成为Red Hat Enterprise Linux 自带的一个子系统。
在虚拟化子系统中,每一个虚拟产生的计算机都称为"虚拟机 (Virtual Machine)";而用来存储所有虚拟机的计算机则称为"宿主机 (Host Machine)"。

1.1  虚拟化类型

一般来说,软件的虚拟化技术又可分为两种。
全虚拟化(Full Virtualization)
中央处理器与其他的硬设备都虚拟化。
全虚拟化的好处是,由于全部都由虚拟化系统产生,所以操作系统只要有支持虚拟化系统提供的硬设备 ,就可以不修改操作系统而直接在虚拟机上安装该操作系统。但也因为所有的硬设备都由虚拟产生,所以当虚拟机上的操作系统要读取某一个硬设备时,还需通过虚拟化系统才能读取真实的硬设备,因而效能往往比较差。实现全虚拟化最著名的就是VMware, Inc. 产品。
半虚拟化 (Paravirtualization)
虚拟化系统仅提供中央处理器的虚拟化能力。
其他的硬设备则与真实机器共享同一个硬设备,因此使用硬设备的效率较佳。但缺点是操作系统必须修改其内核才能安装在半虚拟化系统中的虚拟机器中。UML就是一个实现半虚拟化的典型代表。


1.2  Xen 的功能

Xen 的主要功能是让你可以在一台计算机上同时执行多个操作系统。而Xen可以用于哪些用途则没有标准的答案,完全视你如何运用虚拟机的特性而定,例举如下用途。
测试新系统:你可以建置一个新的虚拟机,在该机器上安装新版的操作系统或软件,借以测试新系统是否可以正常运行。如果可以,才正式升级真正系统;如果失败,那就乖乖继续使用旧的版本吧!
提高安全性:你也可以把不同的服务建置在不同的虚拟机上,每一个虚拟机仅提供该项服务。这样一来,就算攻击者成功入侵,也会被局限在虚拟机上,而无法读取宿主机上的重要数据。
实际可用性:由于Xen提供了迁移(Migration)的功能,你可以把某一个虚拟机通过网络转移到另外一台宿主机上执行,而客户端,完全不知道服务已经被移转到另外一台计算机了。万一宿主机出现故障,你便可以利用迁移的功能将服务转移到另外一台计算机执行,再把濒临故障的计算机关机维修,借以提高服务的可用性了。

1.3  Xen 支持的虚拟化类型
这里有一个好消息和一个坏消息要跟你分享。
在"28.1.1 虚拟化类型"中提到,虚拟化技术可分为全虚拟化与半虚拟化两种。好消息是,Xen对这两种虚拟化技术都有支持!但坏消息是,并不是所有的中央处理器都可以执行全虚拟化!
如果想让Xen提供全虚拟化,那么你的中央处理器必须符合下列条件。
Intel 中央处理器提供vmx标签。
AMD中央处理器提供svm标签。
你可以利用直接查看/proc/cpuinfo 的flags参数来判断中央处理器是否拥有上述标签。以下是我在Intel Core 2 Duo机器上查询flags参数的结果。
[root@linux ~]# grep vmx /proc/cpuinfo
flags  : fpu vme de pse tsc msr pae mce cx8 
apic mtrr pge mca cmov pat pse36                   
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx
lm constant_tsc arch_pe rfmon pebs bts pni monitor 
ds_cpl vmx smx est tm2  ssse3 cx16 xtpr lahf_lm
flags  :fpu vme de pse tsc msr pae mce cx8 apic mtrr
pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe
nx lm constant_tsc arch_pe rfmon pebs bts pni monitor 
ds_cpl vmx smx est tm2 ssse3 cx16 xtpr lahf_lm
[root@linux ~]#
上述的结果显示,我的计算机中央处理器支持vmx 标签。因此,我计算机的Xen子系统可以支持全虚拟化的功能。
为什么上面的执行结果会显示两个flags?
/proc/cpuinfo文件会记录该机器中每一个中央处理器的信息,如果计算机 有多个中央处理器,这个文件就会存储多笔数据。
因为该机器使用 Intel Core 2 Duo 的处理器,所以虽然实体上只有一个处理器,但却具备双内核功能。Red Hat Enterprise Linux 系统便将其视为两个处理器看待。因而/proc/cpuinfo中就会记录两个处理器的信息,当然,也就会有两个flags参数

1.4  Xen的虚拟机

Xen 允许建立多个虚拟机,每一个虚拟机都会在自己的区域(Domain)中执行。Xen提供了两种区域。
Domain-0
这是宿主机之区域。实体的计算机及实体计算机执行的Red Hat Enterprise Linux都在这个区域中执行。你无法修改Domain-0区域的设置与配置。
Domain-U
每一个虚拟机执行的区域称为 Domain-U。每当建立一个新的虚拟机时,Xen 就会产生一个 Domain-U 的区域,以供该虚拟机使用。你可以在新建虚拟机器时定义该区域的设置,也可在虚拟机启动后修改该区域的配置。

1.5  Xen的组件
Red Hat Enterprise Linux 5 提供的 Xen 包含了下列几项 RPM 软件包。
xen:这是Xen的主程序,以及执行Xen必备的组件。
kernel-xen:这是针对Xen改写的Linux内核软件包。
libvirt:提供虚拟化所需的链接库及管理工具。
python-virtinst:文字接口建立并安装虚拟机的工具。
virt-manager:一个图形化的Xen综合管理工具。
上述的软件包分布于虚拟化软件包群组中。如果使用yum安装,则虚拟化软件包群组名称为Virtualization。


2.1  安装虚拟化子系统

首先,你得安装虚拟化子系统,包含Xen及其所必须的组件。在Red Hat Enterprise Linux 5 中安装Xen子系统有两种方法。
通过"新增卸载软件(system-config-packages)"
你可以在GNOME桌面中依次选择【应用程序】→【添加/删除软件】命令,利用【添加/删除软件】这个工具程序来安装虚拟化子系统。此时,请选择【浏览】页面中左方的【虚拟化】复选框,然后单击【调用】按钮,即可安装完整的Xen子系统。
通过yum
使用yum安装Virtualization这个软件包群组。Virtualization软件包群组中包含所有Xen的组件,因此,你只需利用yum groupinstall便可安装Xen的所有组件。
如果你不是Red Hat Enterprise Linux 的合法用户,或者你安装Red  Hat Enterprise Linux 时未输入安装号码(Installation Number),那么你是无法安装虚拟化子系统的。
以下是我使用yum安装Xen虚拟化子系统的示范。
 [root@linux ~]# yum -d 0 -y groupinstall 'Virtualization'
rhel-i386-server-5         100% |=========================|    1.4 KB 00:00
gnome-applet-vm-0.1.2-1.e  100% |=========================|    8.6 KB 00:00
xen-3.0.3-25.el5.i386.rpm   100% |=========================| 82 KB 00:00
Virtualization-en-US-5.0.    100% |=========================| 23 KB 00:00
libvirt-0.1.8-15.el5.i386     100% |=========================| 14 KB 00:00
kernel-xen-2.6.18-53.el5.    100% |=========================|  252 KB 00:01
virt-manager-0.2.6-7.el5.    100% |=========================| 26 KB 00:00
libvirt-python-0.1.8-15.e    100% |=========================| 11 KB 00:00
python-virtinst-0.99.0-2.    100% |=========================|    6.8 KB 00:00  
(6/8): kernel-xen-2.6.18-    100% |=========================|  14 MB 01:01
Installing: kernel-xen                     ######################### [1/8] 
Installing: Virtualization-en-US             ######################### [2/8] 
Installing: python-virtinst                     #########################[3/8] 
Installing: libvirt                         #########################[4/8] 
Installing: xen                             #########################[5/8] 
Installing: libvirt-python                     #########################[6/8] 
Installing: virt-manager                     ######################## [7/8] 
Installing: gnome-applet-vm                 #########################[8/8]
[root@linux ~]#

2.2  启动 kernel-xen 内核

第二个步骤,你必须启动专为Xen打造的Linux内核。
Red Hat Enterprise Linux 5提供了一个名为kernel-xen 的软件包,这个软件包存储了执行 Xen所需的Linux内核。因此,你必须检查是否有这个软件包,如果没有,请手动安装kernel-xen软件包。
此外,你还必须以kernel-xen软件包提供的内核来启动计算机。通常安装kernel-xen软件包后,Red Hat Enterprise Linux并不会将kernel-xen软件包设置为开机时默认的内核,因此,请在重新启动时手动选择kernel-xen的内核!
以下是我检查目前启动中内核版本的方法。
[root@linux ~]# rpm -q kernel-xen
kernel-xen-2.6.18-8.el5 ?①
[root@linux ~]# uname -r
2.6.18-8.el5xen  ②
[root@linux ~]#
① 由rpm的执行结果可知,我的Red Hat Enterprise Linux 系统已安装了kernel- xen软件包。
② uname -r 查询的结果指出,目前执行中的内核版本为2.6.18-8.el5.xen。版本数字的最后一段明显说明了这是Xen版本的内核。

2.3  启动 xend 服务

建置Domain-0的最后一个步骤,就是确保xend服务正常地执行。
xend 服务是Xen中用来管理所有虚拟机的一个服务,如果xend没有启动,你就无法使用本章提到的方法来管理所有的虚拟机。因此,为确保虚拟机能正常使用,你必须检查一下xend 的状态。如果xend尚未启动,请记得将其启动起来。
以下是我启动xend服务的示范。
[root@linux ~]# service xend status
xend is stopped ?①
[root@linux ~]# xm list
Error: Unable to connect to xend: Connection refused. Is xend running?  ②
[root@linux ~]# service xend start ?③
正在激活 xend:                                    [确定]
[root@linux ~]# service xend status
xend is running ?④
[root@linux ~]# chkconfig xend on ?⑤
[root@linux ~]#
① 目前我的 xend 服务为停止状态。
② 此时执行任何Xen管理工具都会失败。
③ 手动启动xend服务。
④ 检查一下xend服务是否成功启动了。
⑤ 为保证以后开机都能自动启动xend 服务,别忘记使用chkconfig启动xend。


推荐阅读
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • Linux环境下C语言实现定时向文件写入当前时间
    本文介绍如何在Linux系统中使用C语言编程,实现在每秒钟向指定文件中写入当前时间戳。通过此示例,读者可以了解基本的文件操作、时间处理以及循环控制。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • Python Django大学生心理健康管理系统开发(含源码、文档)
    本项目包含完整的源代码、设计文档、数据库结构以及详细的安装指南,旨在为计算机专业的学生提供一个全面的心理健康管理系统解决方案。 ... [详细]
  • 本文介绍了如何利用Python的高精度计算库mpmath实现π的100种不同计算方法。通过设置更高的精度和优化的数学函数,这些方法能够提供极其精确的结果。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 离线安装Grafana Cloudera Manager插件并监控CDH集群
    本文详细介绍如何离线安装Cloudera Manager (CM) 插件,并通过Grafana监控CDH集群的健康状况和资源使用情况。该插件利用CM提供的API接口进行数据获取和展示。 ... [详细]
  • CSS高级技巧:动态高亮当前页面导航
    本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ... [详细]
  • 精选多款高效实用软件及工具推荐
    本文介绍并推荐多款高效实用的软件和工具,涵盖系统优化、网络加速、多媒体处理等多个领域,并提供安全可靠的下载途径。 ... [详细]
  • 创邻科技成功举办Graph+X生态合作伙伴大会,30余家行业领军企业共聚杭州
    9月22日,创邻科技在杭州举办“Graph+X”生态合作伙伴大会,汇聚了超过30家行业头部企业的50多位企业家和技术领袖,共同探讨图技术的前沿应用与发展前景。 ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • 本文详细阐述了云主机流量的概念,探讨其对网站性能和安全的关键影响,并提供了优化配置的实用建议。 ... [详细]
author-avatar
彭伟波2013
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有