這幾年 VMWare 在虛擬機器領域大放異彩,其他同類型軟體 VirtualBox、VirtualPC 與 Xen 也都急著想趕上這一波潮流,自從去年(2006)SLES10 首度加上 Xen 功能後,今年(2007) RedHat 釋出 RHEL5 也都加上了 Xen 功能,使得 Novell SuSE 隨後立即推出 SLES10 SP1(Service Pack 1)版本,此版 Xen 功能更加穩定順暢、商業應用上也更加廣泛。
而 RedHat 對於 Xen 的重視程度不只是加入軟體功能而已,其 RHEL5 更將 Xen 內容首度納入原廠教材中,筆者有鑑於許多讀者對 Xen 興趣濃厚卻發現只有少數幾篇中文建置指南,故再針對 RHEL5 環境配置 Xen 來做介紹,最後並介紹筆者一直想測試的功能「Xen 的 DomU migrate」建置心得。
此次一開始所用的測試主機,掛上「陽春」兩字的意思主要是指『記憶體只有 512 MB』,若按照 RedHat 原廠所述的硬體規格來說(一個 RHEL5 最少 256 MB)此台主機拿來測試 Xen 算是「勉強」及格,但若真的按照一般方式配置(在圖形介面下設定 Xen 且 Dom0、DomU 各 256 MB 記憶體)很有可能發生「卡住」(建置失敗)或是運行地超級緩慢之情況。
所以筆者底下所介紹的方式,就是在有限的資源中(陽春主機)練習配置 Xen 系統,整個操作都以文字指令介面為主,以能夠練習配置 Xen 為目標,讓讀者花費少少卻可學習先進高端技術,接下來就以陽春主機採預設方式安裝好 RHEL5 開始!
在安裝 RHEL5 規劃磁碟切割期間,筆者採用一顆硬碟對半切的方式,一半給 Dom0 一半給 DomU 使用,所以裝好的 Linux Partition 規劃如下(觀察所使用的指令為 df -h 與 fdisk -l):
| /dev/hda1 | Dom0 | /boot |
| /dev/hda2 | Dom0 | / |
| /dev/hda3 | Dom0 | swap |
| /dev/hda4 | DomU | /dev/xvda |
其中 /dev/hda1~/dev/hda3 給 Dom0 使用(佔一半左右、大約 40 GB)而 /dev/hda4 預計要給 DomU 使用(也是 40 GB 左右)

接著就順手使用指令「fdisk /dev/hda」將 /dev/hda4 切出來(如下圖)

若要將異動過的磁碟資訊立即生效(不需要重開機)可使用 partprobe 指令來辦到。

RHEL5 的 yum 需要註冊才能夠使用最新套件,若我們需求只是要讓套件管理方便(使用 yum 來安裝 xen kernel 與 xen tools 等等),只要把安裝光碟資料通通拷貝到硬碟內,設定一下 yum Client/Server 即可(也就是前一期有介紹過的 yum 配置)。
先將 RHEL5 第二片光碟掛載起來並安裝 vsftpd 套件(因為我們之後要透過 ftp 來安裝 DomU),接著將光碟資料拷貝到 ftp 家目錄下(例:/var/ftp/pub/RHEL5)相關指令如下:
掛載「mount /dev/cdrom /mnt」
安裝 vsftpd「rpm -ivh /mnt/Server/vsftpd-2.0.5-10.el5.i386.rpm」
拷貝資料「\cp -r /mnt/. /var/ftp/pub/RHEL5/」,其中最前面的反斜線可防止拷貝期間覆寫詢問 y/n 的動作。
吐片「eject」
其他片(一、三、四、五片)皆如法炮製。

安裝 createrepo 套件「rpm -ivh /var/ftp/pub/RHEL5/Server/createrepo-0.4.4-2.fc6.noarch.rpm」
使用指令「createrepo /var/ftp/pub/RHEL5/」建立相關 xml 檔案稍後給 yum client 使用。

仿內建的 /etc/yum.repos.d/rhel-debuginfo.repo 修改成為例 /etc/yum.repos.d/foo.repo 如下:

這樣子後續就可以使用 yum 很輕鬆做軟體管理來安裝 xen kernel 與 xen tools。
只要安裝好 xen kernel 與 xen tools 並使用 xen kernel 開機成功後,就算是準備好 Xen 環境,因為我們資源有限(記憶體只有 512 MB)就順手把預設 runlevel 改成 3(也就是不啟用圖形介面來節省記憶體),並且設定下次開機使用 xen kernel 開機。
有了 yum 之後,使用指令「 yum -y install kernel-xen xen」來安裝 xen kernel 與 xen tools 相當地方便(指令 yum list | grep xen 把套件名稱有關 xen 的列出來)。

編輯 /etc/inittab 將「id:3:initdefault:」那行由原本的 5 改成 3,這樣若重開機後就會不啟用圖形介面可用來節省記憶體(防止陽春主機建置 DomU 時運行過慢)。

編輯 /boot/grub/menu.lst 將「default=0」那行由原本的 1 改成 0(0 指的是第一個 title)接下來就輸入指令「reboot」重開機使用 xen kernel 吧!

xen kernel 開機後將要開始安裝 DomU 系統,主要使用 virt-install 指令來做(文字模式)提供給 DomU 使用的磁碟則是先前準備好的 /dev/hda4 安裝來源是採用 Dom0 vsftpd 提供的資料。
使用指令「/etc/init.d/vsftpd start」來啟動 vsftpd
使用指令「chkconfig vsftpd on」設定下次開機自動啟動 vsftpd
預設的防火牆會擋住 ftpd 傳輸資料,但是「vsftpd 防火牆相關設定」並非此次介紹重點,所以留待未來再說吧,現在先行停用。
使用指令「/etc/init.d/iptables stop」停掉防火牆
使用指令「chkconfig iptables off」設定下次開機不自動啟動防火牆

使用指令「virt-install」安裝 DomU 期間,最需注意到的就是「記憶體大小」問題,若是填入 256 MB 很有可能造成 Dom0 記憶體無法縮減成小於 256 MB 而造成的失敗,所以筆者填寫的 DomU 記憶體是 230 MB 理論上是可以在陽春機器(512 MB 記憶體)上運作的(試過多次且不同台電腦)指令如下:
指令「free」、「xm list」可用來觀察記憶體使用情況
指令「virt-install」用來安裝 DomU
填入「foo」的是虛擬主機 DomU 名稱
填入「230」的是虛擬主機 DomU 記憶體大小單位是 MB
填入「/dev/hda4」的是虛擬主機所使用的磁碟裝置
填入「no」既然我們篤定不需要圖形介面,這裡就填 no 吧!(填 yes 的話,RHEL5 需要 vnc Client/Server)
填入「ftp://al/pub/RHEl5/」就是先前準備 Dom0 提供的 ftp 安裝來源,其中 al 是短的主機名稱,請確定後續名稱解析得出來,否則使用 IP 會更保險,例如 192.168.2.3 且避免使用 127.0.0.1。

接下來都是一堆選單介面的安裝畫面(如下),若是您使用 DHCP 抓 IP 的話,建議將 IPv6 的部份取消不選,可節省寶貴時間(除非您有提供 IPv6 的 DHCP Server)

在安裝期間,很容易感覺到 Xen 主推「效能」不是沒道理地,與其他虛擬機器軟體比較 Xen 效能真的是好許多(光是從安裝期間就能夠感受到),尤其我們用文字介面安裝 Linux 原本就會比圖形介面快一些,筆著這台過時的電腦 P4 1.8 GHz(單核心)、記憶體 512 MB、硬碟 80 GB IDE 介面在 DomU 安裝一個標準 RHEL5 只需 22 分鐘左右。

針對 Dom0 控制 DomU 的部份,不外乎是 DomU 的啟動、停掉(強制關閉)、列出狀態及連進去使用等等動作,介紹 xm 指令功能如下:
指令「xm list」用來列出 Dom0、DomU 狀態

指令「xm console foo」連接到 foo DomU 的 console,使用類似 telnet 的跳脫方式「Ctrl-]」離開 foo DomU 的 console 回到 Dom0

指令「xm shutdown foo」關閉 foo DomU

指令「xm create foo」開始啟動 foo DomU

若遇到 xm shutdown 還是無法關閉的話,只好使用指令「xm destroy foo」強制關閉 foo DomU

指令「xm create -c foo」開始啟動 foo DomU 立即連接到 foo DomU 的 console

foo DomU 設定檔案位於 /etc/xen/foo 內容範例如下:主要定義一些像是使用的磁碟、記憶體大小、網路卡與網路卡硬體位址(MAC)以及虛擬出來的 CPU 幾顆。

如果說要開機自動啟動 DomU 子機,只要做個 Link 到 /etc/xen/auto/ 目錄下即可透過 xendomains 這個 Init Scripts 開機自動啟動 DomU 子作業系統。
例:指令「ln -s /etc/xen/foo /etc/xen/auto/」製作 symbolic link

接下來示範的是 Xen DomU live migration 功能(DomU 在線遷徙)示意圖如下:

這個 Xen migration 功能主要是讓 DomU 切換至另一台 Dom0 主機運行(而且可以在 DomU 主機 online 情況下),使得 DomU 主機 down time(停擺)降至極低,使用軟體方式來切換運行的硬體主機會比用硬體方式切換(插拔硬碟至別台)來得快速許多。
在環境準備除了原本的主機之外還需要另外兩台硬體,筆者的另外兩台實驗主機於稍後皆稱為 ibm5500(Node1)與 rhel5(Node2),所作的實驗就是先將 DomU 由 ibm5500 這個 Dom0 來跑,接著 live migration 至 rhel5 這個 Dom0 上運作,至於需要共用磁碟的部份筆者選擇用 AoE(ATA Over Ethernet)來打造 SAN(Storage Area Network)環境,作法是將原本 Dom0 主機成為 AoE Target 將 DomU 磁碟(/dev/hda4)提供給 ibm5500 與 rhel5 這兩個 AoE Initiator 共用。
| 原本 Dom0 | 僅使用 vblade 軟體當成 AoE Target 將原本 DomU 磁碟提供給 Node1 與 Node2 共用 |
| Node1 (ibm5500) | 主機準備好 Xen 運行環境 且載入 aoe 模組成 AoE Initiator |
| Node2 (rhel5) | 主機準備好 Xen 運行環境 且載入 aoe 模組成 AoE Initiator |
在原本 Dom0 先將 DomU 停用(指令 xm shutdown foo),接著使用 vblade 軟體將 /dev/hda4 變成 AoE Target 磁碟,相關指令如下:
使用指令「tar -zxf vblade-14.tgz」解開包裹
使用指令「cd vblade-14」進入目錄
使用指令「make」編譯

使用指令「vblade 1 2 eth0 /dev/hda4」將 /dev/hda4 變成 AoE Target 磁碟

另外兩台(ibm5500 與 rhel5)都準備好 Xen 環境並載入 AoE kernel 模組即可(使用指令 modprobe aoe),請確認有抓到 AoE Target 磁碟(通常位於 /dev/etherd/ 底下)
下圖是在 ibm5500 主機使用指令「modprobe aoe」載入 AoE Initiator 核心模組的情況,請注意另一台 rhel5 主機也要如此做。

因為 ibm5500 與 rhel5 主機上都沒有 foo DomU 的設定檔,所以我們先在原先 Dom0 主機用 scp 將 /etc/xen/foo 設定檔案分別拷貝到 ibm5500 與 rhel5 主機的 /etc/xen/ 目錄下後再來修改使用 AoE Target 磁碟 /dev/etherd/e1.2。
例:使用指令「scp /etc/xen/foo ibm5500:/etc/xen/」將設定檔案拷貝到 ibm5500 主機(也要拷貝到 rhel5 主機)

接下來分別將這兩台 /etc/xen/foo 檔案內的 disk = [ 'phy:/dev/hda4,xvda,w', ] 這行,改成使用 AoE 磁碟的這行 disk = [ 'phy:/dev/etherd/e1.2,xvda,w', ]

接著在 ibm5500 主機使用指令「xm create foo」啟動 foo DomU。

預設裝好的 RHEL5 xend 是不允許 migration 功能,所以調整兩台主機的 xend-config.sxp 列出如下:
(xend-relocation-server yes):去掉註解後由原本的 no 改 yes(啟用)
(xend-relocation-port 8002):去掉註解啟用 port 8002(有防火牆的話要開此埠)
(xend-relocation-address ''):去掉註解啟用
(xend-relocation-hosts-allow ''):去掉註解啟用並允許所有來源主機(只是為了測試,暫時忽略安全性)
別忘了改完設定需使用指令 /etc/init.d/xend restart 重新啟用 xend

該是此秀表演的最佳時機了,在 ibm5500 主機使用指令「xm migration --live foo rhel5」將 foo DomU live migration 到 rhel5 主機。

期間可觀察 xm list 情況(正在 migrate)下圖為正在 migrate 情形。

至於在 rhel5 那台,則是接收到 foo migrate 過來的情況,我們可以連接到 foo 的 console 繼續使用 foo DomU 虛擬主機。

在原來的 Dom0 主機(也就是 AoE Target 主機) ping foo DomU IP(172.18.0.184)情況如下:
由下圖粗略看出,開始 migrate 期間 ping 的回應時間拉大(sequence 6 左右);sequence 26~79 之間則是空白的(應該是 Layer 2 Switch 由於 foo 主機 Mac 位址換到另一個埠的原因)之後則是正常的運作中。

Xen migrate 請注意兩台 Dom0 系統時間是否一致,可使用 ntpdate 指令將時間校正(例如找台灣的時間主機校正,使用指令 ntpdate time.stdtime.gov.tw),筆者曾經發生時間若不同步而造成 migrate 後 DomU 主機重新開機的情況。
Xen migrate 針對 Firewall 需要開啟埠 8002,至於 SELinux 筆者使用指令「getsebool -a | grep -i xen」觀察到的則是有個中型開關與 Xen 有關係,可使用指令「setsebool -P xend_disable_trans on」修改,若是測試期間懷疑被 Firewall 或 SELinux 擋住的話,就先關閉(停用)這兩個安全性的防禦功能吧!

雖然我們先前都只介紹 Xen 文字介面工具,其實 Xen 也是有圖形介面的控管軟體,在 RHEL5/Fedora 有 virt-manager;在 SLES10 則是有 yast2 xen,有興趣也可以裝來玩玩看!
Linux 有著穩定核心、千錘百鍊的 Unix 工具以及穩定效能佳的檔案系統,使得她在虛擬機器這個領域佔有極大的優勢,除了 Xen 這個相當成熟的虛擬機器之外,在 Linux 核心 2.6.20 版首度加入的 KVM(Kernel-based Virtual Machine)正在使用著 QEMU 搭配硬體(Intel VT 或 AMD-V/AMD SVM)來做虛擬機器(Fedora 7 就可以玩囉!)所以說 Linux 發展還真的是「潛能無限」呢!