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