龙空技术网

干货分享之vSphere vMotion(在线迁移)原理详解

青荷露尖520 1190

前言:

当前各位老铁们对“云服务器哪些迁移服务器”大约比较关心,姐妹们都需要了解一些“云服务器哪些迁移服务器”的相关文章。那么小编也在网摘上汇集了一些对于“云服务器哪些迁移服务器””的相关文章,希望你们能喜欢,小伙伴们快快来学习一下吧!

VMware vSphere vMotion 功能是vSphere服务器虚拟化产品最重要的功能之一,自 2003 年发布ESX 2.0版本(如下图所示)以来,vMotion功能就允许我们将虚拟机的活动状态从一个物理 ESXi 主机迁移到另一个物理 ESXi 主机。如今,支持在线迁移虚拟机的功能是每个 服务器虚拟化软件产品必备的功能。

但可能很多小伙伴都不了解vMotion的原理和全过程技术细节,在排错时可能会无从下手。

本文将重点介绍将活动计算状态从源迁移到目标 ESXi 主机的标准 vMotion(即在线迁移)。我们还有可能执行存储 vMotion,当与计算 vMotion 结合使用时,它被视为 XvMotion。其他风格包括 Long Distance vMotion 和 Cross vCenter vMotion,它们都主要是 vMotion 进程的 ESXi 端之上的 vCenter Server 操作。

接下来,我们在讨论vMotion原理之前,来看下啥是vMotion。

什么是vMotion?

任何应用都无法承受停机,但幸运的是,一些停机完全可以避免。在这些情况下,您事先知道其系统停机情况即将发生(例如,由于维护、迁移或自然灾难),因此,您可以通过 vMotion 将工作负载从预计会发生停机的服务器迁移到预计不会发生停机的服务器。

VMware vSphere vMotion 是零停机实时迁移功能,可将工作负载从一台服务器迁移到另一台服务器。此功能可跨虚拟交换机、集群甚至云环境来运行(具体取决于您拥有的 vSphere 版本)。在工作负载迁移期间,应用仍在运行,并且用户仍然有权访问他们需要的系统。保持高效工作的保障!

VMware vSphere 实时迁移使您可以将整台运行中虚拟机从一台物理服务器迁移到另一台,且不会停机。虚拟机可保留其网络身份和连接,确保顺畅的迁移流程。通过高速网络传输虚拟机的活动内存和精确执行状态,从而使虚拟机可以从在源 vSphere 主机上运行切换到在目标 vSphere 主机上运行。整个流程在千兆以太网网络上不会超过两秒钟。实时迁移使您可以:

自动优化资源池中的虚拟机。在不安排停机或中断业务运营的情况下执行硬件维护。将虚拟机从出现故障或性能欠佳的服务器中移出。

了解完vMotion的概念后,我们再一起来看看vMotion的实现原理。

vMotion详细过程

启动虚拟机迁移时,vCenter Server 实例将执行所谓的长时间运行的迁移任务来处理迁移。第一步是执行兼容性检查。是否可以在目标主机上运行虚拟机?考虑可能阻止实时迁移的可能约束。接下来是告知源和目标 ESXi 主机发生了什么。将创建包含以下信息的迁移规范:

要实时迁移的虚拟机该虚拟机的配置(虚拟硬件、VM 选项等)源 ESXi 主机目标 ESXi 主机虚拟运动网络详细信息

迁移规范由 vCenter Server 实例与源和目标 ESXi 主机共享,确保交换所有必要的信息以启动迁移过程。vCenter Server 使用虚拟置备 X 守护程序 (VPXD) 与 ESXi 主机通信,该守护程序调用在 ESXi 主机上运行的虚拟置备 X 代理 (VPXA)。VPXA 侦听来自 VPXD 的消息,接收迁移规范,并通过 hostd 将其传递给 VMX 进程。主机守护程序 (hostd) 维护特定于主机的信息和访问权限以进行管理,包括虚拟机遥测,如 VMstate。启动迁移时,hostd 会将虚拟机置于中间状态,以便在迁移过程中无法更改虚拟机的配置。

虚拟机监视器 (VMM) 进程负责管理虚拟机内存,并将虚拟机存储和网络 I/O 请求传输到 VMkernel。所有其他对性能无关的 I/O 请求都由 VMM 转发到 VMX。虚拟机扩展 (VMX) 进程在 VMkernel 中运行,负责处理对性能不重要的设备的 I/O。请注意,VMM 仅在迁移期间在源 ESXi 主机上使用,因为这是虚拟机的活动内存所在的位置。

完成此操作后,源 ESXi 上的 VMkernel 迁移模块将在启用了 vMotion 的网络上打开套接字,以设置与目标 ESXi 主机的通信。

准备阶段到预复制阶段

到目前为止,所有进程和通信路径都已准备好开始实时迁移。准备阶段就是确保目标 ESXi 主机为要迁移的虚拟机预先分配计算资源。此外,虚拟机是在目标 ESXi 主机上创建的,但它被屏蔽了。有关虚拟机配置的所有信息都已知道,因为这些信息包含在迁移规范中。

完成准备阶段后,该过程将进入复制前阶段,在该阶段中,内存将从源主机传输到目标 ESXi 主机。需要跟踪源 ESXi 主机上的所有虚拟机内存页。通过这样做,vMotion 进程知道在迁移过程中覆盖了哪些内存页(称为脏页),因为它需要将这些内存页重新发送到目标主机。

页面跟踪

在预复制阶段,虚拟机正在使用的 vCPU 会短暂地震惊以安装页面跟踪程序。VMkernel 迁移模块现在要求 VMM 启动页面跟踪,因为 VMM 拥有虚拟机的内存页表状态。下图显示了客户机操作系统在 vMotion 期间将数据写入内存时发生的情况:

迭代内存预复制

页面跟踪是一个连续的循环。它将通过使用多次迭代来实现内存预复制收敛。第一次迭代(预复制阶段 1)复制虚拟机内存。以下迭代(预复制阶段 0 到 n)用于复制脏内存页。举个例子,当我们实时迁移具有 24GB 内存的虚拟机时,迭代可能如下所示:

阶段 -1:复制 24GB 的虚拟机内存和跟踪页。当我们发送内存时,它会弄脏 8GB。

第 0 阶段:重新传输脏污的 8GB。在此过程中,内存会再弄脏3GB。

第 1 阶段:发送 3GB。在进行传输时,虚拟机会弄脏 1GB。

第 2 阶段:发送剩余的 1GB。

将内存页从源复制到目标 ESXi 主机时,我们需要确定何时将所有内存复制到其目标。VMM 询问 VMkernel 是否可以在每次迭代后终止预复制过程。仅当所有内存更改(脏页)都复制到目标主机时,才可能执行此操作。迭代内存预复制算法的一部分是将所有目标内存页与其源匹配。从第 0 页一直到最大或最后一个内存页码,将按顺序检查所有内存页,以查看目标页是否与源页同步。

要确定我们是否可以终止预复制,我们需要验证是否可以在 < 500ms 的窗口中完成最后一个内存页复制。我们可以使用移民税中的信息来计算:

迁移传输速率;我们在主机之间以什么速度 (GbE) 复制内存数据?脏页速率 (GB/s);客户机操作系统覆盖了多少内存页?我们还有多少页要传输到目标主机?

如果否,则进行下一次迭代。如果结果为“是”,VMkernel 迁移模块将终止预复制过程。

现在,如果脏页速率高于迁移传输速率,会发生什么情况?如果是这种情况,那么进行另一次迭代就没有意义了,因为我们永远无法达到内存复制前收敛,并且迁移将停止。这就是我们在 vSphere 5.0 中引入 Stun Between Page Send (SDPS) 的原因。基本上,SDPS是VM内核告诉VM不要运行计划指令而是引入非常短的“睡眠”的一种方式。这听起来像是对工作负载性能的影响,但这发生在细粒度级别。我们在这里谈论的是微秒,正是由于这些非常小的时间范围,我们可以收敛,vMotion 过程将成功。

如果脏页速率>传输速率,则每次迭代都会执行 SDPS。后续迭代仅复制在上一次迭代期间修改的脏内存页。较短的迭代持续时间使来宾操作系统修改或弄脏其内存页的机会更少,从而缩短下一次复制前迭代。尽管涉及某种形式的性能成本,但通常 SDPS 对工作负载并不明显。目标始终是让客户机操作系统不知道正在发生的迁移。

切换

VMM 终止内存复制前迁移后,所有内存页都驻留在目标 ESXi 主机上。VMM 现在向 VMX 发送远程过程调用 (RPC),以便它可以挂起源虚拟机。VMX 将进入检查点阶段,在该阶段,它将挂起虚拟机并将检查点数据发送到目标 ESXi 主机。

在此过程中,目标 ESXi 主机上的虚拟机将被取消屏蔽,并使用检查点数据还原状态。基本上发生的情况是目标上的虚拟机已打开电源,但引导过程中断并指向从源 ESXi 主机迁移的内存页。所有这些通常在 100-200 毫秒内发生。这是虚拟机未处于运行状态的眩晕时间。震晕时间的持续时间取决于多种因素,例如主机硬件和动态虚拟机上的工作负载。

完成上述过程,虚拟机现已实时迁移!

标签: #云服务器哪些迁移服务器