天天看点

关于 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 网络的虚拟机通信异常。

关于 NSX-T 下的 MTU(上)

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

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

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

Underlay 测试方法​

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

关于 NSX-T 下的 MTU(上)

通过 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 的下列位置获得:

关于 NSX-T 下的 MTU(上)
关于 NSX-T 下的 MTU(上)

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

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

关于 NSX-T 下的 MTU(上)

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

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

关于 NSX-T 下的 MTU(上)

Overlay 测试方法

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

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

关于 NSX-T 下的 MTU(上)

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(下图所有红色线对应的接口):

关于 NSX-T 下的 MTU(上)

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

关于 NSX-T 下的 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 网卡。

关于 NSX-T 下的 MTU(上)

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

关于 NSX-T 下的 MTU(上)
关于 NSX-T 下的 MTU(上)

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

关于 NSX-T 下的 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:

关于 NSX-T 下的 MTU(上)

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

关于 NSX-T 下的 MTU(上)
关于 NSX-T 下的 MTU(上)

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

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

关于 NSX-T 下的 MTU(上)

写在最后

继续阅读