OpenSolaris xVM hypervisor配置實戰(zhàn)
原創(chuàng)一 xVM hypervisor簡介
1 Sun xVM hypervisor的基礎(chǔ)Xen
Xen的泛虛擬化
Xen將泛虛擬化引入傳統(tǒng)的個人電腦操作系統(tǒng)中,如Unix、Linux和Windows,它的出現(xiàn)和同時帶來的良好性能引起了其他虛擬化解決方案提供商的注意。
今天,泛虛擬化解決方案已經(jīng)獲得廣泛的認(rèn)同和支持,也成了各個虛擬化解決方案提供商們優(yōu)先考慮的方案之一。Xen將客戶機(jī)稱之為“虛擬域”,其中虛擬域0為服務(wù)域作為監(jiān)控程序的擴(kuò)展提供系統(tǒng)的管理服務(wù)。監(jiān)控程序擁有部分硬件IO資源,如定時器處理期間中斷IPI等。隔離的設(shè)備驅(qū)動域(Isolated Driver Domain)也擁有部分的IO資源,如硬盤網(wǎng)卡等(其中虛擬域0也為設(shè)備驅(qū)動域)。普通虛擬域只有虛擬的設(shè)備,而沒有直接的硬件IO資源。另外Xen也將監(jiān)控程序(Hypervisor)簡稱為“Xen”。泛虛擬化的Xen虛擬域運(yùn)行在較低的優(yōu)先級(Ring)上,只有hypervisor本身運(yùn)行在最高優(yōu)先級(Ring 0)上。Xen/x86泛虛擬化域的核心(Kernel)運(yùn)行在優(yōu)先級1上,而應(yīng)用程序運(yùn)行在優(yōu)先級3上。隨著硬件虛擬化技術(shù)的成熟(如Intel的酷睿系列處理器),今天的Xen也同時支持完全虛擬化的客戶機(jī),即沒有經(jīng)過修改的操作系統(tǒng)可以運(yùn)行在Xen上面。硬件虛擬化的客戶機(jī)運(yùn)行在經(jīng)過去特權(quán)(de-privileged)的優(yōu)先級上,但客戶機(jī)仍然能夠看到4個完全的優(yōu)先級(泛虛擬化的客戶機(jī)只能看到3個優(yōu)先級)。圖1所示為Xen 3.0的架構(gòu)。
圖1 Xen 3.0架構(gòu)
#p#
2 Sun xVM hypervisor架構(gòu)
xVM 是在 Xen 社區(qū)工作的基礎(chǔ)上開發(fā)的。系統(tǒng)運(yùn)行時,Xen 的作用是在硬件和操作系統(tǒng)之間進(jìn)行協(xié)調(diào)。 xVM 同時支持多個操作系統(tǒng)實例。每個實例被稱作一個“域(domain)”。有兩種不同的域:控制域(通常稱作 "dom0")和用戶域(稱作 "domU")。與 Solaris Zones 有所不同,xVM 的每個域都運(yùn)行操作系統(tǒng)的一個完整實例。xVM 管理程序虛擬系統(tǒng)硬件。這顯然意味著xVM 管理程序在用戶域之間共享并分割系統(tǒng)資源 ( CPU、 memory、 NIC 等等)。 管理程序執(zhí)行向操作系統(tǒng)提供虛擬平臺的低級管道,對于其他方面卻嚴(yán)重依賴于控制域。控制域決定創(chuàng)建哪些用戶域,訪問哪些資源,擁有多少內(nèi)存等等。此外,xVM 不包含任何設(shè)備驅(qū)動程序,所以控制域執(zhí)行所有的設(shè)備訪問。 Sun xVM hypervisor架構(gòu)如圖2。
圖2 Sun xVM hypervisor架構(gòu)
#p#
3 資源虛擬化
(1)中央處理器
xVM 分配給每個域一個或多個虛擬 CPU(vcpu)。每一個虛擬 CPU 包含與典型物理 CPU 相關(guān)的所有狀態(tài):緩存器、標(biāo)志、時間戳記等等。xVM 中的虛擬 CPU 就像 Solaris中的一個線程,是可以預(yù)訂的實體。當(dāng)輪到一個域在 CPU 上運(yùn)行時,xVM 把在 vcpu 中捕獲的狀態(tài)數(shù)據(jù)載入到物理 CPU 中并運(yùn)行。Solaris將每一個虛擬 CPU 視為一個物理 CPU。當(dāng) xVM 選擇一個虛擬 CPU 運(yùn)行時,xVM 將運(yùn)行 Solaris 在虛擬 CPU 上加載的線程。
(2) 內(nèi)存
Solaris 以頁的形式管理內(nèi)存。當(dāng) Solaris 直接在硬件上運(yùn)行時,使用系統(tǒng) BIOS 或固件所提供的物理頁楨號。當(dāng)系統(tǒng)在 xVM 下運(yùn)行時,管理程序提供可用的物理頁面列表。為了將子操作程序(guest OS)從硬件中分離出來,為了啟用像動態(tài)遷移這樣的特性,由 xVM 提供的頁楨號并不反應(yīng)被硬件識別的物理頁。而這些頁面反映系統(tǒng)內(nèi)存的優(yōu)化視圖。xVM 將訪客操作系統(tǒng)的“物理”頁號變換成硬件可識別的“機(jī)器楨號(MFN)”。
(3)設(shè)備
Dom0 Solaris 驅(qū)動等同于在裸機(jī)(bare metal )上運(yùn)行的 Solaris 驅(qū)動。在全虛擬化用戶域中,xVM 將捕獲任何寫到 I/O 空間或者任何 DMA 操作的內(nèi)容,并將這些請求直接轉(zhuǎn)發(fā)給控制域中合適的設(shè)備。這種捕獲和轉(zhuǎn)發(fā)操作開銷很大,所以對這類設(shè)備的訪問可能導(dǎo)致其性能下降,尤其是網(wǎng)絡(luò)設(shè)備更是如此。在泛虛擬化用戶域中,每個驅(qū)動都有一個在用戶域內(nèi)呈現(xiàn)的“前端”和在控制域內(nèi)運(yùn)行的“后端”,這里簡稱 PV 驅(qū)動。前端驅(qū)動從 Solaris 獲取標(biāo)準(zhǔn)請求并將其轉(zhuǎn)發(fā)給后端驅(qū)動。后端驅(qū)動在物理硬件上執(zhí)行請求,并將結(jié)果返回前端驅(qū)動,然后前端驅(qū)動通知 Solaris 請求完成。由于驅(qū)動清楚地識別到管理程序,它能夠和虛擬機(jī)以及后端驅(qū)動一起協(xié)作,使傳輸性能比全虛擬化環(huán)境下的驅(qū)動更好。
#p#
4 資源結(jié)構(gòu)與管理
(1) 管理程序
xVM 管理程序基于一個開放源碼的項目,并且 xVM 社區(qū)廣受 Linux 用戶歡迎。僅需少量修改,管理程序就可以使 Solaris 以控制域的方式運(yùn)行。
(2) Intel 平臺
根據(jù)對 xVM 的介紹,在 Intel 架構(gòu)上有兩種不同的平臺:i86pc 和 i86xpv。i86pc 平臺指運(yùn)行在裸機(jī)(bare metal )上的 Solaris 系統(tǒng)。i86xpv 平臺指運(yùn)行在準(zhǔn)虛擬化的 xVM 管理程序之上的 Solaris 系統(tǒng)。i86pc 和 i86xpv 這兩個平臺的相似之處多于不同之處。i86xpv平臺指定代碼在 sr/src/uts/i86xpv 下都可找到。絕大多數(shù)情況下,用戶和用戶端應(yīng)用程序根本識別不到運(yùn)行的平臺。在用戶級別上,在 i86pc 和 i86xpv 有完全一致的二進(jìn)制兼容性。如果你認(rèn)為有必要決定選用那個平臺,用 uname -i。
#p#
5 Sun xVM hypervisor硬件支持檢查
Xen虛擬機(jī)有兩種運(yùn)行方式,即完全虛擬化(full virtualization)和泛虛擬化(para virtualization)。完全虛擬化提供底層物理系統(tǒng)的全部抽象化,并創(chuàng)建一個新的虛擬系統(tǒng),客戶機(jī)操作系統(tǒng)可以在其中運(yùn)行,不需要修改客戶機(jī)操作系統(tǒng)或者應(yīng)用程序;泛虛擬化化需要修改運(yùn)行在虛擬機(jī)上的客戶機(jī)操作系統(tǒng)并提供相近的性能,但泛虛擬化的性能要比完全虛擬化更優(yōu)越。除了檢查中央處理器旗標(biāo)以外,也應(yīng)該使系統(tǒng)BIOS中的完整虛擬化生效。
(1) Linux 環(huán)境下檢查
如果用戶的計算機(jī)目前運(yùn)行Linux 系統(tǒng)。要檢查中央處理器是否支持使用如下命令:
# 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標(biāo)志出現(xiàn),表示擁有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標(biāo)志出現(xiàn),表示擁有AMD處理器的虛擬化支持。
(2) Windows 環(huán)境下檢查
如果用戶的計算機(jī)目前運(yùn)行Windows系統(tǒng)。可以下載一個應(yīng)用程序:securable 。securable能夠測試CPU能否支持完全虛擬化。圖3 是筆者Q6600的檢查結(jié)果。
圖3 筆者Q6600的檢查結(jié)果
對話框上Maximum Bit Length表示你的CPU是否支持64位模式;Hardware D.E.P表示是否支持基于硬件的數(shù)據(jù)保護(hù);Hardware Virtualization就是表示當(dāng)前CPU是否支持能否支持完全虛擬化。記住,只要有一項不滿足就不支持完全虛擬化。Hardware Virtualization 選項除了支持(Yes)和不支持(No)以外,還會有Locked OFF狀態(tài),表示主板鎖定了,需要更改Bios設(shè)置相關(guān)hardware virtualization(硬件虛擬化)開關(guān)。
(3) Solaris 和OpenSolaris
如果用戶的計算機(jī)目前運(yùn)行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配置實戰(zhàn)
1 xVM Server 基礎(chǔ)平臺的安裝和初始配置
配置opensolaris 為xVM control Domain (dom0)
通過下面的步驟,我們可以將OpenSolaris 2009.06版本配置為 xVM dom0
(4) 創(chuàng)建一個單獨(dú)的引導(dǎo)環(huán)境(非必須):
# 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
也可以通過圖形化的軟件包更新服務(wù)安裝 xvm-gui 軟件包集合來代替以上步驟。如圖4。
圖4 圖形化的軟件包更新服務(wù)安裝 xvm-gui 軟件包集合
# beadm umount xvm
(6) 為引導(dǎo)進(jìn)入xVM環(huán)境創(chuàng)建GRUB菜單條目
編輯GRUB菜單的menu.lst 文件,為使用xVM添加一個啟動選項。這一步對beadm 重新引導(dǎo)進(jìn)入xVM環(huán)境是必需的。
在/rpool/boot/grub/menu.lst文件中添加以下內(nèi)容:
#============================ 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 ============================
還可以修改引導(dǎo)環(huán)境修改為xvm,如圖5 。
圖5 可以修改引導(dǎo)環(huán)境修改為xvm
(7) 限制ZFS ARC
ZFS是集成在Solaris內(nèi)核中的,如果我們把ZFS看成是一塊磁盤陳列卡,那么ARC就是陳列卡上的緩存。實際上個人任務(wù)ZFS就是一種存儲虛擬化技術(shù),全球首個真正的RAID技術(shù)軟件實現(xiàn)。目前ZFS與dom0的互動能力比較差,很容易貪食所有的可用內(nèi)存。所以有必要對ARC使用的物理內(nèi)存進(jìn)行限制。方法是在/etc/system文件中加入以下條目:
set zfs:zfs_arc_max = 0x40000000
以上設(shè)定限制ARC可用的最大物理內(nèi)存為1GB。
此設(shè)定需要重新啟動系統(tǒng)來生效。
(8) 限制dom0內(nèi)存
通過此Xen選項可以限制dom0使用的物理內(nèi)存大小。例如在你有4G內(nèi)存的情況下,可以限制dom0可用的物理內(nèi)存為1G。
方法是修改/rpool/boot/grub/menu.lst文件中相應(yīng)的kernel$ 條目最后添加dom0_mem 選項:
kernel$ /boot/$ISADIR/xen.gz dom0_mem=1024M
#p#
2 重新啟動系統(tǒng)進(jìn)入xVM環(huán)境
現(xiàn)在grub菜單默認(rèn)是xvm。啟動后使用root用戶登錄。
#p#
3 打開 xVM 服務(wù):
#svcadm enable store
#svcadm enable xend
#svcadm enable console
#svcadm enable domains
#svcadm enable virtd
重啟系統(tǒng)后看一下 Xen 的內(nèi)核(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工具創(chuàng)建新虛擬主機(jī)(Guest Domain)
xVM 和xen一樣可以使用virt-install 命令行工具或virt-manager GUI工具來創(chuàng)建新的虛擬機(jī)(GuestDomain/DomU),下面首先使用virt-manager GUI工具創(chuàng)建虛擬主機(jī)。
(1) 準(zhǔn)備虛擬磁盤
ZFS Zvol 是一個虛擬block 設(shè)備,可以分配給xVM Guset Domain作為虛擬硬盤使用。
# zfs create -o compression=on -V 5G rpool/vm
(2)運(yùn)行virt-manager
從應(yīng)用程序菜單的系統(tǒng)工具菜單項中可以看到名為虛擬系統(tǒng)管理的項目。這個就是xen的GUI管理工具,單擊此條目后將出現(xiàn)一個窗口,選擇要連接的服務(wù)器(默認(rèn)為本機(jī))單擊“connect”即可連接到Xen Server(本機(jī)的Dom0),然后就能看到Virt-Manager的主界面如圖6。
圖6Virt-Manager的主界面
選中Domain-0 條目,在由鍵菜單中點(diǎn)擊“Detail”可查看Dom0 的系統(tǒng)資源詳細(xì)配置信息如圖7 。
圖7 Dom0 的運(yùn)行狀態(tài)
(3)使用全虛擬化建立一個Linux 虛擬機(jī)
下面示例Guest Domain(DomU,或通俗得稱:虛擬機(jī))的配置。
首先選擇主界面上的“新建”按鈕,隨后將看到新建虛擬機(jī)的向?qū)醉?,單?ldquo;前進(jìn)”按鈕。如圖8 。
圖8 “創(chuàng)建新的虛擬系統(tǒng)”對話框
輸入虛擬系統(tǒng)的名稱“vm01”,單擊“前進(jìn)”按鈕。打開 “選擇虛擬化方式”對話框,選中“Full Virtualized” (完全虛擬化)單選按鈕,然后單擊“前進(jìn)”
打開如圖9所示的“定位安裝介質(zhì)”對話框從ISO映像安裝,則指定ISO映像的位置,并且指定客戶機(jī)操作系統(tǒng)類型然后單擊“前進(jìn)”按鈕。
圖9 則指定ISO映像的位置
打開如圖10所示的“分配存儲空間”對話框,選擇“Normal Disk Partition”單選按鈕。鍵入剛才建立虛擬磁盤的位置,
然后單擊“前進(jìn)”按鈕。
圖10 “分配存儲空間”對話框
下面選擇DomU虛擬網(wǎng)卡要連接的網(wǎng)卡設(shè)備,默認(rèn)為橋接模式。打開如圖11所示的“分配內(nèi)存及CPU”對話框,根據(jù)實際情況為虛擬系統(tǒng)分配相應(yīng)的內(nèi)存和CPU數(shù)量,然后單擊“前進(jìn)”按鈕。
圖11 “分配內(nèi)存及CPU”對話框
下面打開如圖12 所示的“準(zhǔn)備就緒,開始安裝”對話框,包括新DomU 配置清單,單擊“Finish”開始DomU OS的安裝。
圖12 “準(zhǔn)備就緒,開始安裝”對話框
圖13是 建立新的虛擬機(jī)后的virt-manager 工作界面。可以看到vm01的資源占用情況。
圖13 建立新的虛擬機(jī)后的virt-manager 工作界面
圖14是Xen虛擬機(jī)中的一個Linux版本的界面,
圖14 是Xen虛擬機(jī)中的一個Linux版本的界面
#p#
5 使用命令行建立新的虛擬機(jī)
除了使用virt-manager 外還可以使用Xen 的命令建立虛擬機(jī)。下面看幾個例子:
l 從 ISO 文件(rhel-server-5.4-x86_64-dvd.iso)安裝rhel 5.4 客戶機(jī)
(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
……
幾分鐘后出現(xiàn)安裝界面如圖15 。
圖15 rhel 5.4安裝界面
限于篇幅過程從略,安裝完成界面如圖16 。
圖16 安裝完成界面
l 從 ISO 文件(osol-0906-x86.iso)安裝 OpenSoaris 客戶機(jī)
用 zfs 工具創(chuàng)建一個 volume 保存 guest 操作系統(tǒng)的 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 安裝
限于篇幅過程從略
進(jìn)入客戶機(jī):
# xm console vm01
如果要退出客戶機(jī) 的話,用 Ctrl + ] 就會回到主機(jī)。
l 從 ISO 文件(windowsxp.iso)安裝 Windows 客戶機(jī)
泛虛擬化不能安裝 windows操作系統(tǒng),要安裝 windows操作系統(tǒng) 需要使用全虛擬化 選項并且要有 CPU 的支持(Intel VT or AMD V)。服務(wù)器上面通常沒有圖形界面,所以圖形化安裝 windows 需要打開 vnc 服務(wù),并給 vnc 設(shè)置一個密碼,然后從 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 虛擬機(jī)管理命令xm
xm命令是用戶管理接口工具。這個程序可以建立、暫停和關(guān)閉domains。當(dāng)然,也可以列出當(dāng)前的domains,固定、激活vcpus,添加或者移除虛擬塊設(shè)備。
用法:
xm <子命令> [ARGS]
每個xm命令的基本格式是這樣的:
xm <子命令> <domain-id> [選項]
domain-id是domain的id或者domain的名字(domain會給解釋成domain-id),選項是子命令的特定選項。
xm常用子命令如下
xm list:所有已知的虛擬機(jī)列表
xm create:啟動一個非托管的虛擬機(jī)
xm help:所有可用的xm命令概述
xm top:提供所有虛擬機(jī)的狀態(tài)概貌
xm console:打開控制臺管理虛擬機(jī)
xm new:添加虛擬機(jī)到Xenbase托管環(huán)境
xm start:從Xenbase托管環(huán)境啟動虛擬機(jī)
xm destroy:像關(guān)掉電源那樣關(guān)閉虛擬機(jī)
xm shutdown:正確地關(guān)掉虛擬機(jī)
xm reboot:重新啟動虛擬機(jī)
xm pause:暫停虛擬機(jī)的活動而不釋放使用的內(nèi)存資源
xm unpause:激活使用xm pause命令暫停的虛擬機(jī)
xm save:保存虛擬機(jī)狀態(tài)到一個文件
xm restore:重新啟動已經(jīng)保存在文件里的虛擬機(jī)
主要ARGS如下
-c:在domain創(chuàng)建的同時裝在控制臺。這個選項在domain崩潰的時候很有用。該選項允許你連接至文本控制臺來協(xié)助解除故障。
-a:關(guān)閉系統(tǒng)里的所有域。
-w:用于等待域的完全關(guān)閉。
Count:必須指定[count](以mb為單位)。
Vcpu:希望指定的vcpu,[cpus]是目標(biāo)。
—long:提供你所指定的域的更詳細(xì)的信息。
—label:添加了一個字段來顯示label狀態(tài)。
Policy:二進(jìn)制策略,保存為二進(jìn)制文件。
#p#
7 Sun虛擬化項目比較
xVM Hypervisor和sun 平臺下其他虛擬機(jī)比較
表1 Sun幾種虛擬化技術(shù)的比較
比較項目 |
資源管理 |
Zone |
xVM Hypervisor |
LDoms |
VirtualBox |
QEMU |
性能 |
高 |
高 |
中等 |
中等 |
低 |
低 |
效率 |
高 |
高 |
中等 |
中等 |
低 |
低 |
可伸縮性 |
高 |
高 |
中等 |
中等 |
低 |
中 |
隔離程度 |
低 |
中等 |
高 |
高 |
高 |
高 |
靈活性 |
低 |
中等 |
高 |
高 |
高 |
高 |
可移植性 |
中等 |
中等 |
低 |
低 |
高 |
高 |
使用難易 |
低 |
中等 |
低 |
低 |
高 |
中 |