你必须承认,VMWare在2003年发布VMotion时创造了一些非常酷的技术。因此,在我们讨论VMotion如何工作之前,让我们先快速介绍一下它的实际功能!我仍然经常遇到不知道VMotion存在的人,当他们发现VMotion的作用时,他们总是惊讶于这样的壮举甚至是可能的,更不实用!自从我的项目开始为ESXi构建两台1U服务器,我收到了很多关于“VMotion如何工作”的问题

VMotion是VMWare的一项技术,它可以使虚拟计算机在运行时不中断地从一个物理主机服务器移动到另一个物理主机服务器。这种技术有时被称为“活迁移”。事实上,微软在Hyper-V栈中也有类似的技术,你猜对了,叫做Hyper-V Live Migration。

VMotion和实时迁移有一些惊人的好处。由于服务器在运行时可以移动到完全不同的硬件上,因此在不停机的情况下,可以调出底层硬件,或者在不影响最终用户或其他应用程序,甚至不知道发生了这种情况的情况下进行维护。这确实改变了我们在现代计算环境中处理系统维护和中断的方式。在这项技术在数据中心普及之前,必须与客户协商停机窗口,服务器必须离线数小时以更换或升级硬件。在VMotion世界中,可以构建新硬件并移动虚拟服务器,而无需任何停机时间。那么VMotion是如何工作的呢?让我们看看!

VMotion如何工作

那么,让我们继续讨论VMotion实际上是如何工作的。在解释VMotion是如何工作的时,我对自己说“它的实际工作如此复杂(但又如此优雅简单),这是非常令人惊讶的。”在VMWare中肯定有一些大脑袋在工作,其中大部分都可以归因于领导VMotion项目的Mike Nelson。

VMotion是如何工作的

存储子系统扮演第一个关键角色

与标准桌面或标准物理服务器不同,VMWare服务器的硬盘通常不在服务器内部的物理磁盘上。相反,服务器的硬盘也被虚拟化,通过FibreChannel或iSCSI设置在SAN上,或者挂载在Network Attached Storage (NAS)上的Network File System (NFS)卷上。虽然VMWare还可以使用其他技术(VSAN、超融合计算、甚至存储迁移),但我们将重点关注这一最常见的配置。

通过将服务器的磁盘虚拟化并封装在网络上,VMWare使用虚拟机文件系统(VMS)文件,该文件可以与运行VMWare ESXi裸机管理程序的多个物理服务器共享。这些物理服务器一起工作以共享对此虚拟硬盘驱动器的读写访问权限。当你考虑到它的物流时,这本身就是一个相当惊人的壮举!

在VMotion开始之前,会在接收ESXi主机上创建VMware来宾操作系统配置的“卷影副本”,但在VSphere中尚不可见。这个幽灵只是一个外壳,下一个将接收内存内容。

内存管理器扮演第二个关键角色

理解VMotion如何工作的下一个重要部分与VMWare中的内存管理有关。由于虚拟计算机的内存也被映射和虚拟化,它允许VMWare的VMotion做一些惊人的事情。VMotion获取系统RAM的快照(如果您愿意,也可以称为副本),并开始通过以太网网络将该内存快速传输到所选的主机。这包括其他系统缓冲区的状态,甚至是视频RAM。VMWare工程师将这个原始快照称为“预拷贝”。

传输此快照时,VMotion会维护自创建原始快照以来发生的任何更改的更改日志缓冲区。这就是更快的网络速度更好的地方,允许更快的VMotion发生!

VMotion将继续制作和复制这些更改缓冲区(并将它们集成到内存中)到接收主机,直到下一组更改缓冲区足够小,可以在大约500ms的时间内通过网络传输。当这种情况发生时,VMotion暂停来宾虚拟机的虚拟CPU执行,复制最后一个缓冲区并将其集成到来宾的OS虚拟RAM中。VMotion中断发送主机上的磁盘访问,并在接收主机上启动它。最后,VMotion启动接收机器上的虚拟CPU。

虚拟交换机网络扮演最终角色

启动虚拟CPU后,VMotion手头还有最后一个任务。VMWare ESXi在本地网络中运行并控制一个或多个虚拟交换机。这是客户操作系统上的虚拟网络适配器连接的对象。就像任何其他网络,物理的或虚拟的,所有的交换机维护一个网络MAC地址的映射和它们连接的端口。由于机器可能不再连接到相同的物理交换机,VMotion命令ESXi主机网络子系统在接收主机上发送一个反向ARP (RARP)。这将导致所有交换机(包括物理交换机和虚拟交换机)更新映射,以便网络流量将到达新主机,而不是旧主机。

现在,如果你像我一样,你会敬畏地摇摇头。这是一种非常神奇的技术!

一些有趣的运动笔记

如果这让你觉得VMotion可能有一些需要注意的地方,那么你是对的。这里有一些事情需要考虑:

  • 来宾操作系统越忙,更改的内存页就越多。这将使VMotion花费更长的时间。虽然我从未见过,但从理论上讲,如果客户机上的内存变化速度快于通过网络传输的速度,VMotion可能会失败。
  • VMotion将在开始进程之前检查远程系统,以确保有足够的RAM和CPU。如果VMotion不能100%确定它会成功,它就不会开始。但是,如果由于某种原因,VMotion在传输过程中失败,它将中止,而不会影响原始虚拟机的正常运行时间。

现在你知道vmotion是如何工作的了!是的,那些VMware工程师绝对是一些聪明人!