热门标签 | 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高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
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社区 版权所有