在實施 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,這應該也是迎合最終用戶的需求做出的優化。