KVM“实时迁移完成”检测

我正在使用KVM(实际上是通过libvirt)进行研究项目。 我们正在不同子网之间实时迁移虚拟机,所以在迁移之后必须更新IP地址和路由表,否则虚拟机将无法在新的子网中访问。 目标是尽可能快地做到这一点。

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

我想要的是虚拟机上的守护进程检测刚刚完成的实时迁移。 有没有可以使用的钩子?

如果你正在做guest虚拟机vlan标记,你会看到这个改变,并可以这样编写脚本。 或者,您可以在两个/所有VLAN上使用高端口分配的DHCP服务器,并在多个作用域中列出相同的MAC,然后可以在vlan change上触发刷新。

如果我没有记错,在完成迁移后,虚拟机应该发送一个免费的数据包来宣告自己。 无论如何,直到arp表更新,总会有一点滞后,不是VM – >networking,而是networking – > VM

你可以做什么是通过轮询virsh dominfo来捕捉“到达”虚拟机迁移到主机的虚拟机首先会显示为“已暂停”,只要“运行”,就知道已经完成迁移。 在目标你应该得到域开始事件与细节说,它已被迁移,并在源应该得到停止/迁移事件

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

这是使用适当的API捕捉libvirt迁移事件的最佳select。

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

我认为在这样的迁移过程中你会看到dmesg中出现的东西。 你可以testing,看看你是否? 如果是这样的话,通过编写一个快速而简洁的内核模块,或者简单地编写一个shell脚本守护程序来监视dmesg,这是很容易触发的。