首页 > 代码库 > Xen虚拟化技术简介
Xen虚拟化技术简介
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。
鼎峰小胡
QQ.2881064155
Skype.2881064155@qq.com
Xen虚拟化技术简介