GaussDB网络重传/丢包问题定位总结

举报
Caesar.D 发表于 2021/01/05 16:17:59 2021/01/05
【摘要】 在GaussDB各类问题场景中,网络故障是最难定位及恢复的问题之一,其不仅可能影响着数据库的性能,甚至在一定程度上会阻塞业务的正常运行,造成严重后果。网络问题牵连着应用侧(即GaussDB)、操作系统、交换机以及硬件资源等,本文将介绍几种常用手段,用于梳理其间可能存在的问题,从而快速定位恢复。文中涉及的参数、视图详情可参考产品文档。

1          问题背景

    在GaussDB各类问题场景中,网络故障是最难定位及恢复的问题之一,其不仅可能影响着数据库的性能,甚至在一定程度上会阻塞业务的正常运行,造成严重后果。网络问题牵连着应用侧(即GaussDB)、操作系统、交换机以及硬件资源等,本文将介绍几种常用手段,用于梳理其间可能存在的问题,从而快速定位恢复。文中涉及的参数、视图详情可参考产品文档。

2          问题现象

附件:gsar4.sh

image.png

1. gsar脚本运行结果

    对于性能慢、数据库连接异常等情况,建议使用gsar脚本检查网络状态,若重传率或丢包率超过0.01%,如图1最后一列红色框,则说明网络存在问题,需进一步分析定位。

    gsar.sh脚本后需指定业务名称,可初始化环境变量后,使用命令:ip route | grep `cm_ctl query -Cvi | awk '{print $2,$3}' | grep \`hostname\` | awk '{print $2}' | sort -u` | awk -F ' ' '{print $3}' 查询得到,如图:

3          排查一:TaiShan服务器网卡加固

    对于TaiShan服务器(100/200),均需要使用兼容的网卡及驱动,否则很有可能产生此类网络问题。

附件:GaussDB A加固配置指南04.pdf

    须严格按照加固配置指南进行定位,包括透明大页等均需核查。

4          排查二:MTU一致性

    MTU即最大传输单元,整条数据链路要保证MTU的一致性,否则可能由于数据包大小不匹配导致丢包。使用ifconfig命令即可查看和修改各个网卡的MTU值:

image.png

2. ifconfig修改MTU

    如图2,其缺点是重启后失效,想长久保留还需修改配置文件,不同操作系统修改方法不同,可谷歌查找。

5          排查三:网络重传情况

1.     netstat查看重传次数

    使用gsar脚本观察到明显的重传现象后,可根据netstat命令具体查看重传状态:

image.png

3. netstat查看重传状态

    若重传次数达到12次(图3红色框中,第一列表示距离下一次重传的时间,第二列为已经发生重传的次数,理论上重传达到9分钟,keepalive就会检测到连接异常,将其断开),则说明此时网络不通,可进一步排查对端进程状态以及网络环境(ping)。

2.     netstat查看缓存区状态

    当发送缓存区严重阻塞时,可明显看到重传现象,仍然使用netstat命令查看缓存区情况:

image.png

4. netstat查看发送缓存区状态

    图4红色框为发送端缓存区状态,可以看到阻塞较为严重且接收端均为192.168.2.101,此时可以根据端口号查看对端接收情况:

image.png

5. netstat查看对端接收缓存区状态

    图5红色框为44112端口的接收端缓存区,阻塞现象同样明显。此时,可以根据GaussDB相关视图获取各线程状态,进而分析阻塞原因,以一条阻塞的连接为例:

image.png

6. DN上根据client_port查到query_id

    根据GaussDB节点端口登录数据库,利用对端连接端口号查找到query_id

image.png

7. CN上根据query_id查到各线程状态

    登录GaussDBCN节点,根据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语句找到对应CNDN的状态,找到慢因所在节点及线程id,再打印堆栈信息等进一步分析。

image.png

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

6          排查四:网络丢包情况

1.     内存不足

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

2.     CPU软中断不足

    网卡接收到数据后,数据进入到TCP缓存区的过程需要进行CPU中断处理,若此时相关CPU繁忙、软中断使用较高,CPU处理网卡的数据不及时,造成丢包。

image.png

9. speed_test压测接收端

image.png

10. speed_test压测发送端

image.png

11. speed_test压测时网络状况

image.png

12. speed_test压测时CPU软中断状况

    使用speed_test工具压测观察,两台机器分别作为接收和发送端,如图9~12,此时测试集群无背景压力,可以看到网络流量达到网卡上限,偶发出现丢包现象,查看对应的CPU软中断,一直处在高于70的水平。

附件:get_irq_affinity2.sh、smart_irq_affi.sh

    此外,软中断也与IO相关,可使用iostat命令查看对应时刻的IO状态。对一些场景,网卡与业务分开绑核可以有一定的缓解,使用get_irq_affinity2.sh脚本查看当前网卡绑核情况:

image.png

13. 查看网卡绑核情况

    使用smart_irq_affi.sh对网卡进行绑核:

image.png

14. 对网卡进行绑核

    使用gs_cgroupGaussDB进行绑核:

image.png

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         总结

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。