OpenSolaris xVM hypervisor配置实战

原创
云计算 虚拟化
Xen将泛虚拟化引入传统的个人电脑操作系统中,如Unix、Linux和Windows,它的出现和同时带来的良好性能引起了其他虚拟化解决方案提供商的注意。

一 xVM hypervisor简介

1 Sun xVM hypervisor的基础Xen

Xen的泛虚拟化

Xen将泛虚拟化引入传统的个人电脑操作系统中,如Unix、Linux和Windows,它的出现和同时带来的良好性能引起了其他虚拟化解决方案提供商的注意。

今天,泛虚拟化解决方案已经获得广泛的认同和支持,也成了各个虚拟化解决方案提供商们优先考虑的方案之一。Xen将客户机称之为“虚拟域”,其中虚拟域0为服务域作为监控程序的扩展提供系统的管理服务。监控程序拥有部分硬件IO资源,如定时器处理期间中断IPI等。隔离的设备驱动域(Isolated Driver Domain)也拥有部分的IO资源,如硬盘网卡等(其中虚拟域0也为设备驱动域)。普通虚拟域只有虚拟的设备,而没有直接的硬件IO资源。另外Xen也将监控程序(Hypervisor)简称为“Xen”。泛虚拟化的Xen虚拟域运行在较低的优先级(Ring)上,只有hypervisor本身运行在最高优先级(Ring 0)上。Xen/x86泛虚拟化域的核心(Kernel)运行在优先级1上,而应用程序运行在优先级3上。随着硬件虚拟化技术的成熟(如Intel的酷睿系列处理器),今天的Xen也同时支持完全虚拟化的客户机,即没有经过修改的操作系统可以运行在Xen上面。硬件虚拟化的客户机运行在经过去特权(de-privileged)的优先级上,但客户机仍然能够看到4个完全的优先级(泛虚拟化的客户机只能看到3个优先级)。图1所示为Xen 3.0的架构。
 

 

图1 Xen 3.0架构

#p#

2 Sun xVM hypervisor架构

xVM 是在 Xen 社区工作的基础上开发的。系统运行时,Xen 的作用是在硬件和操作系统之间进行协调。 xVM 同时支持多个操作系统实例。每个实例被称作一个“域(domain)”。有两种不同的域:控制域(通常称作 "dom0")和用户域(称作 "domU")。与 Solaris Zones 有所不同,xVM 的每个域都运行操作系统的一个完整实例。xVM 管理程序虚拟系统硬件。这显然意味着xVM 管理程序在用户域之间共享并分割系统资源 ( CPU、 memory、 NIC 等等)。 管理程序执行向操作系统提供虚拟平台的低级管道,对于其他方面却严重依赖于控制域。控制域决定创建哪些用户域,访问哪些资源,拥有多少内存等等。此外,xVM 不包含任何设备驱动程序,所以控制域执行所有的设备访问。 Sun xVM hypervisor架构如图2。
 

 

图2 Sun xVM hypervisor架构

#p#

3 资源虚拟化

(1)中央处理器

xVM 分配给每个域一个或多个虚拟 CPU(vcpu)。每一个虚拟 CPU 包含与典型物理 CPU 相关的所有状态:缓存器、标志、时间戳记等等。xVM 中的虚拟 CPU 就像 Solaris中的一个线程,是可以预订的实体。当轮到一个域在 CPU 上运行时,xVM 把在 vcpu 中捕获的状态数据载入到物理 CPU 中并运行。Solaris将每一个虚拟 CPU 视为一个物理 CPU。当 xVM 选择一个虚拟 CPU 运行时,xVM 将运行 Solaris 在虚拟 CPU 上加载的线程。

(2) 内存

Solaris 以页的形式管理内存。当 Solaris 直接在硬件上运行时,使用系统 BIOS 或固件所提供的物理页桢号。当系统在 xVM 下运行时,管理程序提供可用的物理页面列表。为了将子操作程序(guest OS)从硬件中分离出来,为了启用像动态迁移这样的特性,由 xVM 提供的页桢号并不反应被硬件识别的物理页。而这些页面反映系统内存的优化视图。xVM 将访客操作系统的“物理”页号变换成硬件可识别的“机器桢号(MFN)”。

(3)设备

Dom0 Solaris 驱动等同于在裸机(bare metal )上运行的 Solaris 驱动。在全虚拟化用户域中,xVM 将捕获任何写到 I/O 空间或者任何 DMA 操作的内容,并将这些请求直接转发给控制域中合适的设备。这种捕获和转发操作开销很大,所以对这类设备的访问可能导致其性能下降,尤其是网络设备更是如此。在泛虚拟化用户域中,每个驱动都有一个在用户域内呈现的“前端”和在控制域内运行的“后端”,这里简称 PV 驱动。前端驱动从 Solaris 获取标准请求并将其转发给后端驱动。后端驱动在物理硬件上执行请求,并将结果返回前端驱动,然后前端驱动通知 Solaris 请求完成。由于驱动清楚地识别到管理程序,它能够和虚拟机以及后端驱动一起协作,使传输性能比全虚拟化环境下的驱动更好。

#p#

4 资源结构与管理

(1) 管理程序

xVM 管理程序基于一个开放源码的项目,并且 xVM 社区广受 Linux 用户欢迎。仅需少量修改,管理程序就可以使 Solaris 以控制域的方式运行。

(2) Intel 平台

根据对 xVM 的介绍,在 Intel 架构上有两种不同的平台:i86pc 和 i86xpv。i86pc 平台指运行在裸机(bare metal )上的 Solaris 系统。i86xpv 平台指运行在准虚拟化的 xVM 管理程序之上的 Solaris 系统。i86pc 和 i86xpv 这两个平台的相似之处多于不同之处。i86xpv平台指定代码在 sr/src/uts/i86xpv 下都可找到。绝大多数情况下,用户和用户端应用程序根本识别不到运行的平台。在用户级别上,在 i86pc 和 i86xpv 有完全一致的二进制兼容性。如果你认为有必要决定选用那个平台,用 uname -i。

#p#

5 Sun xVM hypervisor硬件支持检查

Xen虚拟机有两种运行方式,即完全虚拟化(full virtualization)和泛虚拟化(para virtualization)。完全虚拟化提供底层物理系统的全部抽象化,并创建一个新的虚拟系统,客户机操作系统可以在其中运行,不需要修改客户机操作系统或者应用程序;泛虚拟化化需要修改运行在虚拟机上的客户机操作系统并提供相近的性能,但泛虚拟化的性能要比完全虚拟化更优越。除了检查中央处理器旗标以外,也应该使系统BIOS中的完整虚拟化生效。

(1) Linux 环境下检查

如果用户的计算机目前运行Linux 系统。要检查中央处理器是否支持使用如下命令:

# grep vmx /proc/cpuinfo

flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm

如果一个vmx标志出现,表示拥有Intel处理器的虚拟化支持。

如果是AMD的中央处理器;则使用如下命令:

# grep svm /proc/cpuinfo

flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dt acpi mmx fxsr sse sse2 ss ht tm syscall nx mmtext fxsr_opt rdtscp lm 3dnowext pni cx16 lahf_lm cmp_legacy svm cr8_legacy

如果一个svm标志出现,表示拥有AMD处理器的虚拟化支持。

(2) Windows 环境下检查

如果用户的计算机目前运行Windows系统。可以下载一个应用程序:securable 。securable能够测试CPU能否支持完全虚拟化。图3 是笔者Q6600的检查结果。
 

 

图3 笔者Q6600的检查结果

对话框上Maximum Bit Length表示你的CPU是否支持64位模式;Hardware D.E.P表示是否支持基于硬件的数据保护;Hardware Virtualization就是表示当前CPU是否支持能否支持完全虚拟化。记住,只要有一项不满足就不支持完全虚拟化。Hardware Virtualization 选项除了支持(Yes)和不支持(No)以外,还会有Locked OFF状态,表示主板锁定了,需要更改Bios设置相关hardware virtualization(硬件虚拟化)开关。

(3) Solaris 和OpenSolaris

如果用户的计算机目前运行Solaris 和OpenSolaris 。可以使用一个脚本 。

在此下载http://blogs.sun.com/JoeBonasera/entry/detecting_hardware_virtualization_support_for

把该文件另存为cpuid.c

使用gcc编译该脚本

#gcc -o cpuid.c -o cpuid

# ./cpuid

yes

如果显示yes则可以使用完全虚拟化。

#p#

二 Sun xVM hypervisor配置实战

 1 xVM Server 基础平台的安装和初始配置

配置opensolaris 为xVM control Domain (dom0)

通过下面的步骤,我们可以将OpenSolaris 2009.06版本配置为 xVM dom0

(4) 创建一个单独的引导环境(非必须):

# beadm create -a -d xvm xvm

(5) 安装必要的软件包:

# beadm mount xvm /tmp/xvm-be

# pkg -R /tmp/xvm-be install SUNWxvm SUNWlibvirt SUNWxvmdom SUNWxvmhvm SUNWvirt-manager SUNWvirtinst SUNWvdisk SUNWvncviewer

也可以通过图形化的软件包更新服务安装 xvm-gui 软件包集合来代替以上步骤。如图4。

 

图4 图形化的软件包更新服务安装 xvm-gui 软件包集合

# beadm umount xvm

(6) 为引导进入xVM环境创建GRUB菜单条目

编辑GRUB菜单的menu.lst 文件,为使用xVM添加一个启动选项。这一步对beadm 重新引导进入xVM环境是必需的。

在/rpool/boot/grub/menu.lst文件中添加以下内容:

#============================ ADD For xVM===============================

title xvm

findroot (pool_rpool,0,a)

bootfs rpool/ROOT/xvm

kernel$ /boot/$ISADIR/xen.gz

module$ /platform/i86xpv/kernel/$ISADIR/unix /platform/i86xpv/kernel/$ISADIR/unix -B $ZFS-BOOTFS,console=text

module$ /platform/i86pc/$ISADIR/boot_archive

#========================== End of LIBBE entry ============================

还可以修改引导环境修改为xvm,如图5 。
 

 

图5 可以修改引导环境修改为xvm

(7) 限制ZFS ARC

ZFS是集成在Solaris内核中的,如果我们把ZFS看成是一块磁盘陈列卡,那么ARC就是陈列卡上的缓存。实际上个人任务ZFS就是一种存储虚拟化技术,全球首个真正的RAID技术软件实现。目前ZFS与dom0的互动能力比较差,很容易贪食所有的可用内存。所以有必要对ARC使用的物理内存进行限制。方法是在/etc/system文件中加入以下条目:

set zfs:zfs_arc_max = 0x40000000

以上设定限制ARC可用的最大物理内存为1GB。

此设定需要重新启动系统来生效。

(8) 限制dom0内存

通过此Xen选项可以限制dom0使用的物理内存大小。例如在你有4G内存的情况下,可以限制dom0可用的物理内存为1G。

方法是修改/rpool/boot/grub/menu.lst文件中相应的kernel$ 条目最后添加dom0_mem 选项:

kernel$ /boot/$ISADIR/xen.gz dom0_mem=1024M

#p#

2 重新启动系统进入xVM环境

现在grub菜单默认是xvm。启动后使用root用户登录。

#p#

3 打开 xVM 服务:

#svcadm enable store

#svcadm enable xend

#svcadm enable console

#svcadm enable domains

#svcadm enable virtd

重启系统后看一下 Xen 的内核(i86xpv)以及 xend 是否启动:

# uname -a

SunOS vpsee 5.11 snv_111b i86pc i386 i86xpv

# xm list

Name ID Mem VCPUs State Time(s)

Domain-0 0 1879 2 r----- 24.0

#p#

4 使用virt-manager GUI工具创建新虚拟主机(Guest Domain)

xVM 和xen一样可以使用virt-install 命令行工具或virt-manager GUI工具来创建新的虚拟机(GuestDomain/DomU),下面首先使用virt-manager GUI工具创建虚拟主机。

(1) 准备虚拟磁盘

ZFS Zvol 是一个虚拟block 设备,可以分配给xVM Guset Domain作为虚拟硬盘使用。

# zfs create -o compression=on -V 5G rpool/vm
(2)运行virt-manager

从应用程序菜单的系统工具菜单项中可以看到名为虚拟系统管理的项目。这个就是xen的GUI管理工具,单击此条目后将出现一个窗口,选择要连接的服务器(默认为本机)单击“connect”即可连接到Xen Server(本机的Dom0),然后就能看到Virt-Manager的主界面如图6。

 

图6Virt-Manager的主界面

选中Domain-0 条目,在由键菜单中点击“Detail”可查看Dom0 的系统资源详细配置信息如图7 。
 

 

图7 Dom0 的运行状态

(3)使用全虚拟化建立一个Linux 虚拟机

下面示例Guest Domain(DomU,或通俗得称:虚拟机)的配置。

首先选择主界面上的“新建”按钮,随后将看到新建虚拟机的向导首页,单击“前进”按钮。如图8 。
 

 

图8 “创建新的虚拟系统”对话框

输入虚拟系统的名称“vm01”,单击“前进”按钮。打开 “选择虚拟化方式”对话框,选中“Full Virtualized” (完全虚拟化)单选按钮,然后单击“前进”

打开如图9所示的“定位安装介质”对话框从ISO映像安装,则指定ISO映像的位置,并且指定客户机操作系统类型然后单击“前进”按钮。

 

图9 则指定ISO映像的位置

打开如图10所示的“分配存储空间”对话框,选择“Normal Disk Partition”单选按钮。键入刚才建立虚拟磁盘的位置,

然后单击“前进”按钮。
 

 

图10 “分配存储空间”对话框

下面选择DomU虚拟网卡要连接的网卡设备,默认为桥接模式。打开如图11所示的“分配内存及CPU”对话框,根据实际情况为虚拟系统分配相应的内存和CPU数量,然后单击“前进”按钮。

 

图11 “分配内存及CPU”对话框

下面打开如图12 所示的“准备就绪,开始安装”对话框,包括新DomU 配置清单,单击“Finish”开始DomU OS的安装。

 

图12 “准备就绪,开始安装”对话框

图13是 建立新的虚拟机后的virt-manager 工作界面。可以看到vm01的资源占用情况。
 

 

图13 建立新的虚拟机后的virt-manager 工作界面

图14是Xen虚拟机中的一个Linux版本的界面,
 

 

图14 是Xen虚拟机中的一个Linux版本的界面 

#p#

5 使用命令行建立新的虚拟机

除了使用virt-manager 外还可以使用Xen 的命令建立虚拟机。下面看几个例子:

l 从 ISO 文件(rhel-server-5.4-x86_64-dvd.iso)安装rhel 5.4 客户机

(1) 建立一个15GB zfs文件卷

# zfs create -b 4k -V 15G rpool/redhat.zvol

(2)挂载ISO文件
# mount -F hsfs /rpool/ISO/rhel-server-5.4-x86_64-dvd.iso /cdrom

# share -o ro /cdrom

(3)开始安装

这里笔者的DNS 名称是cjh1
# virt-install --name "Redhat" --disk path=/dev/zvol/dsk/rpool /redhat.zvol --paravirt --ram 1024 --os-type linux --os-variant rhel5 --location nfs:cjh1:/cdrom –nographics
The result:
Starting install...
Retrieving file .treeinfo 100% |=========================| 442 B 00:00
Retrieving file vmlinuz.. 100% |=========================| 1.9 MB 00:00
Retrieving file initrd.im 100% |=========================| 7.1 MB 00:00
Creating domain... 0 B 00:01
Connected to domain 67
Escape character is '^]'
Bootdata ok (command line is method=nfs:pgt01:/cdrom)
Linux version 2.6.18-164.el5xen (mockbuild@x86-003.build.bos.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Tue Aug 18 15:59:52 EDT 2009
BIOS-provided physical RAM map:
Xen: 0000000000000000 - 0000000040800000 (usable)
No mptable found.
Built 1 zonelists. Total pages: 264192
Kernel command line: method=nfs:pgt01:/cdrom
Initializing CPU#0
……
几分钟后出现安装界面如图15 。
 

 

图15 rhel 5.4安装界面

限于篇幅过程从略,安装完成界面如图16 。
 

 

图16 安装完成界面

l 从 ISO 文件(osol-0906-x86.iso)安装 OpenSoaris 客户机

用 zfs 工具创建一个 volume 保存 guest 操作系统的 image文件:

# zfs create -o compression=on -V 9G rpool/vm1

# virt-install --nographics -p -r 1024 -n vm01 -f /dev/zvol/dsk/rpool/vm1 -l /export/home/cjh/osol-0906-x86.iso

注意这里 -p 选项是 paravirtualized 安装

限于篇幅过程从略

进入客户机:

# xm console vm01
如果要退出客户机 的话,用 Ctrl + ] 就会回到主机。

l 从 ISO 文件(windowsxp.iso)安装 Windows 客户机

泛虚拟化不能安装 windows操作系统,要安装 windows操作系统 需要使用全虚拟化 选项并且要有 CPU 的支持(Intel VT or AMD V)。服务器上面通常没有图形界面,所以图形化安装 windows 需要打开 vnc 服务,并给 vnc 设置一个密码,然后从 vnc client 登录后就可以看到 windows 的安装界面了:
# svccfg -s xvm/xend setprop config/vnc-listen = astring: 192.168.0.11
# svccfg -s xvm/xend setprop config/vncpasswd = astring: password
# zfs create -o compression=on -V 9G rpool/vm2

# virt-install -v --vnc -n vm02 -r 512 -f /dev/zvol/dsk/rpool/vm2 -c /export/home/cjh/windowsxp.iso --os-type=windows
限于篇幅过程从略

#p#

6 虚拟机管理命令xm

xm命令是用户管理接口工具。这个程序可以建立、暂停和关闭domains。当然,也可以列出当前的domains,固​定​、激活vcpus,添加或者移除虚拟块设备。

用法:

xm <子命令> [ARGS]

每个xm命令的基本格式是这样的:

xm <子命令> <domain-id> [选项]

domain-id是domain的id或者domain的名字(domain会给解释成domain-id),选项是子命令的特定选项。

xm常用子命令如下

  xm list:所有已知的虚拟机列表

  xm create:启动一个非托管的虚拟机

  xm help:所有可用的xm命令概述

  xm top:提供所有虚拟机的状态概貌

  xm console:打开控制台管理虚拟机

  xm new:添加虚拟机到Xenbase托管环境

  xm start:从Xenbase托管环境启动虚拟机

  xm destroy:像关掉电源那样关闭虚拟机

  xm shutdown:正确地关掉虚拟机

  xm reboot:重新启动虚拟机

  xm pause:暂停虚拟机的活动而不释放使用的内存资源

  xm unpause:激活使用xm pause命令暂停的虚拟机

  xm save:保存虚拟机状态到一个文件

xm restore:重新启动已经保存在文件里的虚拟机

主要ARGS如下

-c:在domain创建的同时装在控制台。这个选项在domain崩溃的时候很有用。该选​项​允​许​你​连​接​至​文​本​控​制​台​来​协​助​解​除​故​障​。​

-a:关​闭​系​统​里​的​所​有​域​。​

-w:​用​于​等​待​域​的​完​全​关​闭​。​

Count:必​须​指​定[count](以mb为​单​位​)。​

Vcpu:​希​望​指​定​的vcpu,[cpus]是​目​标​。​

​—long:提​供​你​所​指​定​的​域​的​更​详​细​的​信​息​。​

—label:​添​加​了​一​个​字​段​来​显​示label状​态​。

Policy:二​进​制​策​略,​保​存​为​二​进​制​文​件。

#p#

7 Sun虚拟化项目比较

xVM Hypervisor和sun 平台下其他虚拟机比较

表1 Sun几种虚拟化技术的比较 

 

 

比较项目

资源管理

Zone

xVM Hypervisor

LDoms

VirtualBox

QEMU

性能

中等

中等

效率

中等

中等

可伸缩性

中等

中等

隔离程度

中等

灵活性

中等

可移植性

中等

中等

使用难易

中等

 

 

 

责任编辑:王勇 来源: 51CTO
相关推荐

2009-06-03 16:10:34

OpenSolaris

2009-02-16 17:10:17

OpenSolarisLinux 挑战

2010-08-13 10:19:46

2009-06-14 08:34:53

OpenSolaris开源

2010-01-26 13:43:05

2013-01-22 11:39:05

2013-01-08 10:43:00

2010-08-19 09:10:53

SolarisOpenSolaris甲骨文

2011-04-12 09:13:51

OpenIndianaSolaris替代品

2010-04-16 10:08:26

OpenSolaris甲骨文

2015-09-30 10:12:19

hypervisor

2015-09-14 09:24:52

hypervisor虚拟化

2020-12-07 08:00:00

服务器Hypervisor数据中心

2009-06-08 10:47:34

SunOpenSolaris测试

2012-06-26 09:14:08

OpenSolaris

2010-07-07 14:53:00

OpenSolaris

2010-08-16 09:47:06

2009-04-23 18:06:24

Linux甲骨文Sun

2010-07-08 10:56:53

VMware Viewhypervisor

2010-07-08 11:02:49

VMware Viewhypervisor
点赞
收藏

51CTO技术栈公众号