歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

KVM 虛擬機在物理主機之間遷移的實現

前言

  虛擬機的遷移技術為服務器的虛擬化提供簡便的方法。目前流行的虛擬化產品 VMware,Xen,Hyper-V,KVM 都提供各自的遷移工具。其中 Linux 平台上開源的虛擬化工具 KVM 發展迅速,基於 KVM 的虛擬機的遷移特性也日趨完善。本文全面介紹 KVM 虛擬機在不同的應用環境下的靜態遷移(離線遷移)和動態遷移(在線遷移),並且在最新發布的 Suse Linux Enterprise Edition 11 SP1 上分別演示如何應用 libvirt/virt-manager 圖形化工具和基於命令行的 qemu-kvm 工具進行遷移操作。

  V2V 虛擬機遷移的介紹

  V2V 虛擬機的遷移是指在 VMM(Virtual Machine Monitor)上運行的虛擬機系統,能夠被轉移到其他物理主機上的 VMM 上運行。VMM 對硬件資源進行抽象和隔離,屏蔽了底層硬件細節。而遷移技術的出現,使得操作系統能在不同的主機之間動態的轉移,進一步解除軟,硬件資源之間的相關性。本系列的第一篇文章“虛擬機遷移技術漫談”中,介紹了 V2V 遷移的三種方式,本文將更加詳細的說明三種方式的不同和實現方法。

  V2V 遷移方式的分類

  靜態遷移

  靜態遷移:也叫做常規遷移、離線遷移(Offline Migration)。就是在虛擬機關機或暫停的情況下從一台物理機遷移到另一台物理機。因為虛擬機的文件系統建立在虛擬機鏡像上面,所以在虛擬機關機的情況下,只需要簡單的遷移虛擬機鏡像和相應的配置文件到另外一台物理主機上;如果需要保存虛擬機遷移之前的狀態,在遷移之前將虛擬機暫停,然後拷貝狀態至目的主機,最後在目的主機重建虛擬機狀態,恢復執行。這種方式的遷移過程需要顯式的停止虛擬機的運行。從用戶角度看,有明確的一段停機時間,虛擬機上的服務不可用。這種遷移方式簡單易行,適用於對服務可用性要求不嚴格的場合。

  共享存儲的動態遷移

  動態遷移(Live Migration):也叫在線遷移(Online Migration)。就是在保證虛擬機上服務正常運行的同時,將一個虛擬機系統從一個物理主機移動到另一個物理主機的過程。該過程不會對最終用戶造成明顯的影響,從而使得管理員能夠在不影響用戶正常使用的情況下,對物理服務器進行離線維修或者升級。與靜態遷移不同的是,為了保證遷移過程中虛擬機服務的可用,遷移過程僅有非常短暫的停機時間。遷移的前面階段,服務在源主機的虛擬機上運行,當遷移進行到一定階段,目的主機已經具備了運行虛擬機系統的必須資源,經過一個非常短暫的切換,源主機將控制權轉移到目的主機,虛擬機系統在目的主機上繼續運行。對於虛擬機服務本身而言,由於切換的時間非常短暫,用戶感覺不到服務的中斷,因而遷移過程對用戶是透明的。動態遷移適用於對虛擬機服務可用性要求很高的場合。

  目前主流的動態遷移工具,VMware 的 VMotion,Citrix 的 XenMotion,他們都依賴於物理機之間采用 SAN(storage area network)或 NAS(network-attached storage)之類的集中式共享外存設備,因而在遷移時只需要進行虛擬機系統內存執行狀態的遷移,從而獲得較好的遷移性能。

  圖 1. 共享存儲的動態遷移示意圖
KVM 虛擬機在物理主機之間遷移的實現

   

  如圖 1 中所示的動態遷移,為了縮短遷移時間和服務中斷時間,源主機和目的主機共享了 SAN 存儲。這樣,動態遷移只需要考慮虛擬機系統內存執行狀態的遷移,從而獲得較好的性能。

  本地存儲的動態遷移

  動態遷移基於共享存儲設備,為的是加速遷移的過程,盡量減少宕機時間。但是在某些情況下需要進行基於本地存儲的虛擬機的動態遷移,這就需要存儲塊動態遷移技術,簡稱塊遷移。

  比如某些服務器沒有使用 SAN 存儲,而且遷移的頻率很小,虛擬機上的服務對遷移時間的要求不嚴格,則可以使用存儲塊動態遷移技術;另一方面,SAN 存儲的價格比較高,盡管 SAN 存儲能夠提高遷移性能和系統的穩定性,對於中小企業僅僅為了加快遷移速度而配置昂貴的 SAN 存儲,性價比不高。

  在集中式共享外部存儲的環境下,基於共享存儲的動態遷移技術無疑能夠工作得很好。但是,考慮到目前一些計算機集群並沒有采用共享式外存,而是各自獨立擁有本地外存的物理主機構成。基於共享存儲的遷移技術在這種場合下受到限制,虛擬機遷移到目的主機後,不能訪問其原有的外存設備,或者需要源主機為其外存訪問提供支持。

  為了拓寬動態遷移技術的應用范圍,有必要實現一個包括虛擬機外存遷移在內的全系統動態遷移方案。使得在采用分散式本地存儲的計算機集群環境下,仍然能夠利用遷移技術轉移虛擬機環境,並且保證遷移過程中虛擬機系統服務的可用性。

  圖 2. 本地存儲的動態遷移示意圖
KVM 虛擬機在物理主機之間遷移的實現

   

  相比較基於共享存儲的動態遷移,數據塊動態遷移的需要同時遷移虛擬機磁盤鏡像和虛擬機系統內存狀態,延長了遷移時間,在遷移性能上打了折扣。

  KVM 虛擬機的管理工具

  准確來說,KVM 僅僅是 Linux 內核的一個模塊。管理和創建完整的 KVM 虛擬機,需要更多的輔助工具。

  QEMU-KVM:在 Linux 系統中,首先我們可以用 modprobe 系統工具去加載 KVM 模塊,如果用 RPM 安裝 KVM 軟件包,系統會在啟動時自動加載模塊。加載了模塊後,才能進一步通過其他工具創建虛擬機。但僅有 KVM 模塊是遠遠不夠的,因為用戶無法直接控制內核模塊去做事情,還必須有一個用戶空間的工具。關於用戶空間的工具,KVM 的開發者選擇了已經成型的開源虛擬化軟件 QEMU。QEMU 是一個強大的虛擬化軟件,它可以虛擬不同的 CPU 構架。比如說在 x86 的 CPU 上虛擬一個 Power 的 CPU,並利用它編譯出可運行在 Power 上的程序。KVM 使用了 QEMU 的基於 x86 的部分,並稍加改造,形成可控制 KVM 內核模塊的用戶空間工具 QEMU-KVM。所以 Linux 發行版中分為 kernel 部分的 KVM 內核模塊和 QEMU-KVM 工具。這就是 KVM 和 QEMU 的關系。

  Libvirt、virsh、virt-manager:盡管 QEMU-KVM 工具可以創建和管理 KVM 虛擬機,RedHat 為 KVM 開發了更多的輔助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易於使用。Libvirt 是一套提供了多種語言接口的 API,為各種虛擬化工具提供一套方便、可靠的編程接口,不僅支持 KVM,而且支持 Xen 等其他虛擬機。使用 libvirt,你只需要通過 libvirt 提供的函數連接到 KVM 或 Xen 宿主機,便可以用同樣的命令控制不同的虛擬機了。Libvirt 不僅提供了 API,還自帶一套基於文本的管理虛擬機的命令—— virsh,你可以通過使用 virsh 命令來使用 libvirt 的全部功能。但最終用戶更渴望的是圖形用戶界面,這就是 virt-manager。他是一套用 python 編寫的虛擬機管理圖形界面,用戶可以通過它直觀地操作不同的虛擬機。Virt-manager 就是利用 libvirt 的 API 實現的。

  以上這些就是 Linux 系統上 KVM 虛擬化技術的大致架構了。本文正是演示了如何使用這些工具實現了 KVM 虛擬機的遷移操作。

  本文的實驗環境介紹

  本文中的 KVM 虛擬機軟件基於 Novell 公司的 Suse Linux Enterprise Server 11 Service Pack 1 發行版。SLES11 SP1 發布於 2010 年 5 月 19 日,基於 Linux 內核 2.6.32.12,包含了 kvm-0.12.3,libvirt-0.7.6,virt-manager-0.8.4,全面支持 KVM 虛擬機。本文中的物理服務器和外部共享存儲配置如下表:

  表 1. 硬件配置
 

物理主機 硬件配置 Host OS Host Name IP Address 源主機
Source Host Xeon(R) E5506 x 4 core
MEM: 10GB SLES11 SP1 vicorty3 192.168.0.73 目的主機
Destination Host Xeon(R) E5506 x 8 core
MEM: 18GB SLES11 SP1 victory4 192.168.0.74 NFS Server Pentium(R) D x 2 core
MEM: 2G SLES11 SP1 server17 192.168.0.17

  創建 KVM 虛擬機

  遷移虛擬機之前,我們需要創建虛擬機。創建虛擬機可以使用 QEMU-KVM 命令或者通過 virt-manager 圖形化管理工具。

  QEMU-KVM 創建虛擬機鏡像文件:見本文的參考資源“KVM 虛擬機在 IBM System x 上應用”。

  virt-manager 創建虛擬機:參考 virt-manager 幫助手冊。

  KVM 虛擬機靜態遷移

  靜態遷移由於允許中斷虛擬機的運行,所以相對簡單。首先在源主機上關閉虛擬機,然後移動虛擬機的存儲鏡像和配置文件到目的主機,最後在目的主機上啟動虛擬機,恢復服務。根據虛擬機鏡像存儲方式的不同,靜態遷移的實現方法稍有不同。

  虛擬機之間使用共享存儲

  如果源主機和目的主機都能夠訪問虛擬機的鏡像,則只需要遷移虛擬機配置文件。比如在本例中的 SLES11 SP1 系統,virt-manager 管理的虛擬機配置文件在 /etc/libvirt/qemu/”your vm name.xml”。拷貝 XML 配置文件到目的主機的相同目錄後,進行適當的修改,比如:與源主機相關的文件或路徑等。無論你何時在 /etc/libvirt/qemu/ 中修改了虛擬機的 XML 文件,必須重新運行 define 命令,以激活新的虛擬機配置文件。

  清單 1. 激活虛擬機配置文件
 

  # virsh define /etc/libvirt/qemu/”your vm name.xml” 

  虛擬機鏡像使用本地存儲

  本地存儲是指虛擬機的文件系統建立在本地硬盤上,可以是文件或者磁盤分區。

  本地文件存儲:如果虛擬機是基於鏡像文件,直接從源主機拷貝鏡像文件和 XML 配置文件到目的主機中,然後對 XML 進行適當的修改並激活。

  本地磁盤分區:如果虛擬機使用了磁盤分區(物理分區或者邏輯分區)為存儲設備,首先用 dump 工具把磁盤分區轉換成鏡像文件再拷貝到目的主機。在目的主機恢復虛擬機時,把鏡像文件恢復到目的主機的磁盤分區中去。對於虛擬機系統使用了多個磁盤分區的,需要每個分區單獨 dump 成鏡像文件。例如使用“/dev/VolGroup00/lv001” LVM 邏輯卷作為存儲設備,可以使用下面的命令輸出成鏡像文件:

  清單 2. 轉換邏輯卷為鏡像文件
 

  dd if=/dev/VolGroup00/lv001 of=lv001.img bs=1M 

  保存虛擬機的運行狀態

  靜態遷移虛擬的過程中,虛擬機系統處於關機狀態,這樣虛擬機關機前的運行狀態不會保留。如果希望保留遷移前的系統狀態,並且在遷移後能夠恢復,需要對虛擬機做快照備份或者以休眠的方式關閉系統,詳細內容和實現方法將在本系列文章的第五部分介紹。

  基於共享存儲的動態遷移

  本文前面“V2V 遷移方式的分類”小節中介紹過,跟據虛擬機連接存儲方式的不同,動態遷移分為基於共享存儲的動態遷移和基於本地存儲的存儲塊遷移。本小節實現了目前使用最廣泛的基於共享存儲的動態遷移。實現這種實時遷移的條件之一就是把虛擬機存儲文件存放在公共的存儲空間。因此需要設定一個共享存儲空間,讓源主機和目的主機都能夠連接到共享存儲空間上的虛擬媒體文件,包括虛擬磁盤、虛擬光盤和虛擬軟盤。否則,即使遷移完成以後,也會因為無法連接虛擬設備,導致無法啟動遷移後的虛擬機。

  設置實驗環境

  動態遷移實際上是把虛擬機的配置封裝在一個文件中,然後通過高速網絡,把虛擬機配置和內存運行狀態從一台物理機迅速傳送到另外一台物理機上,期間虛擬機一直保持運行狀態。現有技術條件下,大多虛擬機軟件如 VMware、Hyper-V、Xen 進行動態遷移都需要共享存儲的支持。典型的共享存儲包括 NFS 和 SMB/CIFS 協議的網絡文件系統,或者通過 iSCSI 連接到 SAN 網絡。選用哪一種網絡文件系統,需要根據具體情況而定。本文的實驗采用了 NFS 文件系統作為源主機和目的主機之間的共享存儲。

  圖 3. 共享存儲的動態遷移實驗配置圖
KVM 虛擬機在物理主機之間遷移的實現

   

  確保網絡連接正確,源主機、目的主機和 NFS 服務器之間可以互相訪問。

  確保源主機和目的主機上的 VMM 運行正常。

  設置 NFS 服務器的共享目錄。本文的 NFS 服務器也安裝了 SLES11 SP1 操作系統。

  清單 3. 配置 NFS 服務
 

修改 /etc/exports 文件,添加 
 /home/image *(rw,sync,no_root_squash) 
 
 rw:可讀寫的權限; 
 ro:只讀的權限; 
 no_root_squash:登入到 NFS 主機的用戶如果是 ROOT 用戶,他就擁有 ROOT 權限,此參數很不安全,建議不要使用。 
 sync:資料同步寫入存儲器中。 
 async:資料會先暫時存放在內存中,不會直接寫入硬盤。 
 
重新啟動 nfsserver 服務 
 # service nfsserver restart 

  使用 virt-manager 進行動態遷移

  virt-manager 是基於 libvirt 的圖像化虛擬機管理軟件,請注意不同的發行版上 virt-manager 的版本可能不同,圖形界面和操作方法也可能不同。本文使用了 SLES11 SP1 發行版上的 virt-manager-0.8.4。

  首先在源主機和目的主機上添加共享存儲。這裡以源主機為例,目的主機做相同的配置。

  添加 NFS 存儲池到源主機和目的主機的 vit-manager 中。點擊 Edit menu->Host Details->Storage tab。

圖 4. 存儲池配置圖
KVM 虛擬機在物理主機之間遷移的實現

  
 

  添加一個新的存儲池。點擊左下角的“+”號,彈出一個新的窗口。輸入以下參數:

  Name:存儲池的名字。

  Type:選擇 netfs:Network Exported Directory。因為本文使用了 NFS 作為共享存儲協議。

圖 5. 添加共享存儲池
KVM 虛擬機在物理主機之間遷移的實現

  
 

  點擊“Forward”後,輸入以下參數:

  Target Path:共享存儲在本地的映射目錄。本文中這個目錄在源主機和目的主機上必須一致。

  Format:選擇存儲類型。這裡必須是 nfs。

  Host Name:輸入共享存儲服務器,也就是 NFS 服務器的 IP 地址或 hostname。

  Source Path:NFS 服務器上輸出的共享目錄。

圖 6. 存儲池設置
KVM 虛擬機在物理主機之間遷移的實現

  
 

  點擊”Finish”後,共享存儲添加成功。此時在物理機上查看 Linux 系統的文件系統列表,可以看到共享存儲映射的目錄。

  源主機上創建基於共享存儲的 KVM 虛擬機。

  選擇共享存儲池,點擊”New Volume”創建新的存儲卷。

  輸入存儲卷參數。本例為虛擬機創建了大小為 10G,格式為 qcow2 的存儲卷。

圖 7. 添加存儲卷
KVM 虛擬機在物理主機之間遷移的實現

  
 

  在這個共享存儲卷上創建虛擬機。本文創建了一個基於 Window 2008 R2 系統的虛擬機。創建虛擬機的具體步驟見本文前面“創建 KVM 虛擬機“小節。

  連接遠程物理主機上的 VMM。這裡以源主機為例,目的主機做相同的配置。

  在源主機上打開 virt-manager 應用程序,連接 localhost 本機虛擬機列表。點擊 File->Add Connection,彈出添加連接窗口,輸入以下各項:

  Hypervisor:選擇 QEMU。

  Connection:選擇連接方式 。本文選擇 SSH 連接。

  Hostname:輸入將要連接的主機名或 IP 地址,這裡填寫目的主機名 victory4。

圖 8. 添加遠程 VMM 連接
KVM 虛擬機在物理主機之間遷移的實現

  
 

  點擊 Connect,輸入 SSH 連接的密碼後,將顯示源主機和目的主機上的虛擬機列表。

圖 9. 管理遠程 VMM
KVM 虛擬機在物理主機之間遷移的實現

  
 

  從源主機動態遷移 KVM 虛擬機到目的主機。

  在源主機上啟動虛擬機 Windwos 2008 R2。

  在虛擬機中,開啟實時網絡服務(用來驗證遷移過程中服務的可用性)。

  開啟遠程連接服務 remote access,在其他主機上遠程連接此虛擬機。

  開啟網絡實時服務。例如打開浏覽器並且播放一個實時網絡視頻。

  准備動態遷移,確保所有的虛擬存儲設備此時是共享的,包括 ISO 和 CDROM。

  在源主機的 virt-manager 窗口中,右鍵點擊等待遷移的虛擬機,選擇“Migrate ”。

  New host:選擇目的主機的 hostname。

  Address:填入目的主機的 IP 地址。

  Port and Bandwith:指定連接目的主機的端口和傳輸帶寬,本文中沒有設定,使用默認設置。

圖 10. 虛擬機遷移設置
KVM 虛擬機在物理主機之間遷移的實現

  
 

  點擊“Migrate”和“Yes”開始動態遷移虛擬機。

圖 11. 虛擬機遷移進度
KVM 虛擬機在物理主機之間遷移的實現

  
 

  動態遷移的時間與網絡帶寬、物理主機的性能和虛擬機的配置相關。本實驗中的網絡連接基於 100Mbps 的以太網,整個遷移過程大約耗時 150 秒。使用 RDC(Remote Desktop Connection)遠程連接虛擬機在遷移過程中沒有中斷;虛擬機中播放的實時網絡視頻基本流暢,停頓的時間很短,只有 1 秒左右。如果采用 1000Mbps 的以太網或者光纖網絡,遷移時間將會大大減少,而虛擬機服務停頓的時間幾乎可以忽略不計。

  遷移完成後,目的主機的 VMM 中自動創建了一個同名的 Windows 2008 R2 虛擬機,並且繼續提供遠程連接服務和播放在線視頻。源主機上的虛擬機變為暫停狀態,不再提供服務。至此,動態遷移勝利完成。

  基於數據塊的動態遷移

  從 qemu-kvm-0.12.2 版本,引入了 Block Migration (塊遷移)的特性。上一小節“基於共享存儲的動態遷移”中,為了實現動態遷移,源主機和目的主機需要連接共享存儲服務。有了塊遷移技術以後,可以在動態遷移過程中,把虛擬磁盤文件從源主機遷移至目的主機。QEMU-KVM 有了這個特性以後,共享存儲不再是動態遷移的必要條件,從而降低了動態遷移的難度,擴大了動態遷移的應用范圍。SLES11 SP1 集成了 kvm-0.12.3,支持塊遷移特性。但是 SLES11 SP1 上的 libvirt-0.7.6、virt-manager-0.8.4 暫時沒有引入塊遷移的功能。所以本文下面的塊遷移實驗僅基於 QEMU-KVM 的命令行模式。

  設置實驗環境

  塊遷移過程中,虛擬機只使用本地存儲,因此物理環境非常簡單。只需要源主機和目的主機通過以太網連接,如”圖 2. 本地存儲的動態遷移示意圖”所示。

  QEMU 的控制終端和遷移命令

  QEMU 控制終端的開啟,可以在 QEMQ-KVM 的命令中加參數“-monitor”。

  -monitor stdio: 輸出到文本控制台。

  -monitor vc: 輸出到圖形控制台。

  圖形控制台和虛擬機 VNC 窗口的切換命令是:

  Ctrl+Alt+1: VNC window

  Ctrl+Alt+2: monitor console

  Ctrl+Alt+3: serial0 console

  Ctrl+Alt+4: parallel0 console

  QEMU-KVM 提供了的“-incoming”參數在指定的端口監聽遷移數據。目的主機上需要此參數接收來自源主機的遷移數據。

  清單 4. 遷移相關的 QEMU 命令
 

 (qemu) help migrate 
 migrate [-d] [-b] [-i] uri -- migrate to URI (using -d to not wait for completion) 
         -b for migration without shared storage with full copy of disk 
         -i for migration without shared storage with incremental copy of disk 
            (base image shared between src and destination) 

  使用 QEMU-KVM 進行數據塊動態遷移

  在源主機上創建和啟動虛擬機。

  在本地磁盤上創建虛擬機鏡像文件。本文創建了大小為 10G,qcow2 格式的本地鏡像文件。

清單 5. 源主機上創建虛擬機
victory3:~ # qemu-img create -f qcow2 /var/lib/kvm/images/sles11.1ga/disk0.qcow2 10G 
 

  在鏡像文件上安裝虛擬機。本文在虛擬機中安裝了 SLES11SP1 系統。

清單 6. 源主機上安裝虛擬機
 victory3:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga 
  -monitor stdio -boot c -drive file=/var/lib/kvm/images/sles11.1ga/disk0.qcow2, 
  if=none,id=drive-virtio-disk0,boot=on -device virtio-blk-pci,bus=pci.0, 
  addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -drive 
  file=/media/83/software/Distro/SLES-11-SP1-DVD-x86_64-GM-DVD1.iso, 
  if=none,media=cdrom,id=drive-ide0-1-0 -device ide-drive,bus=ide.1, 
  unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -device virtio-net-pci,vlan=0, 
  id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:3 

 

  虛擬機安裝完畢後,以下列命令啟動虛擬機。添加了“-monitor stdio”是為了開啟文本控制台;去掉了虛擬光驅中的 ISO 文件是為了保證遷移時,源主機和目的主機上虛擬設備的一致性。如果你在目的主機的相同路徑下存在相同名字的 ISO 文件,則可以在遷移時保留 ISO 文件參數。

清單 7. 源主機上啟動虛擬機
 victory3:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga 
 -monitor stdio -boot c -drive file=/var/lib/kvm/images/sles11.1ga/disk0.qcow2, 
 if=none,id=drive-virtio-disk0,boot=on -device virtio-blk-pci,bus=pci.0,addr=0x4, 
 drive=drive-virtio-disk0,id=virtio-disk0 -drive if=none,media=cdrom, 
 id=drive-ide0-1-0 -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0, 
 id=ide0-1-0 -device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:13:08:96 
 -net tap -vnc 127.0.0.1:3 

 

  在目的主機上創建和啟動虛擬機。

  在目的主機上為遷移後的系統創建鏡像文件,文件的大小必須大於或等於源主機的鏡像文件大小。

清單 8. 目的主機上創建虛擬機
 victory4:~ # qemu-img create -f qcow2 dest.img 20G 
 Formatting 'dest.img', fmt=qcow2 size=21474836480 encryption=off cluster_size=0 

 

  使用與源主機上相同的 qemu-kvm 參數,更改鏡像文件為目的主機上創建的鏡像文件,加上 -incoming 參數指定動態遷移所使用的協議、IP 地址和端口號。因為 -incoming 參數的作用是監聽端口,所以目的主機上的虛擬機一啟動就處於 paused 狀態,等待源主機上虛擬機開始遷移。本例中塊遷移使用 TCP 協議,目的主機上的監聽端口是 8888 端口。

清單 9. 目的主機上的遷移命令
 victory4:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga 
 -monitor stdio -boot c -drive file=/root/dest.img,if=none,id=drive-virtio-disk0, 
 boot=on -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0, 
 id=virtio-disk0 -drive if=none,media=cdrom,id=drive-ide0-1-0 -device ide-drive, 
 bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -device virtio-net-pci,vlan=0, 
 id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:8 -incoming tcp:0:8888 
 QEMU 0.12.3 monitor - type 'help' for more information 
 (qemu) info status 
 VM status: paused 

 

  遷移源主機上的虛擬機到目的主機。

  回到源主機上,在等待遷移的虛擬機中開啟一些實時服務以驗證動態遷移不會中斷服務的運行。本例中在虛擬機的終端窗口中用“top -d 1“命令開啟 TOP 服務,每秒刷新一次系統進程的信息。

圖 12. 等待遷移的虛擬機中開啟 TOP 服務
KVM 虛擬機在物理主機之間遷移的實現

  
 

  在源主機的 QEMU 控制台中輸入以下遷移命令,遷移開始。

清單 10. 源主機遷移命令
 (qemu) migrate -d -b tcp:victory4:8888 
 
 -d 可以在遷移的過程中查詢遷移狀態,否則只能在遷移結束後查詢。 
 -b 遷移虛擬機存儲文件 
 tcp:ivctory4:8888 數據遷移的協議、目的主機和端口。協議和端口必須和目的主機上虛擬機的 -incoming 參數一致。 

 

  動態遷移期間,源主機的虛擬機繼續運行,TOP 服務沒有中斷。同時可以在源主機的 QEMU 控制台查詢遷移的狀態。目的主機的虛擬機處於 paused 狀態,從目的主機的 QEMU 控制台可以看到遷移進度的百分比。

清單 11. 監視虛擬機遷移過程
源主機 QEMU 控制台顯示正在遷移的數據 
 (qemu) info migrate 
 Migration status: active 
 transferred ram: 52 kbytes 
 remaining ram: 541004 kbytes 
 total ram: 541056 kbytes 
 transferred disk: 2600960 kbytes 
 remaining disk: 5787648 kbytes 
 total disk: 8388608 kbytes 
 
目的主機 QEMU 控制台顯示遷移完成的百分比 
 (qemu) Receiving block device images 
 Completed 28 % 

 

  直到動態遷移完成,源主機的虛擬機變成 paused 狀態而目的主機上的虛擬機由 paused 狀態變成運行狀態,TOP 服務繼續運行且沒有中斷。

  關閉源主機的虛擬機,所有服務已經遷移到了目的主機,至此遷移完成。

  小結

  本文實現了在 Suse Linux Enterprise Server 11 SP1 發行版上 KVM 虛擬機的靜態遷移和動態遷移,特別是基於數據塊的動態遷移,使虛擬機的資源配置更加靈活。在其他支持 KVM 的 Linux 發行版上如 Ubuntu、Fedora 也可以完成類似的遷移操作。KVM 虛擬機在不斷的增強和完善中,開源社區和 Linux 的系統集成商也在開發各種各樣的基於 KVM 的管理工具,將來的 KVM 遷移工具會在性能,功能,可操作性和自動化程度上大大增強

Copyright © Linux教程網 All Rights Reserved