在Ubuntu中使用TCP连接进行实时迁移KVM VM失败

时间:2019-03-28 11:07:22

标签: ubuntu-18.04 kvm libvirt

我设置了2台Ubuntu 18.04 64主机,并安装了virt-manager软件包。
在主机A中创建一个VM。
将主机A配置为NFS服务器(将其/ var / lib / libvirt / images导出到主机B)。

在主机B上,配置/etc/libvirt/libvirtd.conf,以侦听TCP,如下所示,
listen_tcp = 1

如下所示,在主机A中运行命令以将VM迁移到主机B中,

virsh migrate --live --verbose testVM qemu+ssh://hostB_ip/system  

它显示了此错误,

error: unable to connect to server at 'hostB:49152': Connection refused

然后,在主机B上,将/p/libvirt/libvirtd.conf添加到

tcp_port = "49152"

并重新启动libvirtd服务,再次尝试实时迁移,现在错误已更改为

error: unable to connect to server at 'hostB:49153': Connection refused

我不知道该如何解决问题。

1 个答案:

答案 0 :(得分:0)

您正在混淆两个不同的连接。

libvirtd.conf设置是指libvirtd守护程序侦听的IP地址。对于TLS连接,默认为16514;对于普通TCP连接,默认为16509;通过将--listen标志传递到libvirtd来启用。

尽管您的URI指定了qemu+ssh://协议,但是您不需要libvirtd来监听任何网络端口。将使用libvirtd通过SSH连接建立netcat连接。

您可能真正遇到的错误来自QEMU本身。 libvirt运行迁移时,它必须为目标主机QEMU分配一个端口,以接受来自源主机QEMU的传入迁移。这些是从49152 -> 49252范围分配的。

鉴于来自源QEMU的消息表明它无法连接至目标QEMU,最可能的问题是您有防火墙规则阻止了TCP端口49152 -> 49252

您可以打开防火墙以允许这些端口。或者,您可以告诉libvirt通过libvirtd连接建立QEMU迁移数据流的隧道,从而避免需要具有开放端口。可以使用--tunnelledvirsh migrate的参数

还请注意libvirt不支持您的存储设置。您不能让一台主机作为本地文件系统访问存储,而另一台主机作为NFS文件系统访问存储。这将导致许可问题,可能会导致迁移最终失败。

两个主机都应该通过NFS访问映像,或者两个主机都不应该使用NFS。如果您不使用NFS,则可以将args传递给virsh migrate来告诉它在存储文件内容之间进行复制。