一、遷移的准備工作
在進行遷移之前,有一些准備工作要做,主要是目的主機和源主機及其網絡方面。下面分別加以介紹。
首先,在源主機和目的主機方面,兩者必須都運行有Xen和xend守護進程。必須確保目的主機具有足夠的磁盤空間、內存容量和資源,以供遷移後的domain運行之用。此外,源主機和目的主機還必須具有相同的體系結構和虛擬化擴展,例如,如果源主機使用的是具有虛擬化擴展的x86-64體系結構的話,目的主機也必須如此。之所以這樣做,是為了防止由於內核和用戶庫使用的指令集不匹配而導致domain遷移之後無法正常工作的情況。
其次,在網絡方面,要求源主機和目的主機還必須位於同一子網上。遷移domain時,如果目的地結點位於不同的子網上,那麼遷移將會失敗,因為該domain的MAC和IP地址也隨之遷移。如您運行了防火牆,你可能需要創建相應的iptables規則來准許遷入連接。
再者,遷移時,xend守護進程會中止domain在源主機上的運行,接著將其復制到目的主機,然後重新啟動該domain 。默認時,xend守護進程從本機接受遷移請求。為了使遷移目標接受來自遠程主機的遷入請求,您必須修改目的主機在/etc/xend-config.sxp文件中的xen-relocation-hosts-allow 參數。因為沒有提供認證,所以為安全起見您必須限定允許遷移的主機。
下面,我們開始介紹用於遷移domain的第一種方法:存儲還原法。
二、存儲還原遷移法
存儲還原法的過程是這樣的:首先,將一個domain的當前運行狀態保存到硬盤上的一個文件中,然後,Xend 再利用該文件實現對該domain原狀態的還原。其實這與便攜式計算機的休眠功能非常相像:休眠時,便攜式計算機會保存硬盤狀態的映像,然後自動關機。退出休眠時,它會使用保存的磁盤映象將系統還原到之前的運行狀態。
本節中,我們為讀者介紹如何將一個運行中的domain 保存為一個文件,之後再用它將domain還原到之前的工作狀態,至於在哪裡還原,既可以在同一個服務器上,也可以在之外的Xen 服務器上。但在將domain 保存成映像文件之前,一定要騰出足以存放該文件的磁盤空間來。
操作過程
好了,下面開始介紹在Xen 服務器上遷移Domain的具體操作步驟。具體要做的是:創建一個Debian domain ,然後將它的狀態保存到一個文件,該文件將用於還原這個Debian domain。
1、創建Debian guest domain :
# xm create debian_etch_domU.cfg –c
2、檢查該domain的運行是否正常。因為我們給上述的xm 命令提供了-c參數,這將在當前控制台中啟動客戶機Domain。但是要想檢查該Domain是否已經啟動,就必須使用另外一個控制台會話。
3、我們將要把這個Domain的當前狀態保存到/xen-saved-images 目錄,當然也可以保存到您選擇的其他目錄:
# xm save 1 /xen-saved-images/etch.save
4、保存的Domain會從當前運行的Domain列表中刪除,我們可以用xm 命令列出眼下運行的Domain,看看它有沒有被刪掉。
5、從文件還原保存的Domain:
# xm restore /xen-saved-images/etch.save
6、再次執行xm 命令,我們將看到,還原後的Domain又回到當前Domain列表中了。
相關說明
把工作中的Domain的運行狀態保存到一個磁盤文件的時候,文件沒有經過任何形式的加密,所以惡意用戶只要能夠訪問保存映像文件目錄,就能對這些映像做手腳。因此,確保對存放這些映像的文件夾的訪問的安全就顯得格外重要。
一個Domain的運行狀態就是該Domain在被保存時刻的快照或者映像。所有運行中的進程的信息和狀態都被存放到這個文件中。 查看該文件時,您會發現這是一個龐大的二進制文件,其大小等於該Domain被保存時所使用的內存量。 因為Xen Domain通常會運行一些企業應用程序,所以這個文件一般小不了,通常都在幾GB左右。因此,你必須保證有足夠的存儲空間來存放這個文件。雖然本例將狀態保持到了一個硬盤文件之上,但是您還可以將這個文件存放到一個足夠大的網絡文件夾上,甚至一個U盤上。將Domain保存到U盤的確不錯,這樣就可以隨身攜帶,需要時還可以在不同的服務器上將其還原。
我們能夠使用xm 命令加restore 選項來還原存儲的Domain,這會再次啟動該Domain,並將其還原至被保存時的狀態。當使用存儲還原法時,有一些事項需要時刻注意:因為Domain還原後的ID不同於其保存時刻的Domain ID,所以使用xm 查看還原後的Domain時,一定要注意ID 的變化。雖然Domain被恢復到了原先的狀態(被存儲時刻的狀態),卻不能自動連接到該domain的控制台,相反,我們必須顯式的運行xm 命令才能連接到控制台。
雖然這種遷移Domain的方式簡單易行,但是一定要注意,由於Domain在保存時就已經從活動Domain中刪除,所以運行於該Domain上的各種服務也就無法使用或訪問了。如果您對於這種業務中斷情況無法接受,那麼就應該考慮采用在下一節中介紹的Xen 的動態遷移特性
三、動態遷移法
上面,我們介紹了在Xen 服務器上遷移Domain時的存儲還原法。雖然這種方法很簡單,但是如果您的服務器上有不許中斷的關鍵業務,或者您想最小化業務中斷時間,那麼您還是不能采用這種遷移方法。
這時,Xen還為我們提供了一種強大的功能就派上用場了,它就是動態遷移法。它能讓Domain在運行期間,以最小的服務中斷為代價,將Domain遷移到另外的Xen 服務器上。
使用Xen動態遷移可謂好處多多,先將其主要優點列舉如下:
·Xen的動態遷移隨同諸如heartbeat之類的高可用性解決方案一起使用,能給我們帶來一個“永不拋錨”的系統。最新版本的Enterprise SuSe Linux Server 和Red Hat Enterprise Linux 也是利用Xen來提供各種高可用性解決方案的。您可以輕而易舉的滿足各種服務的苛刻要求,同時還能保證所有關鍵商業服務不會出現中斷。
·它使我們能夠以“治未病”方式來維護寄放虛擬機的物理服務器。您可以監視服務器,然後通過轉移系統來即時解決潛在的和可疑的問題。
·它使得在多個服務器之間實現負載均衡成為可能,使我們能夠更好地利用企業中的所有計算資源,使其利用情況達到最佳狀態。需要注意的是,Xen的開源版本目前還不支持在dom0上感應到故障時自動進行動態遷移的功能。
·它使得在需要時向系統配置添加計算能力變得更加輕松。
·您可以根據需要更換硬件,而無需中斷運行在該硬件上的服務。
只知道動態遷移的好處還不夠,現在介紹一下具體的使用方法。
具體操作
首先對動態遷移時涉及到的服務器做一下介紹,它們是:
·hostA :一個linux NFS 服務器,通過網絡為XenDomain提供存儲空間。
·hostB :一個Xen主機服務器,它使用NFS導出的目錄運行一個客戶機Domain:Ubuntu Fuwa 。
·hostC :一個Xen主機服務器,它是來自hostB 服務器的客戶機Domain 即Ubuntu Fuwa 的遷移目的地。
下圖向我們展示了具體配置情況
⒈ 動態遷移要求共享存儲器。現實中,除了第一節所提要求外,對網速的最低要求是100MB。為了共享存儲器,我們將在我們在上圖頂部的Xen主機上建立一個NFS服務器,欲遷移的Domain使用的就是NFS 服務器上的共享存儲器空間。
⒉ 編輯/etc /exports 文件,加入下面一行來導出存儲器目錄:
# /xen-storage *(r,sync,no_root_squash)
⒊ 保存文件,並重啟NFS 服務器。將NFS 服務器添加到該服務器的服務中,並設為系統重啟時運行:
# service nfs startchkconfig nfs on
⒋ 我們將建立兩個Xen 服務器,並讓他們使用NFS 服務器提供的存儲器。為了掛載導出目錄,需要為兩個Xen 服務器都添加安裝點:
# mount hostB:/xen-storage
#- mount hostC:/xen-storage
⒌ 修改Xend配置文件,以允許動態遷移。編輯/etc/xen/xend-config.sxp 文件,並確保以下兩行沒有被注釋掉:
(xend-relocation-port 8002)
(xend-relocation-address '')
其作用是啟動Xen 守護進程,以偵聽和響應動態遷移的各種請求。
⒍ 建立一個運行在NFS 服務器存儲器上的Xen Domain,並在hostB上啟動該客戶機Domain。並讓該客戶機Domain使用以下配置:
cat > /home/pchaganti/xen-images/ubuntu_fuwa_nfs_domU.cfg << "EOF"
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 256
name = "ubuntu_fuwa_nfs_domU"
vif = [ 'ip=192.168.1.111' ]
nfs_server = '192.168.1.67'
nfs_root = '/xen-storage'
root = '/dev/nfs'
EOF
⒎ 現在,我們有了一個運行於hostB的客戶機Domain,它使用NFS 導出的目錄進行存儲。我們可以在hostB上運行下列命令來檢查該Domain的運行是否正常:
⒏ 接下來,我們將這個客戶機Domain動態遷移至hostC 服務器,為此可能需要幾分鐘的時間。如果遷移失敗,會在控制台顯示一個指示失敗的消息。
# xm migrate --live ubuntu_fuwa_nfs_domU hostC
⒐ 以上就是將正在運行的Domain動態遷移至另一個Xen 服務器的全部工作!現在使用xm命令來顯示當前運行於hostB 和hostC 這兩個服務器上的Domain,您將發現,所遷移的Domain目前只能在hostC 服務器上找到,列出的正在hostB服務器上運行的Domain中已經找不到被遷移的Domain的影子了。
相關說明
動態遷移就是在“帶電”情況下,將一個虛擬機從一個物理主機移動到另一個物理主機的過程。該過程不會對最終用戶造成明顯的影響,從而使得管理員能夠在不影響用戶正常使用的情況下,對物理服務器進行離線維修或者升級。
需要注意的是,要想改變Domain的運行地點,必須修改默認的Xend配置文件。此外,要使所做的修改在主機上生效,必須重新啟動Xen 服務器所在的主機。 我們需要修改以下配置:
·Xend-relocation-server :該標志用於啟用/取消服務器遷移功能。默認時,該標志設為no ,即不允許改變服務器的位置。在遷移過程中,Domain虛擬內存將變成未經任何加密的原始形式。所以,在不可信的網絡上啟用該選項時一定要倍加小心。
·Xend-relocation-port :xend守護進程通過該端口進行遷移。這個端口的缺省值是8002。
另外,還有兩個無需修改的參數,當在企業部署環境進行遷移時也要注意一下:
·Xend-relocation-address :該標志將Domain的遷移限制到特定的接口上。指定的地址是偵聽用於Domain遷移的入局連接的接口地址。只有啟用xend-relocation-server參數後,才會用到這個標志。
·Xend-relocation-hosts-allow:這個標志定義了允許跟遷移端口進行通信的主機。其值為一個由空格分隔的正則表達式序列。如果該值為空,那麼將允許全部輸入連接,否則,該值要麼與一個IP地址相匹配,要麼與一個完整域名相匹配
事實上,從hostB到hostC的遷移過程,是分為多個階段進行的,如下所示:
第一階段:遷移之前。
這時,Fuwa Domain運行於hostB,並且是一個活動的Domain。
第二階段:預定。
在hostB上發出一個遷移請求,然後檢查和確認在hostC上可用的資源。然後,Xend在hostC上按照所需的尺寸准備一個VM容器。如果Xend無法在hostC上獲得所需的資源,那麼一切就此結束。該Domain依舊運行在hostB上,就像什麼事情也沒發生一樣,此次遷移嘗試就此放棄。
第三階段:重復預拷貝。
先將所有內存頁面從hostB傳送到hostC,然後繼續傳輸在先前傳送過程中發生變化的頁面。最終,所以頁面都被拷貝到hostC。
到第三階段為止,Fuwa Domain仍然正常運行於hostC之上。
第四階段:中止並拷貝。
在hostB上運行著的Domain被掛起,其所有網絡流量也被重定向至hostC。這個階段結束後,除了在hostB上有一個掛起的Domain外,hostB上還有了這個被掛起的Domain的副本。這時,hostB上被掛起的Domain還可以作為原始副本,萬一這一步失敗,它還能在hostB上恢復運行。
第五階段:交付。
如果這一步沒有錯誤或失敗的話,hostC會向hostB發送一個指示信息,指出它已經擁有了一個跟hostB完全一致的Domain映像。現在,hostB將從它的Xen 服務器中刪除該Domain。從這時起,hostC將成為這個Domain的第一宿主機。
在第四階段至第五階段期間,Fuwa Domain處於停機狀態。
第六階段:激活。
在hostC上激活被遷移的Domain。該Domain內部的全部設備驅動程序現在關聯至新的機器上。至此,Fuwa Domain又在hostC上復活了。
這些步驟都是在幕後進行的,正是這一系列默默無聞的操作,才使得遷移能夠如此平穩的和無縫的過渡!
四、結束語
本章我們研究了遷移Xen客戶機Domain的兩種方式:存儲還原法和動態遷移法。前一種方法類似便攜式計算機的深度休眠,它先將捕獲的domain運行狀態作為映像存放在磁盤上,之後再用該映像對這個domain 進行還原。後一種方式以最少的中斷和停機時間來動態改變處於運行狀態中的domain的運行位置。綜合使用這兩種遷移方法,定能使虛擬化技術的功效更上一層樓