将正在运行的虚拟机从一个管理程序迁移到另一个管理程序实际上如何工作?

bin*_*aly 0 virtualization cloud cloud-computing virtual-machines hypervisor

在云环境中将正在运行的虚拟机从一个虚拟机管理程序迁移到另一个虚拟机管理程序实际上是如何工作的?

我知道这是可能的,并且存在此功能。但是,当正在运行的虚拟机从一个管理程序迁移到另一个管理程序时,实际发生了什么?我很难想象这是可能的,没有丝毫中断?

虽然我可能会想象,如果裸机在物理上非常接近,我可能会以某种方式实现它,但我很难将正在运行的虚拟机从美国数据中心迁移到欧盟数据中心。

任何人都可以解释实际发生了什么以及如何实现没有可感知的停机时间但保持一致性?

tec*_*b0y 6

从概念上讲,该过程很简单:开始通过网络将 VM 的所有 RAM 从一台物理主机复制到另一台物理主机,并跟踪已复制的哪些内存部分在复制后已更新。对更改的 RAM 重复循环,直到更改集变小,暂停 VM,复制 RAM 的最后几位(和 CPU 寄存器状态),然后开始在新物理主机上运行 VM。发送一个免费的 ARP 以便网络看到 VM 的新位置,然后你就可以离开了。它不是 100% 透明的——在暂停和 ARP 延迟之间,VM 将脱机大约一秒钟。

为了使其工作,内存 IO 速率必须小于主机之间的链接速度(这就是为什么首选使用直接 10GigE 链接进行 VMotion,主机之间没有路由器),以及主机之间的延迟需要很短——VMware 需要 5 毫秒的往返时间。

源主机和目标主机需要具有相同的底层磁盘存储,这通常将您限制在同一房间内的主机。您可以进行同步存储复制以走得更远,但通常会以较慢的性能为代价(因为每个磁盘操作都必须到远端并接收确认)。

有多种方法可以在更远的距离(甚至在大洲之间)迁移服务,但这些方法是切换应用程序的活动实例所在的位置(以及您如何访问它),而不是实时迁移 VM 本身。