关于 NSX-T 下的 MTU(上)


在实施 NSX-v 或者 NSX-T 的项目时,经常听到一个词:MTU,本文着重讲讲为什么 MTU 在 NSX 环境中如此重要,如何根据不同的设计来配置/验证 MTU 等等。

本文目录如下:

上篇:

  • 如果在 NSX 环境下 MTU 设置不正确会有什么现象?

  • 如何验证 MTU 设置是否正确?

  • 在 NSX-T 环境下如何设置 MTU?

下篇:

  • 为什么 NSX 环境中 MTU 如此重要?有没有 workaround?

  • NSX 多中心架构下对于 MTU 的优化

 

如果 MTU 设置不正确会有什么现象?

当一个 NSX-T 环境中存在 MTU 设置问题时,会有下列现象之一:

 

  • 虚拟机可以 Ping 通其他虚拟机,但 SSH 失败;

  • 虚拟机可以 Ping 通其他虚拟机,部分 HTTP 访问正常,部分 HTTP 访问会显示一直加载页面;

  • 虚拟机和其他虚拟机通信均正常,但是和外部 PC SSH 通信时有问题;

  • 通过 Iperf 打流,发现带宽远低于物理链路的带宽,比如带宽为 10G,但 Iperf 测试下来只有几百 mbps;

  • 多台虚拟机在同一台宿主机上运行,相互间所有通信正常;而跨主机通信时 SSH/HTTP 等服务异常;

  • 如果临时将虚拟机网卡的 MTU 由默认的 1500 改为 1400,则所有通信恢复正常。

 

如何验证 MTU 设置是否正确?

在 NSX 环境中会存在两层网络,一层是物理交换机、服务器、vSphere 组成的承载网络(Underlay),另一层是 NSX、vSphere、Edge 节点构成的虚拟网络(Overlay)。两层网络中都有 MTU 相关的配置,任意一层配置不对都可能造成使用 Overlay 网络的虚拟机通信异常。

 

图片

 

下面列出了两种 MTU 测试方法:

 

  • Underlay 测试法:在 ESXi 和 Edge 底层测试 TEP 网络

  • Overlay 测试法:在 VM 中模拟正常访问,测试报文是否能被正常接收,如果能被正常接收则表示底层 TEP 网络正常。

 

项目实施时根据喜好使用其中一种测试方法进行测试即可。

 

Underlay 测试方法

为了结果的准确性,建议对所有 ESXi 到 ESXi,ESXi 到 Edge 的 TEP 进行大包测试。

 

图片

 

通过 vmkping 测试 ESXi 到 ESXi,ESXi 到 Edge 的 MTU 是否正常


 

通过 SSH 登陆任意一台安装好 NSX 的 ESXi,运行下列命令:

 

vmkping ++netstack=vxlan -d -s 1570 <Destination-TEP-IP> 

参数说明:

 

  • ++netstack=vxlan:使用 vxlan TCP/IP 堆栈;

  • -d :不进行报文的切片;

  • -s 1570:发送的 ICMP 包载荷大小。ICMP 包头默认 8 bytes,IPv4 包头默认 20 bytes,于是发出的 IP 包大小等于 1598,刚好小于 NSX 要求的 1600,实际最大能发送的包为 1572 bytes,1570 只是为了方便记忆;

  • <Destination-TEP-IP>:其他 ESXi 主机/Edge 节点的 TEP 地址。

 

ESXi 或者 Edge 节点的 TEP 地址可以在 NSX Manager 的下列位置获得:

 

图片

图片

 

通过 vmkping 测试 Edge 到 Edge,Edge 到 ESXi 的 MTU 是否正常


 

通过 Console 或者 SSH 登陆任意 Edge 节点。运行 get logical-router,查看 TUNNEL 对应的 VRF ID,一般都为 0。

 

图片

 

运行 vrf 0 进入 Tunnel vrf,执行下列命令进行测试:

 

ping <Destination-TEP-IP> size 1570 dfbit enable

 

 

图片

Overlay 测试方法

 

Overlay 测试法是直接在虚拟机中 Ping 大包来模拟正常访问,看 Ping 包是否会被丢弃。

 

为了结果的准确性,建议进行虚拟机到虚拟机,以及外部 PC 到虚拟机的访问测试。

 

图片

 

Windows 系统 Ping 命令格式


 

ping -f -l 1472 <Destination-IP>

 

 

  • -f :表示不分片;

  • -l :是小写的 L,表示包的大小,进行 Overlay 测试时,包大小需要设置为 1472;

  • Destination-IP:目标虚拟机或者 PC 的 IP 地址。

 

Linux 系统 Ping 命令格式


 

ping -M do -s 1472 <Destination-IP>

 

 

  • -s :表示 ICMP 包大小;

  • -M do :表示不分片;

  • Destination-IP:目标虚拟机或者 PC 的 IP 地址。

 

MacOS 系统 Ping 命令格式


 

ping -s 1472 -D <Destination-IP>

 

 

  • -s :表示 ICMP 包大小;

  • -D :表示不分片;

  • Destination-IP:目标虚拟机或者 PC 的 IP 地址。

 

在 NSX-T 环境下如何设置 MTU?

以下面两张图为例,在一个 NSX-T 环境中,所有 TEP 到 TEP 沿途的设备(包括物理交换机、虚拟交换机等)均需要将 MTU 调整为 ≥ 1600。

 

如果所有 TEP 在同网段,则所有相关设备的二层口需要调整 MTU(下图所有红色线对应的接口):

 

图片

 

如果 TEP 分散在多个网段,则所有相关设备的二层口,以及三层 VLAN 接口均需要调整 MTU(下图所有红色线对应的接口):

 

图片

 

1、物理交换机调整 MTU

不同厂家,不同型号的交换机配置 MTU 的方法差别很大,建议在配置 MTU 时优先参考产品的配置手册。

 

笔者总结了一些常见设备的配置方法,供参考。

 

华为交换机


 

二层接口 MTU(普通接口和聚合口通用):

 

<HUAWEI> system-view
[HUAWEI] interface gigabitethernet 0/0/1
[HUAWEI-GigabitEthernet0/0/1] jumboframe enable 5000

 

 


三层 VLAN 接口 MTU:

 

[HUAWEI] interface Vlanif 100
[HUAWEI-Vlanif100] mtu 1600

 

 

三层物理接口 MTU:

 

[HUAWEI] interface gigabitethernet 0/0/1
[HUAWEI-GigabitEthernet0/0/1] undo portswitch
[HUAWEI-GigabitEthernet0/0/1] mtu 1600

 

 

华三交换机


 

二层接口 MTU(普通接口和聚合口通用):

 

interface G1/1
 jumboframe enable 600

 

 


三层 VLAN 接口 MTU:

 

interface Vlanif 100
 mtu 1600

 

 

注意:在某些软件版本下,需要通过 ip mtu 1600 来调整三层接口 MTU。

 

思科交换机(C4506/C2906/C3560/C3750 等老型号交换机)


 

全局配置二层接口的 MTU(FastEthernet):

 

system mtu 1600 

 

 

全局配置二层接口的 MTU(GigabitEthernet):


system mtu jumbo 1600 


全局配置三层 VLAN 接口 MTU

 

system mtu routing 1600

 


配置指定三层 VLAN 接口的 MTU

 

interface vlan 100
 mtu 1600 

思科交换机(Nexus 3k/5k 等)


 

通过 QoS 策略全局调整二层接口的 MTU:

 

policy-map type network-qos jumbo
  class type network-qos class-default
      mtu 9216
system qos
  service-policy type network-qos jumbo

 


配置三层 VLAN 接口的 MTU

 

Switch(config)#interface vlan 1
Switch(config-if)#mtu 9216

 

配置三层物理接口的 MTU

 

Switch(config)#interface ethernet 1/1
Switch(config-if)#no switchport
Switch(config-if)#mtu 9216

 

 

思科交换机(Nexus 7k/9k 等)


 

Nexus 7k/9k 不仅支持通过 QoS 策略全局调整 MTU,也支持为部分接口配置 MTU。

 

通过 QoS 策略全局调整二层接口的 MTU:

 

policy-map type network-qos jumbo
  class type network-qos class-default
      mtu 9216
system qos
  service-policy type network-qos jumbo

 

 

配置部分二层接口的 MTU:

 

Switch(config)#interface ethernet 1/1
Switch(config-if)#mtu 9216

 

 

配置三层 VLAN 接口的 MTU

Switch(config)#interface vlan 1
Switch(config-if)#mtu 9216

 


配置三层物理接口的 MTU

 

Switch(config)#interface ethernet 1/1
Switch(config-if)#no switchport
Switch(config-if)#mtu 9216

 

 

思科交换机(Nexus 2k)


 

Nexus 2k 的 MTU 一般需要在父交换机上进行配置,部分父交换机支持在 FPC 口下配置 MTU,部分交换机则需要通过 network-qos 配置 MTU。

 

Per-Port Fabric Port Channel (FPC) 配置:

 

interface port-channel136
  switchport mode fex-fabric
  fex associate 136
  vpc 136
  mtu 9216

 

 

通过 network-qos 配置 MTU:

 

policy-map type network-qos jumbo
  class type network-qos class-default
    mtu 9216
system qos
  service-policy type network-qos jumbo

 

 

2、修改 Edge VM 所使用 vSS/vDS 的 MTU

如果环境中使用虚拟机版本的 Edge 节点,那就需要将 Edge 节点 TEP 使用的虚拟交换机 MTU 调大。

 

比如在我的环境中使用 seg-vlan2-edge-vtep 这个 NSX VLAN Segment 作为 Edge VM 的 TEP 网卡。

 

图片

 

而此 Segment 在 vDS-DC2 中,那么修改 vDS-DC2 的 MTU 即可:

 

图片

 

图片

 

如果使用的是标准交换机,参照下图配置 MTU 即可:

 

图片

 

3、(NSX-T 3.0 之后)修改 VDS 的 MTU

在 NSX-T 3.0 之前,所有安装了 NSX 的 ESXi 只能使用 N-VDS(可以简单理解为 NSX 管理的 VDS),而在 3.0+vSphere7.0 之后,ESXi 既可以使用 N-VDS,也可以使用 vCenter VDS:

 

图片


使用 N-VDS 不需要额外的配置,但使用 vCenter VDS 时,需要全局将 VDS MTU 调整为 1600:

 

图片

 

图片

 

4、NSX 上行链路配置文件调整 MTU

在部署 NSX-T 时会用到“上行链路配置文件”,默认 NSX-T 下所有上行链路配置文件的 MTU 均为 1600,不要手动修改这个值,保持默认即可。

 

图片

 

写在最后

一般在实施虚拟化项目时,建议将硬件网络和虚拟网络的 MTU 都调整为最大,比如一般交换机最大支持 9216,虚拟交换机最大支持 9000,vmkernel 最大支持 9000。调大 MTU 可以显著提高 vMotion、vSAN 等网络的性能,原因是传输同等大小的数据,更大的 MTU 会产生更少的 IP 包,TCP/IP 封装/解封装的开销更少,系统处理的中断也会更少。

 

部分很老的交换机更改 MTU 后需要重启设备或者端口才能生效,一般新生产的交换机都支持在线更改 MTU,更改 MTU 不会对网络造成影响。现在国内很多交换机出厂就会开启 Jumbo Frame,这应该也是迎合最终用户的需求做出的优化。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM