Xen
使用 libvirt API 和 perl 遷移 Xen 域失敗
我正在嘗試使用 perl 中的 libvirt API 進行離線遷移。我有 2 台伺服器(兩者都是):
debian 擠壓
xen-hypervisor-4.0-i386
libvirt(第 1 台伺服器 - 0.8.7 和第 2 台伺服器 - 0.8.3)
在我設置的兩台伺服器上的 xend-config.sxp :
(xend-relocation-server yes)
(xend-relocation-port 8002)
(xend-relocation-address ‘’)
我還有第三台伺服器,我正在執行這個腳本:
use Sys::Virt; my $vmm1 = Sys::Virt->new( uri=> "xen://hostA/" ); my $vmm2 = Sys::Virt->new( uri=> "xen://hostB/" ); my $dom = $vmm1->get_domain_by_name("test1"); my $ddom = $dom->migrate($vmm2,0,undef,"xenmigr://hostB/",0);
當我執行腳本時,我在執行 xm 列表後在 hostA 上看到:
migrating-test1 17 128 1 ---s-- 9.9
在hostB上,我可以在’xm list’輸出中看到正在遷移域test1,但是在從該輸出中消失後它消失了,因為perl腳本將失敗並出現以下錯誤:
libvirt error code: 42, message: Domain not found: xenUnifiedDomainLookupByName
我試圖尋找一些解決方案,但沒有成功。我還嘗試從 hostA 執行“xm migrate”以將域遷移到 hostB,但此操作也開始但沒有完成(在完成下,我知道域將從 hostA 遷移到 hostB 並繼續在 hostB 上執行)。
編輯:我是否也需要共享儲存來進行離線遷移?
在發布這個問題幾天后,我發現它是如何工作的。
需要離線和實時遷移共享儲存。所以無論是離線遷移還是實時遷移都沒有關係,因為這兩種類型都需要共享儲存(例如 NFS,…)。
該 libvirt 錯誤程式碼 42 是由於在未使用共享儲存的情況下進行離線遷移引起的。該腳本嘗試將域從 hostA 遷移到 hostB,但腳本無法在 hostB 上找到該域(由於未使用共享儲存,離線遷移失敗),因為 hostB 上沒有從 hostA 遷移的域。