我正在尝试使用 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 迁移的域。