-----本文大纲
Xen简介
Xen体系结构
Xen布署(Centos 6.5)
-------------
一、Xen简介
Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达100个满特征的操作系统。操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。
二、Xen体系结构
同其它的硬件级虚拟化软件(VMware,Virtual PC)一样,在Xen系统中,存在一个轻量级的软件层,向运行在它之上的虚拟机提供虚拟硬件资源,同时分配和管理这些资源,并保证虚拟机之间的相互隔离。这个轻量级的软件层称为虚拟机管理器(VMM)。在Xen系统中,VMM又称为管理程序(Xen Hypervisor)或简称Xen,而其上的虚拟机被称为虚拟域(Domain).
第一层 Xen Hypervisor
Xen Hypervisor位于操作系统与硬件之间,为其上运行的操作系统内核提供虚拟化的硬件环境。Xen采用混合模式(Hybrid Model),因此在Xen上众多Domain中存在一个特权权域(Privileged Domain)用来辅助Xen管理其它Domain,提供相应虚拟资源服务,特别是其它Domain对I/O设备的访问,这个特权域称为Domain 0 (Dom0),而其它则称为DomainU (DomU).
Xen向Domain提供了一个抽象层(包含管理和虚拟机硬件的API)。其中Dom0拥有真实的设备驱动(Native Device Driver, 原生设备驱动),能够直接访问物理硬件,它负责与Xen提供的管理API交互,并通过用户模式下的管理工具来管理Xen的虚拟机环境,启支和停止其它Domain,并通过控制接口(Control Interface)控制其它的Domain的CPU调度、内存分配以及设备访问,如物理磁盘存储和网络接口等,同其它虚拟机系统一样,在Domain中运行的操作系统也称为客户操作系统(Guest OS),在半虚拟化中这些Guset OS的内核己做了相应用修改,因此Xen中Guest OS一般都会加上“Xeno”前缀;在Xen系统中,Xen向Domain提供了基本的虚拟硬件(VCPU、虚拟MMU)和基本机制(事件通道);同时向Dom0提供了虚拟域管理API(控制接口),使Dom0能够利用运行在其它用户空间的管理工具(控制软件)控制和管理其他Domain,对于Domain对设备的访问,Xen提供了相应的硬件接口(安全硬件接口),以保证设备访问的安全进行。
-
控制接口
Xen提供的控制接口仅能被Dom0使用,用以帮助Dom0控制和管理其它的Domain.通过控制接口,Dom0不仅能够创建、销毁Domain,控制 Domain的运行、暂停、恢复以及迁移,还能够实现对其他Domain的CPU调度、内存分配以及设备访问,
-
安全硬件接口
作为Xen核心组件之一,安全硬件硬件接口(Safe Hardware Interface)需要完成除虚拟CPU、MMU之外的所有硬件虚拟工作,包括DMA/IO、驱动程序、虚拟的PCI地址空间配置、虚拟硬件中断等。安全硬件接口只能被拥有原生驱动的(Dom0、IDD)使用,向其它他Domain仅提供虚拟硬件服务,这些工作是通过建立在拥有原生设备驱动的Domain和其他Domain之间的设备通道(Device Channel)来完成的,设备的通道并不是Xen系统中存在的独立概念,而是借由事件通道和共享内存来实现的。其它的Domain中的Guest OS通过设备通道向拥有原生设备驱动的Domain提交异步I/O请求,再由拥有原生设备驱动的Domain通过安全硬件接口完成I/O请求。
-
VCPU
为了能够使运行在Guest OS中的应用程序能够正常执行,Xen为每一个Domain建立了VCPU结构,用以接收Guest OS中传递的指令,其中,大部分的指令都被VCPU直接交给物理CPU执行,而对于特权指令和临界指令则需要经过确认后交由Xen代为执行。
-
MMU
虚拟MMU(Virtual MMU)被用帮助Guest OS完成地址转换,即由虚拟地址到机器地址的转换。在Xen系统中增加了客户物理地址层,使得地址层由原来的二层结构变成了三层结构,因此,Xen系统通过虚拟MMU仍然能够使用硬件MMU来完成地址转换。
-
事件通道
事件通道(Event Channel)用于Domain和Xen之间、Domian和Domain之间一种异步事件通知机制,用于处理Guest OS的虚拟中断、物理中断以及Domain之间通信等。事件通道是Xen系统的基本机制,与超级调用一起在Xen各个虚拟子系统中都到重格的作用。
-
控制面板
控制面板(Control Panel)是运行在Dom0中的一系列软件集合(如xm,xl),用于Dom0同Xen中的控制接口交互,完成对整个Xen系统的管理工作,相当于系统的总控台。
-
原生设备驱动
原生设备驱动是指原来操作系统中所使用的一般设备驱动。在Xen系统中,只有经过授权的Domain才有权使用原生的设备驱动访问真实的硬件设备。通过支持原生设备驱动,Xen能够最大限度的利用操作系统(如Linux)中的设备驱动,减少了Xen的开发难度,提高了效率,通过安全硬件接口,这些原生设备驱动能够被限定在特定的I/O空间中,为Domain提供设备访问服务。
-
前端/后端设备驱动
前端/后端设备驱动(Front-end/Back-end Device Driver)共同组成了Xen的分离设备驱动模型 (Split Drivice Model)负责完成Domain对硬件设备的访问,其中,位于其它Domain内的前端设备驱动将I/O请求发送给位于Dom0(或IDD)内的后端设备驱动,后端设备驱动接收I/O请求,并对其进行安全检查,然后将通过检查的I/O请求交由原生设备驱动处理。
-
设备模型
设备模型(Device Models)是在Xen支持硬件虚拟化技术后被引入Dom0的,它主要用来处理硬件虚拟域中Guest OS对机器设备的访问,设备模型访问的实现主要基于QEMU。
第二层 虚拟化域(Domain)
Xen3.0引入了硬件虚拟化技术,使得Xen能够支持不修改内核的Guest OS。运行未修改内核操作系统的Domain称为硬件虚拟机(Hardware Virtual Machine HVM)或硬件虚拟域。至此,运行在Xen之上的虚拟域包括四种类型:特权域(Privileged Domain,Dom0)、独立的设备设备驱动域(IDD)、硬件虚拟域(HVM)、非特权域(Unprivileged Domain,DomU)
-
特权域
Dom0作为Xen的“助手”,在整个Xen系统中是独一无二的。它随着Xen的启动而建立,是第一个运行在Xen上的虚拟域,Dom0拥有原生设备驱动,具有直接访问硬件设备的特权,并通过和Xen提供的控制接口的交互事控制和管理其它的虚拟域
运行在Dom0中的控制面板能够控制其它Domain的创建、销毁、配置和迁移;设备管理器则负责设备驱动的初始化和管理设备的访问,在访问设备过程中,与直接模拟真实的物理设备不同,Xen向其他Domain提供的是抽象的设备,例如,其它Domain通过网卡的前端驱动所看到的网卡设备仅仅是一个通用的网卡类设备,而非具体的某一个网卡,在接收到其它Domain通过网卡的前端驱动发送的I/O请求后,Dom0则利用网卡的后端驱动来确定具体的网卡,并交由原生驱动完成I/O请求。
-
独立设备驱动域(IDD)
在最简单的Xen结构中,只存在一个特权域Dom0,这时Xen就好像一个硬件设备抽象层,将复杂的x86架构隐藏起来,所有的硬件设备被Dom0的Guest OS控制,但这种结构存在很大的问题,若一个特殊设备驱动包含了一些漏洞,那它就有可能摧毁整个Dom0的内核,从而导致整个系统崩溃,为此,将设备驱动由Dom0移入另一个虚拟域中,一方面可降低Dom0的运行负载,另一个方面杨也可减低系统的风险,一旦虚拟域由于使用设备驱动出面故障,Dom0就可以很方便地重启该虚拟域,这些经过Dom0授权、能够使用特定设备驱动的虚拟域称为独立设备驱动域(Isolated Driver Domain,IDD)。可以避免由于DMA需求和I/O中断对Guest OS造成的影响。
-
硬件虚拟域(HVM)
Xen3.0支持运行未修改内核的Guest OS,但这需要使用特殊硬件技术的支技,例如Intel的VT-x或AMD的ADM-V技术。运行这些Guest OS的虚拟域称为硬件虚拟域;由于Guest OS没有修改内核,因此Guest OS不能直接支持Xen在半虚拟化下采用的分离设备驱动模型,这意味着Xen必须模拟出Guest OS能够支持的环境。若HVM中的Guest OS要使用Xen的半虚拟化技术,则必须先通过执行CPUID指令支访问一个特殊的虚拟寄存器和超级调用页面,然后同其他Domain中的Guest OS一样,通过修改超级调用页表来发布新的超级调用。
-
非特权域(DomU)
严格来讲,DomU是指除了Dom0之外的Domain,但由于IDD经过Dom0授权后能够使用设备驱动直接访问物理设备,因而IDD也属于“特权域”,因此,DomU是除了Dom0和IDD之外的Domain,包括前面提到的HVM;相对Dom0 来说,DomU受到了许多限制,首当其冲的是对硬件访问,无论是HVM还是一般的DomU都不能直接访问物理设备,必须借助于Dom0或IDD才能完成。
三、Xen的布署(Centos6.5)
1、下载Xen下kernel-xen
注:
只在将源指向Centos或163的Xen4的源就可以安装了
1
2
3
4
5
|
[root@dynamic xen-4.1.3]
#yum install -y xen-4.1.3-2.el6.x86_64.rpm \
xen-hypervisor-4.1.3-2.el6.x86_64.rpm xen-libs-4.1.3-2.el6.x86_64.rpm \
xen-runtime-4.1.3-2.el6.x86_64.rpm xen-licenses-4.1.3-2.el6.x86_64.rpm
[root@dynamic kernel]
#yum install -y kernel-xen-release-6-4.noarch.rpm \
kernel-xen-3.7.4-1.el6xen.x86_64.rpm kernel-xen-firmware-3.7.4-1.el6xen.x86_64.rpm
|
安装完成后,修改/boot/grub/grub.conf
1
2
3
4
|
root (hd0,0)
kernel
/xen
.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=2 dom0_vcpus_pin
module
/vmlinuz-3
.7.4-1.el6xen.x86_64 ro root=
/dev/mapper/vg0-root
rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0
/swap
rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0
/root
KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet
module
/initramfs-3
.7.4-1.el6xen.x86_64.img
|
将安装完的内核以模块方式加载;引导xen.gz,dom0的内存分配1G
之后重新启动系统
重启后使用xm命令查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
[root@essun ~]
# xm list
#运行此命令需要依赖于xend服务
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 2 r----- 88.4
[root@essun ~]
# service xend stop
Stopping xend daemon: [ OK ]
[root@essun ~]
# xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 2 r----- 89.3
#name:每一个域的独有名称
#ID:每一个域的身份标识
#Mem:分配的内存空间大小
#Vcpus:虚拟CPU的颗数
#State:Xen虚拟机的状态
#Time:占用CPU真正运行的时长
[root@essun ~]
# xl info
#显示主机的当前信息
host : essun.mariadb3.com
release : 3.7.4-1.el6xen.x86_64
version :
#1 SMP Wed Jan 23 15:52:51 EST 2013
machine : x86_64
nr_cpus : 1
nr_nodes : 1
cores_per_socket : 1
threads_per_core : 1
cpu_mhz : 2095
hw_caps : 0fabfbff:28100800:00000000:00003f40:90ba2203:00000000:00000001:00000000
virt_caps :
total_memory : 2895
free_memory : 1836
free_cpus : 0
xen_major : 4
xen_minor : 1
xen_extra : .3
xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p
xen_scheduler : credit
xen_pagesize : 4096
platform_params : virt_start=0xffff800000000000
xen_changeset : unavailable
xen_commandline : dom0_mem=1024M cpufreq=xen dom0_max_vcpus=2 dom0_vcpus_pin
cc_compiler : gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)
cc_compile_by : mockbuild
cc_compile_domain : crc.
id
.au
cc_compile_date : Fri Oct 12 13:39:11 EST 2012
xend_config_format : 4
|
可以使用xm/xl来管理DomU,常用子命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
[root@essun ~]
# xm help
Usage: xm <subcommand> [args]
Control, list, and manipulate Xen guest instances.
xm full list of subcommands:
console Attach to <Domain>'s console.
#连接到指定域的控制台
vncviewer Attach to <Domain>'s VNC server.
create Create a domain based on <ConfigFile>.
#根据配置文件创建虚拟机实例(默认的配置文件在/etc/xen下)
new Adds a domain to Xend domain management
delete Remove a domain from Xend domain management.
destroy Terminate a domain immediately.
#关闭一个实例
domid Convert a domain name to domain
id
.
domname Convert a domain
id
to domain name.
dump-core Dump core
for
a specific domain.
list List information about all
/some
domains.
mem-max Set the maximum amount reservation
for
a domain.
mem-
set
Set the current memory usage
for
a domain.
migrate Migrate a domain to another machine.
#将某一域迁移到其它机器上
pause Pause execution of a domain.
reboot Reboot a domain.
#重启某一个domain
rename Rename a domain.
reset Reset a domain.
restore Restore a domain from a saved state.
#还原某一个己建立的快照
resume Resume a Xend managed domain
save Save a domain state to restore later.
#为某一个域建立一个快照
shutdown
Shutdown a domain.
#shutdown属于正常关闭一个实例
start Start a Xend managed domain
#启动一个xend管理的实例
suspend Suspend a Xend managed domain
sysrq Send a sysrq to a domain.
trigger Send a trigger to a domain.
top
Monitor a host and the domains
in
real
time
.
#实时监控虚拟机的运行状态
unpause Unpause a paused domain.
uptime Print uptime
for
all
/some
domains.
usb-add Add the usb device to FV VM.
usb-del Delete the usb device to FV VM.
domstate get the state of a domain
vcpu-list List the VCPUs
for
all
/some
domains.
vcpu-pin Set
which
CPUs a VCPU can use.
vcpu-
set
Set the number of active VCPUs
for
allowed
for
the domain.
#其后命令省略中
<Domain> can either be the Domain Name or Id.
For
more
help on
'xm'
see the xm(1)
man
page.
For
more
help on
'xm create'
see the xmdomain.cfg(5)
man
page
|
到此,Xen虚拟机完装完成
下面利用网络安装DomU
第一步、下载引导文件
将initrd.img、vmlinuz引导文件到任意目录下。
第二步、创建Domain
修改配置文件 (/etc/xen)
可以将任意一个模板文件修改后保存为独立的Domain配置文件,只要修改如下以内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
root@essun ~]
# sed '/^$/d' /etc/xen/test1 |grep -v "#"
kernel =
"/tmp/vmlinuz"
#下载后引导文件的位置
ramdisk =
"/tmp/initrd.img"
memory = 2048
#Domain的内存大小
name =
"TEST1"
#Domain的名字
vcpus = 2
#虚拟两颗CPU
vif = [
'bridge=br0'
]
#桥设备
disk = [ '
#磁盘映像文件的位置,后端识别类型,读取方式
|
第三步、创建磁盘映像文件 (稀疏格式)
1
2
3
|
#mkdir /xen/vm1
#cd /xen/vm1
#dd if=/dev/zero of=test1.img bs=1M oflag=direct seek=102399 count=1
|
第四步、添加桥设备
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
[root@essun xen]
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0
[root@essun xen]
# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=none
#HWADDR="00:0C:29:1E:F8:F9"
NM_CONTROLLED=no
ONBOOT=
yes
TYPE=Bridge
#UUID="e467967d-404a-4830-9dda-1b74d1569727"
#HWADDR=00:0c:29:d2:39:cb
IPV6INIT=no
USERCTL=no
IPADDR=172.16.32.32
NETMASK=255.255.0.0
[root@essun xen]
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
#HWADDR="00:0C:29:1E:F8:F9"
NM_CONTROLLED=no
ONBOOT=
yes
TYPE=Ethernet
BRIDGE=br0
#UUID="e467967d-404a-4830-9dda-1b74d1569727"
IPV6INIT=no
USERCTL=no
#开启stp
[root@essun xen]
#brctl stp br0 on
|
第五步、启动服务
1
2
3
|
[root@essun xen]
#pwd
/etc/xen
[root@essun xen]
#xm create -c test1
|
安装过程之语言选择
指定URL
开始安装
是否启动VNC
如果选择启动,就要设定一个密码
连接VNC
安装完成会提示重启,但重启之前修改Domain配置文件
将以下内容
1
2
3
4
5
6
7
8
|
[root@essun ~]
# sed '/^$/d' /etc/xen/test1 |grep -v "#"
kernel =
"/tmp/vmlinuz"
ramdisk =
"/tmp/initrd.img"
memory = 2000
vcpus=2
name =
"TEST1"
vif = [
'bridge=br0'
]
disk = [
'file:/xen/vm1/test1.img,xvda,w'
|
替换为
1
2
3
4
5
6
7
8
9
|
[root@essun ~]
# sed '/^$/d' /etc/xen/test1 |grep -v "#"
memory = 1024
bootloader=
"/usr/bin/pygrub"
vcpus=1
on_reboot =
'restart'
on_crash =
'destroy'
name =
"TEST1"
vif = [
'bridge=br0'
]
disk = [
'file:/xen/vm1/test1.img,xvda,w'
|
之后就可以点reboot了 使用xl 查看
1
2
3
4
|
[root@essun ~]
# xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 2 r----- 1460.2
TEST1 3 1024 1 -b---- 14.2
|
虽然DomainTEST1重启完成,但要使配置生效必须使其重读,使用xm destroy TEST1命令终于TEST1。再次读取匹配文件
1
|
[root@essun ~]
#xm create -c /etc/xen/test1
|
也可以使用xm console TEST1连接到TEST1
到此Xen实例安装完成。