写点什么

“数据库网络故障”愁坏了头,五种方法带你解难题

发布于: 2021 年 01 月 20 日

摘要:本文将介绍几种常用手段,用于梳理数据库网络故障可能存在的问题,从而快速定位恢复。


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)。


  1. 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

  4. 已知语句 gather 慢


个别语句执行慢,打印执行计划发现主要耗时在 gather 上,此时可根据要执行的 sql 语句找到对应 CN 和 DN 的状态,找到慢因所在节点及线程 id,再打印堆栈信息等进一步分析。



图 8. 根据 sql 查到 CN 线程状态


6 排查四:网络丢包情况


  1. 内存不足


内存不足是引发丢包的一大原因,但是一般会出现其他的直观表现,可使用 free、top 等命令查看内存情况,也可使用 pv_total_memory_detail 视图观察具体的进程状况。


  1. 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


  1. 网卡工具:ethtool


ethtool ethx // speed


ethtool -i ethx // driver


ethtool -k ethx // gro gso tso


ethtool -l ethx // channel


ethtool -S ethx // 统计信息


  1. 抓包工具:tcpdump


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


9 总结


由于数据传输链路的复杂性,重传丢包问题定位较为困难,但学会掌握一定的手段方法,理清思路,从源头开始排查,终究会找到根因。


GaussDB A 加固配置指南 04.pdf 


脚本工具.rar  


本文分享自华为云社区《GaussDB 网络重传/丢包问题定位总结》,原文作者:Caesar.D。


点击关注,第一时间了解华为云新鲜技术~

发布于: 2021 年 01 月 20 日阅读数: 22
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
“数据库网络故障”愁坏了头,五种方法带你解难题