關於 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