使用 libvirt API 和 perl 迁移 Xen 域失败

使用 libvirt API 和 perl 迁移 Xen 域失败

我正在尝试使用 perl 中的 libvirt API 进行离线迁移。我有 2 台服务器(两台都):
- debian squeeze
- xen-hypervisor-4.0-i386
- libvirt(第一台服务器 - 0.8.7,第二台服务器 - 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 list 后我在 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 migration”以将域迁移到 hostB,但此操作也启动了但未完成(在完成的情况下,我理解域将从 hostA 迁移到 hostB 并继续在 hostB 上运行)。

编辑:离线迁移是否也需要共享存储?

答案1

我在发布这个问题几天后发现了它是如何工作的。

要进行离线和实时迁移,共享存储必不可少。因此,无论运行的是离线迁移还是实时迁移,这两种迁移类型都需要共享存储(例如 NFS 等)。

该 libvirt 错误代码 42 是由于在不使用共享存储的情况下进行离线迁移而导致的。脚本尝试将域从主机 A 迁移到主机 B,但脚本无法在主机 B 上找到该域(由于未使用共享存储,离线迁移失败),因为主机 B 上没有从主机 A 迁移的域。

相关内容