實踐案例丨GaussDB網絡重傳/丟包問題定位總結


摘要:本文將介紹幾種常用手段,用於梳理數據庫網絡故障可能存在的問題,從而快速定位恢復。

1 問題背景

在GaussDB各類問題場景中,網絡故障是最難定位及恢復的問題之一,其不僅可能影響着數據庫的性能,甚至在一定程度上會阻塞業務的正常運行,造成嚴重后果。網絡問題牽連着應用側(即GaussDB)、操作系統、交換機以及硬件資源等,本文將介紹幾種常用手段,用於梳理其間可能存在的問題,從而快速定位恢復。文中涉及的參數、視圖詳情可參考產品文檔。

2 問題現象

圖1. gsar腳本運行結果

對於性能慢、數據庫連接異常等情況,建議使用gsar腳本檢查網絡狀態,若重傳率或丟包率超過0.01%,如圖1最后一列紅色框,則說明網絡存在問題,需進一步分析定位。

3 排查一:TaiShan服務器網卡加固

對於TaiShan服務器(100/200),均需要使用兼容的網卡及驅動,否則很有可能產生此類網絡問題。

須嚴格按照加固配置指南進行定位,包括透明大頁等均需核查。

4 排查二:MTU一致性

MTU即最大傳輸單元,整條數據鏈路要保證MTU的一致性,否則可能由於數據包大小不匹配導致丟包。使用ifconfig命令即可查看和修改各個網卡的MTU值:

圖2. ifconfig修改MTU

如圖2,其缺點是重啟后失效,想長久保留還需修改配置文件,不同操作系統修改方法不同,可谷歌查找。

5 排查三:網絡重傳情況

1. netstat查看重傳次數

使用gsar腳本觀察到明顯的重傳現象后,可根據netstat命令具體查看重傳狀態:

圖3. netstat查看重傳狀態

若重傳次數達到12次(圖3紅色框中,第一列表示距離下一次重傳的時間,第二列為已經發生重傳的次數,理論上重傳達到9分鍾,keepalive就會檢測到連接異常,將其斷開),則說明此時網絡不通,可進一步排查對端進程狀態以及網絡環境(ping)。

2. netstat查看緩存區狀態

當發送緩存區嚴重阻塞時,可明顯看到重傳現象,仍然使用netstat命令查看緩存區情況:

圖4. netstat查看發送緩存區狀態

圖4紅色框為發送端緩存區狀態,可以看到阻塞較為嚴重且接收端均為192.168.2.101,此時可以根據端口號查看對端接收情況:

圖5. netstat查看對端接收緩存區狀態

圖5紅色框為44112端口的接收端緩存區,阻塞現象同樣明顯。此時,可以根據GaussDB相關視圖獲取各線程狀態,進而分析阻塞原因,以一條阻塞的連接為例:

圖6. DN上根據client_port查到query_id

根據GaussDB節點端口登錄數據庫,利用對端連接端口號查找到query_id;

圖7. CN上根據query_id查到各線程狀態

登錄GaussDB的CN節點,根據query_id找到CN線程id,此時DN均在向CN傳輸數據,可以使用gstack打印此時CN的堆棧等。

1) 打印線程堆棧:gstack lwtid

2) 監控線程與內核交互:strace -p lwtid -tt -T -o strace.log

3) 查看線程使用的CPU資源:top -p pid -d 0.2

3. 已知語句gather慢

個別語句執行慢,打印執行計划發現主要耗時在gather上,此時可根據要執行的sql語句找到對應CN和DN的狀態,找到慢因所在節點及線程id,再打印堆棧信息等進一步分析。

圖8. 根據sql查到CN線程狀態

6 排查四:網絡丟包情況

1. 內存不足

內存不足是引發丟包的一大原因,但是一般會出現其他的直觀表現,可使用free、top等命令查看內存情況,也可使用pv_total_memory_detail視圖觀察具體的進程狀況。

2. CPU軟中斷不足

網卡接收到數據后,數據進入到TCP緩存區的過程需要進行CPU中斷處理,若此時相關CPU繁忙、軟中斷使用較高,CPU處理網卡的數據不及時,造成丟包。

圖9. speed_test壓測接收端

圖10. speed_test壓測發送端

圖11. speed_test壓測時網絡狀況

圖12. speed_test壓測時CPU軟中斷狀況

使用speed_test工具壓測觀察,兩台機器分別作為接收和發送端,如圖9~12,此時測試集群無背景壓力,可以看到網絡流量達到網卡上限,偶發出現丟包現象,查看對應的CPU軟中斷,一直處在高於70的水平。

此外,軟中斷也與IO相關,可使用iostat命令查看對應時刻的IO狀態。對一些場景,網卡與業務分開綁核可以有一定的緩解,使用get_irq_affinity2.sh腳本查看當前網卡綁核情況:

圖13. 查看網卡綁核情況

使用smart_irq_affi.sh對網卡進行綁核:

圖14. 對網卡進行綁核

使用gs_cgroup對GaussDB進行綁核:

圖15. 對GaussDB進行綁核

7 排查五:交換機

作為整個數據傳輸鏈路的重要一環,針對交換機的拓撲結構、流控、接口帶寬等,需聯系相關專家進行逐一排查。

8 常用命令

1. 網絡壓測工具:speed_test/iperf

    ./speed_test_xxx recv/send ip port
    iperf -s / iperf -c ip -t time -p thread_num

2. 網卡工具:ethtool

    ethtool ethx      // speed
    ethtool -i ethx    // driver
    ethtool -k ethx    // gro gso tso
    ethtool -l ethx    // channel
    ethtool -S ethx    // 統計信息

3. 抓包工具:tcpdump

    tcpdump tcp -i ethx and host ip1 and ip2 and port port1 -w target.pcap

9 總結

由於數據傳輸鏈路的復雜性,重傳丟包問題定位較為困難,但學會掌握一定的手段方法,理清思路,從源頭開始排查,終究會找到根因。

附件下載:

 GaussDB A 加固配置指南 04.pdf 2.11MB 

 腳本工具.rar 3.55KB 

本文分享自華為雲社區《GaussDB網絡重傳/丟包問題定位總結》,原文作者:Caesar.D。

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM