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