首頁 > 軟體

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

2020-06-16 17:20:35

如何從一台物理主機上遷移 KVM 虛擬機器到另一台物理主機

虛擬機器的遷移使資源設定更加靈活,尤其是線上遷移技術,提高了虛擬伺服器的可用性和可靠性。本文是虛擬機器遷移技術漫談系列的第二部分,詳細介紹 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. 共用儲存的動態遷移示意圖

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

本地儲存的動態遷移

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

  • 比如某些伺服器沒有使用 SAN 儲存,而且遷移的頻率很小,虛擬機器上的服務對遷移時間的要求不嚴格,則可以使用儲存塊動態遷移技術;另一方面,SAN 儲存的價格比較高,儘管 SAN 儲存能夠提高遷移效能和系統的穩定性,對於中小企業僅僅為了加快遷移速度而設定昂貴的 SAN 儲存,價效比不高。
  • 在集中式共用外部儲存的環境下,基於共用儲存的動態遷移技術無疑能夠工作得很好。但是,考慮到目前一些計算機叢集並沒有採用共用式外存,而是各自獨立擁有本地外存的物理主機構成。基於共用儲存的遷移技術在這種場合下受到限制,虛擬機器遷移到目的主機後,不能存取其原有的外存裝置,或者需要源主機為其外存存取提供支援。

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

圖 2. 本地儲存的動態遷移示意圖

相比較基於共用儲存的動態遷移,資料塊動態遷移的需要同時遷移虛擬機器磁碟映象和虛擬機器系統記憶體狀態,延長了遷移時間,在遷移效能上打了折扣。

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 OSHost NameIP 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. 共用儲存的動態遷移實驗設定圖

  1. 確保網路連線正確,源主機、目的主機和 NFS 伺服器之間可以互相存取。
  2. 確保源主機和目的主機上的 VMM 執行正常。
  3. 設定 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. 儲存池設定圖
  • 新增一個新的儲存池。點選左下角的“+”號,彈出一個新的視窗。輸入以下引數:
  • Name:儲存池的名字。
  • Type:選擇 netfs:Network Exported Directory。因為本文使用了 NFS 作為共用儲存協定。
    圖 5. 新增共用儲存池
  • 點選“Forward”後,輸入以下引數:
  • Target Path:共用儲存在原生的對映目錄。本文中這個目錄在源主機和目的主機上必須一致。
  • Format:選擇儲存型別。這裡必須是 nfs。
  • Host Name:輸入共用儲存伺服器,也就是 NFS 伺服器的 IP 地址或 hostname。
  • Source Path:NFS 伺服器上輸出的共用目錄。
    圖 6. 儲存池設定
  • 點選”Finish”後,共用儲存新增成功。此時在物理機上檢視 Linux 系統的檔案系統列表,可以看到共用儲存對映的目錄。

源主機上建立基於共用儲存的 KVM 虛擬機器。

  • 選擇共用儲存池,點選”New Volume”建立新的儲存卷。
  • 輸入儲存卷引數。本例為虛擬機器建立了大小為 10G,格式為 qcow2 的儲存卷。
    圖 7. 新增儲存卷
  • 在這個共用儲存卷上建立虛擬機器。本文建立了一個基於 Window 2008 R2 系統的虛擬機器。建立虛擬機器的具體步驟見本文前面“建立 KVM 虛擬機器“小節。

連線遠端物理主機上的 VMM。這裡以源主機為例,目的主機做相同的設定。

  • 在源主機上開啟 virt-manager 應用程式,連線 localhost 本機虛擬機器列表。點選 File->Add Connection,彈出新增連線視窗,輸入以下各項:
  • Hypervisor:選擇 QEMU。
  • Connection:選擇連線方式 。本文選擇 SSH 連線。
  • Hostname:輸入將要連線的主機名或 IP 地址,這裡填寫目的主機名 victory4。
    圖 8. 新增遠端 VMM 連線
  • 點選 Connect,輸入 SSH 連線的密碼後,將顯示源主機和目的主機上的虛擬機器列表。
    圖 9. 管理遠端 VMM

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

  • 在源主機上啟動虛擬機器 Windwos 2008 R2。
  • 在虛擬機器中,開啟實時網路服務(用來驗證遷移過程中服務的可用性)。
  • 開啟遠端連線服務 remote access,在其他主機上遠端連線此虛擬機器。
  • 開啟網路實時服務。例如開啟瀏覽器並且播放一個實時網路視訊。
  • 準備動態遷移,確保所有的虛擬儲存裝置此時是共用的,包括 ISO 和 CDROM。
  • 在源主機的 virt-manager 視窗中,右鍵點選等待遷移的虛擬機器,選擇“Migrate ”。
    • New host:選擇目的主機的 hostname。
    • Address:填入目的主機的 IP 地址。
    • Port and Bandwith:指定連線目的主機的埠和傳輸頻寬,本文中沒有設定,使用預設設定。
    圖 10. 虛擬機器遷移設定
  • 點選“Migrate”和“Yes”開始動態遷移虛擬機器。
    圖 11. 虛擬機器遷移進度
  • 動態遷移的時間與網路頻寬、物理主機的效能和虛擬機器的設定相關。本實驗中的網路連線基於 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 服務
  • 在源主機的 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 發行版上如 UbuntuFedora 也可以完成類似的遷移操作。KVM 虛擬機器在不斷的增強和完善中,開源社群和 Linux 的系統整合商也在開發各種各樣的基於 KVM 的管理工具,將來的 KVM 遷移工具會在效能,功能,可操作性和自動化程度上大大增強。

 本文永久更新連結地址http://www.linuxidc.com/Linux/2017-03/141274.htm


IT145.com E-mail:sddin#qq.com