Xen

使用 libvirt API 和 perl 遷移 Xen 域失敗

  • July 29, 2011

我正在嘗試使用 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 遷移的域。

引用自:https://serverfault.com/questions/238174