我正在使用KVM(实际上是通过libvirt)进行研究项目。 我们正在不同子网之间实时迁移虚拟机,所以在迁移之后必须更新IP地址和路由表,否则虚拟机将无法在新的子网中访问。 目标是尽可能快地做到这一点。
目前,我正在通过链接本地IPv6地址使用ssh连接到实时迁移后的虚拟机。 然后运行一个脚本来分配新的IP地址和网关。 但是这增加了很多不必要的开销。
我想要的是虚拟机上的守护进程检测刚刚完成的实时迁移。 有没有可以使用的钩子?
如果你正在做guest虚拟机vlan标记,你会看到这个改变,并可以这样编写脚本。 或者,您可以在两个/所有VLAN上使用高端口分配的DHCP服务器,并在多个作用域中列出相同的MAC,然后可以在vlan change上触发刷新。
如果我没有记错,在完成迁移后,虚拟机应该发送一个免费的数据包来宣告自己。 无论如何,直到arp表更新,总会有一点滞后,不是VM – >networking,而是networking – > VM
你可以做什么是通过轮询virsh dominfo
来捕捉“到达”虚拟机迁移到主机的虚拟机首先会显示为“已暂停”,只要“运行”,就知道已经完成迁移。 在目标你应该得到域开始事件与细节说,它已被迁移,并在源应该得到停止/迁移事件
这是使用适当的API捕捉libvirt迁移事件的最佳select。
从虚拟机内部捕获迁移是不可能的,因为实时迁移的整个想法是虚拟机不知道它,并且不应该感觉到迁移
我认为在这样的迁移过程中你会看到dmesg中出现的东西。 你可以testing,看看你是否? 如果是这样的话,通过编写一个快速而简洁的内核模块,或者简单地编写一个shell脚本守护程序来监视dmesg,这是很容易触发的。