KVM“实时迁移完成”检测

KVM“实时迁移完成”检测

我正在使用 KVM(实际上是通过 libvirt)进行研究项目。我们正在不同子网之间实时迁移虚拟机,因此迁移后必须更新 IP 地址和路由表,否则虚拟机在新子网中将无法访问。目标是尽快完成此操作。

目前,我在实时迁移后使用 ssh 通过本地链路 IPv6 地址连接到虚拟机。然后它运行一个脚本来分配新的 IP 地址和网关。但这会增加很多不必要的开销。

我希望虚拟机上的守护进程能够检测到实时迁移刚刚完成。有什么钩子可以使用吗?

答案1

如果您正在执行访客 VLAN 标记,您将看到该更改并可以以此方式编写脚本。或者,您可以在两个/所有 VLAN 上使用高度端口分配的 DHCP 服务器,并在多个范围中列出相同的 MAC,然后您只需在 VLAN 更改时触发刷新即可。

答案2

如果我没记错的话,完成迁移后,虚拟机应该会发送一个免费数据包来宣布自己。无论如何,在 arp 表更新之前,总会有一点延迟,不是虚拟机 -> 网络,而是网络 -> 虚拟机

你可以通过轮询捕获“到达”的虚拟机。virsh dominfo迁移到主机的虚拟机最初将显示为“暂停”,一旦它“运行”,你就知道它已完成迁移。在目标上,你应该获得域启动事件,其中包含有关已迁移的详细信息,而在源上,你应该获得停止/迁移事件

更好的方法是使用类似http://libvirt.org/git/?p=libvirt.git;a=blob;f=examples/domain-events/events-python/event-test.py 在目标上,你应该得到域启动事件,其中包含有关它已被迁移的详细信息;在源上,你应该得到停止/迁移事件

这是使用适当的 API 捕获 libvirt 迁移事件的最佳选择。

在虚拟机内部捕获迁移是不可能的,因为实时迁移的整个想法是虚拟机不知道它,也不应该感觉到迁移

答案3

我认为在这样的迁移过程中,您会看到 dmesg 中出现一些内容。您可以测试一下,看看是否出现了?如果是这样,这很容易触发,要么通过编写一个快速而粗糙的内核模块,要么只是快速编写一个 shell 脚本守护进程来监视 dmesg。

相关内容