實戰案例:交換器之間匯聚為 2Gbps 口,但實際使用中竟達不到 2G 吞吐量且丟包嚴重?

本期分享的案例是有線/無線網路的相關問題。


一、背景介紹
客戶是一家工作室,主要業務是做自媒體,對於網路要求很高,每日都會負載很大的上下行流量。入戶是下行10Gbps的萬兆寬頻,路由和核心交換器也都是萬兆設備,匯聚和接入交換機透過匯聚的方式互聯,設備品牌是某J。

現場簡化拓樸如下:
規劃配置如下:

傻瓜式網絡,網段為:10.0.0.0/16
所有的路由器、交換器全部都是管理型設備
二、問題現象
IT客戶使用的方式主要是終端(PC1....PC6等)跑大流量的下載任務,使用過程中存在問題:匯聚和接入交換機之間的2Gbps匯聚口LAG無法跑滿,並且在跑大流量的時候PC上網會出現卡頓的情況。

三、排查分析
第一步:確認總吞吐量無法跑滿2Gbps問題
首先查看交換器匯聚口兩條連結的吞吐總量,可以看到接取交換器的兩條實體連結上分別為996Mbps+250Mbps,差不多總計1.3Gbps。
從目前的現象來看是因為單條鏈路的流已經打滿了,但是另外一條鏈路遠不到瓶頸,所以總吞吐量沒辦法打滿。而從這個現象來看,如果流量繼續跑9口(打滿流量的那條連結),那麼就可能會產生丟包。

第二步:確認大流量的情況下丟包狀況
跑高吞吐量時PC ping測試外網與內網閘道的結果如下:
從目前的現象來看確實存在丟包了,大機率是該PC的流量打在了那條將近跑滿1Gbps的實體鏈路上。

綜上所述,那麼基於這種情況初步判斷是匯聚分流不均勻導致,由於交換機可看資訊有限,我們就要從原理側進行分析並嘗試解決。

第三步:深度思考匯聚演算法
因為匯聚演算法不是基於IP或基於MAC,所以一條四元組固定的會話流只會走1條固定的實體連結。因此目前的總流量打不起來的問題,基於拓樸:
分析如下:

會話1來自PC5—峰值肯可能是700Mbps,正好hash到了匯聚物理口9
會話2來自PC6—峰值肯可能是300Mbps,正好hash到了匯聚物理口10
會話3來自PC4—峰值肯可能是600Mbps,正好hash到了匯聚物理口9
會話4來自PC5—峰值肯可能是300Mbps,正好hash到了匯聚物理口10
所以總的流量是:

9物理口實際最多只能1Gbps而達不到1.3Gps(600+700)
10實體口實際可達預期600Mbps,因為該口是1bps還不到瓶頸。
基本結論:

交換器匯聚口是不具備頻寬均衡策略的,所以如果有PC又機率性的走到9口那就會導致丟包的情況出現。基於此,符合現場存在“總吞吐量達不到2Gbps和高吞吐量下PC出現通信丟包的問題現象”
四、解決方案
從上述分析出發,這是一個數學的機率性問題,所以可以嘗試增加匯聚口,如下:

會話1—峰值肯可能是700Mbps,正好hash到了匯聚物理口9
會話2—峰值肯可能是300Mbps,正好hash到了匯聚物理口10
會話3—峰值肯可能是600Mbps,正好hash到了匯聚物理口11
即每個口的hash就能大機率的均衡過去了,每個物理口皆維持在1Gbps以下
可以明顯的看到分流更均勻了,每個實體口的流量都未達到1Gbps瓶頸,然後測試下PC ping網關和外網的情況:
基本上沒有再出現丟包的問題,問題解決!