龙空技术网

干货分享之如何缩短vMotion的迁移时间

青荷露尖520 1326

前言:

现时朋友们对“虚拟机时间修改”大约比较重视,我们都需要分析一些“虚拟机时间修改”的相关文章。那么小编在网络上网罗了一些关于“虚拟机时间修改””的相关资讯,希望看官们能喜欢,姐妹们一起来了解一下吧!

是的,没错,默认情况下,只要满足是千兆网络,启用vMotion 就可以正常工作。在之前的文章《干货分享之vSphere vMotion(在线迁移)原理详解》中,我们介绍了 vMotion 的工作流程和原理,那我们有没有想过如何提高vMotion的迁移效率和缩短vMotion的时间,可能大家第一时间会想到增加vMotion网络的带宽,因为随着高带宽网络迅速成为主流, 25、40 甚至 100GbE 网络越来越成为数据中心的组网主流选择,没错,小伙伴的想法和思路基本是对的,但真的就是这么简单粗暴,通过增加网卡的带宽就能起到立竿见影的效果?如果答案是肯定的话,我们又如何充分利用这些高速网卡为vMotion带来质的提升呢?

先说结论,并不是简单粗暴通过增加网卡带宽即可,至于原因是为啥,请小伙伴们耐心认真这篇文章,就知道如何通过调整 vMotion 参数去优化vMotion迁移流程。

vMotion 流(Streams)和线程(Threads)概念

要了解如何调整 vMotion 性能从而缩短实时迁移时间,我们首先需要了解 vMotion 流(Streams,下文用“流”代替)的概念。vMotion 中的流架构最初是在 vSphere 4.1 中引入的,此后一直在开发和改进。执行实时迁移的先决条件之一是配置 vMotion 网络。作为启用 vMotion 的一部分,您需要至少一个在适用的 ESXi 主机上为虚拟操作流量启用的 VMkernel 接口。

当您具有为 vMotion 启用的 VMkernel 接口时,将实例化单个 vMotion 流。一个 vMotion 流包含三个帮助程序:

完成助手(Completion helper;支持 vMotion 进程。加密助手(Crypto helper;专用于在使用加密 vMotion 时加密和解密流量。流助手(Stream helper;负责将数据放在线路(网络)上。

vMotion性能上不去的原因

术语“助手”在vmkernel内部使用,但它实际上是一个线程(thread)。一个线程能够消耗一个 CPU 内核。查看实时迁移时间,迁移的持续时间在很大程度上取决于迁移模块将内存从源传输到目标 ESXi 主机所使用的带宽。但是,我们只受一个流帮助程序的限制,因此一个线程等于一个 CPU 内核。虽然这在使用现代 CPU 封装和 10GbE 网络时通常不会造成问题,但在使用 25GbE 或更高带宽的 NIC 和网络时,这确实是一个挑战。一个 vMotion 流不会充分利用 25GbE 或更高级别的网卡。

提升vMotion 性能的方法

那么如何通过其他手段,去降低一个 CPU 内核限制的影响导致vMotion性能下降,最直接的解决方案是增加更多包含流帮助程序的 vMotion 流。为此,我们有两个方案。

方案一:创建多个 VMkernel 接口

实现此目的的最简单方法可能是使用相同的网卡和网络配置多个 VMkernel 接口。请勿将其与多网卡 vMotion 混淆。这就是确保将 vMotion 流量分散到多个 1 或 10GbE 网卡上,因为这些速度很容易饱和。我们正在讨论如何提高单个网卡上 vMotion 的带宽利用率。通过这样做,我们正在缩短实时迁移时间。

为每个创建的 VMkernel 接口启用 vMotion 后,都会启动一个新的 vMotion 流。每个流都包含所讨论的帮助程序。多流帮助程序有助于在 vMotion 网络上放置更多数据,从而利用更多带宽在 vMotion 网络中复制内存页,从而减少在源和目标 ESXi 主机之间实现内存融合所需的时间。这样可以更快地完成 vMotion 操作。

单个 vMotion 流的平均带宽利用率为 15 GbE。当我们查看各种 NIC 速度时,会导致以下结果:

25 千兆以太网:1 个流 = ~15 千兆以太网40 GbE :2 个流 = ~30 GbE50 GbE :3 个流 = ~45 GbE100 GbE :6 个流 = ~90 GbE

这意味着您需要在单个 ESXi 主机上使用六个 vMotion VMkernel 接口,才能使用 100GbE 网卡高效地使用可用带宽。

创建更多其他 VMkernel 接口的缺点是给管理员带来大量的重复性操作,因为所有 VMkernel 接口都需要在所有 ESXi 主机上创建,并且需要 IP 地址,这对于管理员来说是一种挑战,不过好在我们可以使用 PowerCLI 来自动执行这类重复性的运维操作(有机会再写一遍PowerCLI的文章,介绍一下这个自动化运维利器)

方案二:优化单个 vMotion VMkernel性能

这是一个非常高级的选项,需要在每个 ESXi 主机上进行手动配置,通过修改每个启用了vMotion VMkernel 接口的默认 Rx 队列数实现支持更多 vMotion 流,从而提升vMotion的迁移性能。

这里主要是涉及到两个ESXi 主机高级设置。

Net.TcpipRxDispatchQueues和 Migrate.VMotionStreamHelpers

请务必注意,默认情况下,VMotionStreamHelpers 设置设置为“0”,这是为每个 IP 动态分配一个流的设置。由于这在将来的版本中可能会更改,因此在将此设置调整为其他值时请注意。当我们将 VMotionStreamHelpers 设置配置为另一个值时,TcpipRxDispatchQueues 设置应相应更改。请注意,增加 TcpipRxDispatchQueues 需要消耗更多的主机内存。

为了更改这些设置,我们只需在UI中配置ESXi主机高级设置即可。在这些示例中,我们将它们配置为每个 VMkernel 接口具有两个 Rx 队列和两个流帮助程序。

在 UI 旁边,您还可以使用 PowerCLI 执行相同的任务:

1

Get-AdvancedSetting -Entity <esxi host> -Name Net.TcpipRxDispatchQueues | Set-AdvancedSetting -Value '2'

1

Get-AdvancedSetting -Entity <esxi host> -Name Migrate.VMotionStreamHelpers | Set-AdvancedSetting -Value '2'

调整这两个设置后,请确保重新引导 ESXi 主机才能使其生效。使用此选项,我们有一个 VMkernel 接口,但在后台,启动了多个帮助程序。

这个方案唯一不足的地方就是需要重启 ESXi 主机,建议在非业务繁忙时间段进行。

结论

通过上文的分析,其实我们已经知道为啥不能简单通过增加vMotion网卡带宽去提升迁移的性能,就是默认情况下vMotion 只占用了一个CPU线程,并不能充分利用完网卡资源,这意味着在某些业务场景下,我们需要充分利用多个线程,去提升较大的工作负载的虚拟机的迁移性能,缩短迁移时间。

但是,这种场景往往不多见的,毕竟我们不可能经常对虚拟机进行迁移,因为迁移也会产生开销和导致虚拟机中断1-2数据包,对于某些敏感型业务,这也是不能接受的。建议小伙伴们根据自身的业务需求进去调整,一般情况,建议保持默认即可。

注:本文参考VMware官网博客。

标签: #虚拟机时间修改 #vmware修改时间