就像玩耍的小孩子一樣,您希望擁有一個屬於自己的沙盒,在那裡您可以隨意做任何事情。
通常通過 虛擬化(Virtualization)(或者“沙盒(sandbox)”)將同一硬件上的應用程序和系統彼此隔離開來。從硬件模擬到完全硬件虛擬化,Linux 支持很多種不同形式的虛擬化。在不斷增加的虛擬化技術列表中,Xen 是近來最引人注目的技術之一,它由劍橋大學開發。Xen 值得您關注,因為它具有空前的性能與安全性。
初識 Xen Xen 是在劍橋大學作為一個研究項目被開發出來的,它已經在開源社區中得到了極大的推動。Xen 是一款 半虛擬化(paravirtualizing) VMM(虛擬機監視器,Virtual Machine Monitor),這表示,為了調用系統管理程序,要有選擇地修改操作系統,然而卻不需要修改操作系統上運行的應用程序。雖然 VMWare 等其他虛擬化系統實現了完全的虛擬化(它們不必修改使用中的操作系統),但它們仍需要進行實時的機器代碼翻譯,這會影響性能。
由於 Xen 需要修改操作系統,所以您不能直接讓當前的 Linux 內核在 Xen 系統管理程序中運行,除非它已經移植到了 Xen 架構。不過,如果當前系統可以使用新的已經移植到 Xen 架構的 Linux 內核,那麼您就可以不加修改地運行現有的系統。
圖 1. 簡單的 Xen 架構
獲得 Xen 可以從 Xen 的項目主頁上獲得它的源代碼(請參閱 參考資料 部分的鏈接),但是,如果已經在使用某個 Linux 發行版本,那麼您或許能夠通過軟件包升級或者安裝來獲得 Xen。這些主流發行版本都包含了 Xen:
Fedora Core SUSE Linux Debian 可以獲得位於 Gentoo's bugzilla 的實驗用的 e-builds。 檢查您的發行版本 —— 如果它不在這個列表中,那麼您可能只能直接使用源代碼。除了安裝過程特定於發行版本之外,在任何發行版本上,Xen 中的所有工作都是相同的。
使用 Fedora Core 我有一個可以使用的 Fedora Core 3 安裝,為了保持本文的簡潔,我將討論如何在 Fedora Core 上安裝和運行系統。
盡管軟件包只是在最近才開始進行開發,但 Fedora 已經為大量 Xen 用戶所使用。由於有很多人嘗試在 Fedora 上使用 Xen,所以您可能成功地獲得大量的在線幫助。
安裝 Xen 為了幫助您迅速上手和使用,本節著重指出了 參考資料 部分中 Quick Start Guide 的要點。由於 Fedora 中正在融入 Xen 更新,所以隨著時間的推移,Quick Start Guide 將很可能會發生變化,希望 wiki 會保持對這些變化的更新。
首先,為基礎機器(base machine)進行最簡化的服務器安裝。這台基礎機器是您的系統管理程序,將不會運行任何服務器應用程序。您將可以在運行於此機器之上的 Xen 服務器中安裝所需要的軟件包,所以現在不需要安裝想要運行的應用程序。
系統開始運行後,您應該將其更新到 Fedora 的最新開發版本(稱為 rawhide)。要完成此任務,請遍歷 /etc/yum.repos.d/ 目錄中的元素,將除了 fedora-devel.repo 以外的所有元素都改為 enabled=0;將 fedora-devel.repo 改為 enabled=1。
建立了 yum 儲存庫(repository)後,需要將機器更新到 rawhide,以便您可以開始使用最新發布的 Xen。
清單 1. 將 FC3 更新到 rawhide 並安裝 Xen 軟件包
yum update
yum install xen kernel-xen0 kernel-xenU
然後,創建一個將要使用的虛擬文件系統。
清單 2. 格式化並建立 Xen 服務器文件系統
mkdir -p /xen/base dd if=/dev/zero of=/root/base.img bs=1M count=1 seek=1024 mkfs.ext3 /root/base.img mount -o loop /root/base.img /xen/base
格式化並掛載 Xen 服務器文件系統之後,下一個步驟是安裝必要的軟件包,以便在這些軟件包上運行某些程序。為了在 Xen 服務器上運行一個 Web 服務器,您應該安裝一組 Web-server 軟件包。(警告: 這將需要一段時間!您可以先運行 yum,然後出去散散步。)
清單 3. 安裝 Xen 服務器軟件包
yum --installroot=/xen/base -y groupinstall web-server \ --enablerepo=base --disablerepo=development
(現在應該去散步了。)
現在已經安裝了所有需要的軟件包,不過您應該去查看一個簡單的 fstab 文件,這個文件會告知 Xen 服務器它們將要獲得根(root)設備 sda1,將該設備作為根。根設備實際上是來自系統管理程序的一個虛擬的設備,但您的服務器不會知道這一點。
清單 4. Xen 服務器 fstab 文件
/dev/sda1 / ext3 defaults 1 1 none /dev/pts devpts gid=5,mode=620 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0
將這個文件寫入 /xen/base/etc/fstab。如果不是標准的 Fedora 安裝,那麼不會為您創建任何 fstab。預計 Fedora 的未來版本會包含處理此問題的工具。
最後,為了讓系統正確地運行,您應該做一些處理。目前,Xen 使用 initrd 時仍然存在問題,所以,如果想要啟動系統,則需要為自己創建一些設備代碼。然後,為了讓程序平穩運行,刪除 TLS 程序庫會有所幫助,因為目前它們與 Xen 沖突很嚴重。完成這個步驟後,可以卸載這個文件系統。
清單 5. 為開始運行所做的最後的處理
for i in console null zero ; do MAKEDEV -d /xen/base/dev -x $i ; done
mv /lib/tls /lib/tls.disabled mv /xen/base/lib/tls /xeb/base/lib/tls.disabled
umount /xen/base/
運行 Xen 既然已經細心地手工建立起了客戶系統,那麼您現在就可以真正重新啟動機器,開始使用 Xen 內核。您可能將會看到比平時多得多的打印輸出,並且您還會看到關於 TLS 程序庫(上一節中您刪除的那個會出問題的程序庫)的可怕的消息。
Xen 要求為運行的每個服務器准備配置文件。盡管您可以為所有服務器創建一個惟一的動態配置文件,但我還是建議您創建兩個靜態的配置文件,各用一個。如您所見,磁盤標簽告訴服務器您的文件映像是 sda1 設備。也指定了您所使用的 xenU 內核,以及服務器客戶將要獲得的內存。
清單 6. Xen 服務器配置文件 /etc/xen/base kernel ="/boot/vmlinuz-2.6.10-1.1141_FC4xenU" memory = 64 name = "BaseServer" nics = 1 disk = ['file:/root/base.img,sda1,w'] root = "/dev/sda1 ro"
/etc/xen/test kernel ="/boot/vmlinuz-2.6.10-1.1141_FC4xenU" memory = 64 name = "TestServer" nics = 1 disk = ['file:/root/test.img,sda1,w'] root = "/dev/sda1 ro"
要啟動並運行服務器,首先要使用命令 xend start 啟動 Xen 服務,然後使用命令 xm create base 通過基本配置文件創建 BaseServer。通過這些步驟,您將進入 Xen 客戶系統中,可以看到該系統已經啟動起來。不論何時,如果您想跳出客戶系統控制台,那麼按下 Ctrl-] 組合鍵就可以直接返回到系統管理程序控制台。
使用 Xen 現在您已經用了一些時間來編輯配置,並建立了運行兩個 Xen 服務器的系統。所有這些艱苦的工作完成後,接下來做什麼?
現在您擁有了一個系統的兩個副本,它們運行相同內核,在同一台機器上被虛擬化。如果 BaseServer 代表的是您希望正常運行 Web 服務的穩定環境,那麼 TestServer 代表的就是 Fedora rawhide 所提供的最新軟件更新。您可以隨意保持對 TestServer 系統的升級,嘗試所有新版本的軟件更新 —— 當您認為它足夠穩定時,可以將 TestServer 作為 BaseServer 來運行。
設置 BaseServer BaseServer 運行時,是修改將要運行的 httpd 服務的配置的好時機。您應該將 ssl.conf 文件移出 /etc/httpd/conf.d/ 目錄,以此來停用 ssl;否則,您將需要為服務器生成證書。另外,可能需要向系統添加一個 apache 用戶。
Xen 系統管理程序已經自動提供了一個可以使用的虛擬網絡設備。如果您可以在這個設備上運行 dhcp,那麼只需要執行 dhclient eth0,BaseServer 就會獲得 IP 地址。
設置 TestServer 設置了 BaseServer 的配置之後,在 BaseServer 控制台中執行 poweroff 以關閉該實例。如果您已經從 BaseServer 注銷,那麼可以使用 xm console BaseServer 重新進入它。
現在,通過 cp /root/base.img /root/test.img 復制基礎映像,以便獲得同一文件系統的副本。當運行 xm create -c test 時,它會運行與 BaseServer 相同的服務器,但是它的名稱是 TestServer。登錄到 TestServer,然後像您在 安裝 Xen 那一節中所做的那樣啟用 rawhide 支持,然後運行 yum update。
TestServer 實例擁有與 BaseServer 完全相同的配置,但是您已經升級到了 Fedora rawhide 所必須具備的最新的軟件包。在此,您可以查看 Web 站點是否仍然可用。
關於 Xen 還有哪些內容? 我希望這些簡短的說明和簡單的示例能夠幫助您安裝和運行 Xen,這樣您就可以嘗試使用它。為了讓您迅速地熟悉 Xen,我沒有介紹如何利用 LVM 與快照(snapshots)等功能,也沒有介紹如何完成 Xen 服務器從一台機器到另一台機器的網絡遷移。但是,既然您已經了解了 Xen 所具備的一些優勢,請浏覽 參考資料,學習一些如何使用它的更為多變的技巧。