2010年1月25日

VirtualBox 的實時遷移試驗

自 VirtualBox 發佈 3.1 版本以來,Sun 賦予了 VirtualBox 實時遷移的能力。當然 Sun 沒有稱自家的實時遷移技術為 Live Migration,而是叫 Teleportation。按照它自家的說法就是 Teleportation 比 Live Migration 更高級。
實現實時遷移的條件之一就是要先把虛擬機存儲文件存放在公共的存儲空間,因此需要設定一個共享存儲 (Shared Storage) 的空間,讓實現遷移的兩台實體主機都能夠連接到共享存儲空間上的虛擬媒體文件,包括虛擬磁盤、虛擬光盤和虛擬軟盤。否則,即使遷移完成以後,也會因為無法 啟動遷移後的虛擬機。實時遷移實際上把虛擬機的各個配置文件封裝在一個文件,然後透過高速網絡,把這個封裝文件和內存運行狀態從一台實體機迅速傳送到另外 一台實體機上,期間虛擬機一直保持運行狀態。在現有技術條件下,大多虛擬機軟件,如 VMware、KVM、Hyper-V、Xen 都需要共享存儲。VirtualBox 支持 NFS 和 SMB/CIFS 協議的網絡文件系統,也可以支持 iSCSI 連接到 SAN 網絡。選用哪一種網絡文件系統,則需要根據具體情況而定。SMB/CIFS 在 Windows 和 Linux 都設置簡便。NFS 在 Windows 則略顯繁複。
Source 機
CPU: Pentium E2160
RAM: 2GB
OS: Fedora 12 x86_64

Target 機
CPU: Athlon 64 X2 4200+
RAM: 2GB
OS: Windows 7 Ultimate x64

Guest 機
Name: XP
CPU: Virtual Single-Core Processor without VT
RAM: 1GB
OS: Windows XP Professional
首先架設一個共享存儲環境,我就選用了 SMB/CIFS 協議,在 Source 機架設了 Samba 服務。如果把共享存儲服務放置在第三台電腦上會更好,但是我由於條件所限只能把共享存儲服務安裝在 Source 機上。具體方法就不再詳述了。然後移動 Source 機上的虛擬磁盤文件到共享存儲服務器上。重新註冊到 Source 機上的 VirtualBox,並重新連接到 Guest 機,即可啟動 Guest 機。
在 Target 機上新建一個虛擬機。虛擬機的配置和特性要求與 Source 機上的 Guest 機完全一致。隨後把共享存儲上的虛擬磁盤文件連接到這台虛擬機上。隨後在 Target 機運行如下命令:
VBoxManage modifyvm <guest_name> --teleporter on --teleporterport <port> --teleporterpassword <password>
以我的試驗為例:
VBoxManage modifyvm XP --teleporter on --teleporterport 1234 --teleporterpassword 123456
若是在 Windows 上使用 VBoxManage 命令行,則需要在命令提示符進入 VirtualBox 的安裝目錄,用 VBoxManage.exe 替代 VBoxManage,使用效果是一樣的。
以上命令瞬間執行完畢,然後啟動 Target 機上的 Guest 機。此時 VirtualBox 彈出等待遷移的窗口。若取消遷移,可以按下窗口上的關閉鍵。
等待迁移
然後在 Source 機運行遷移命令:
VBoxManage controlvm <guest_name> teleport --host <target_name>/<target_ip>/<target_domain_name> --port <port> --password <password>
以我的試驗為例:
VBoxManage controlvm XP teleport --host 192.168.1.3 --port 1234 --password 123456
迁移中
Source 機和 Target 機的 VirtualBox 控制台同樣出現了正在 Teleporting 的狀態:
正在迁移
遷移過程實際上是很短暫的。VirtualBox 把虛擬機的配置文件封裝並與虛擬機內存運行狀態一併從 Source 機傳送到 Target 機即可。按照我家裡的網絡情況,TP-Link 百兆家用路由器搭建的局域網,大約 20 秒的時間就可以完成遷移過程。VirtualBox 顯示的剩餘時間實際上是沒有意義的。遷移前段 VirtualBox 進行文件校驗應該會花費不少時間。實際所需要的時間是根據網絡情況與 Source 機和 Target 機的性能配置而定。
當遷移完成以後,Source 機上的 Guest 機自動關閉,而 Target 機上的 Guest 自動啟動並且恢復到 Guest 機關閉前的那一刻狀態。此時VirtualBox 控制台就會顯示 Teleported 狀態。
完成迁移
當 Guest 機下一次在 Target 機上啟動前,需要把實時遷移的功能關閉,否則就會出現等待遷移的界面。
VBoxManage modifyvm XP --teleporter off
至此,整個實時遷移的試驗宣告完成了。此外我更換了 Target 機的 OS,改為與 Source 機一樣的 Fedora 12 x86_64,似乎遷移的穩定性會更加好。以上截圖大多數取自第二次遷移試驗。
注意事項:

  1. 在 VirtualBox 上運用實時遷移功能,Source 機和 Target 機的硬件配置越接近越相似出現錯誤的機會就會越少。如果 Source 機和 Target 機硬件配置一致,那麼出現兼容性的問題就非常地小。特別是兩台機器的處理器,儘量要相近的型號。型號差異過大,則非常容易導致出錯,尤其是 Guest 機內運行著專門為特定處理器優化的軟件。當在兩台處理差異過大的機器上進行實時遷移,特別是在跨品牌處理器之間(主要是 AMD 與 Intel) 的遷移,那麼建議用戶關閉虛擬處理器的篩選器。命令如下 (後面<>為命令選項):
    VBoxManage modifyvm <guest_name> --cpuid <leaf> <eax> <ebx> <ecx> <edx>
    

  2. 實施遷移前,一定要確保 Source 機和 Target 機上的 Guest 機硬件配置和設置都是一樣的,特別是 System 和 Display 的選項一定要保持一致,同樣也需要採用相同的虛擬網卡。VirtualBox 的實時遷移功能並不需要依賴 VT 技術,但是不能在一台沒有 VT 的 Guest 機和一台開啟 VT 的 Guest 機之間遷移,否則就會出現錯誤。

  3. 最好配備有千兆局域網或者更好的網絡條件,因為 Guest 機的磁盤操作需要較高的速率,如果僅僅靠百兆局域網,那麼速率上的限制和操作上的延時則極大地影響文件操作的效率和適用體驗。
總結
VirtualBox 3.1 帶來了實時遷移能力,實在讓人驚喜。這應該是第一款跨處理器品牌跨平台的虛擬機軟件,能夠在 Windows、Linux、Mac OS X 和 Solaris 平台上進行實時遷移。良好的易用性,一直都是 VirtualBox 的優點。不過看起來,實時遷移對於 VirtualBox 而言還是剛剛起步,還有很遠的路要走。沒有為實時遷移這種重量級的特性配備圖形化操作界面對 VirtualBox 這款以易用聞名的虛擬機來說,不得不說是一個遺憾。
最後,限於條件,我沒有帶有 VT 技術的 Intel 處理器。如果哪位熱心朋友有這樣的條件,可以進行一次帶有 VT 的 AMD 與 Intel 的實時遷移試驗,將會更有挑戰性,因為這種情況下更容易出現處理器兼容性的問題。
http://linuxtoy.org/archives/virtualbox-teleportation.html

沒有留言:

發佈留言