关于SegmentFault:数据库网络故障愁坏了头五种方法带你解难题

47次阅读

共计 2404 个字符,预计需要花费 7 分钟才能阅读完成。

摘要:本文将介绍几种罕用伎俩,用于梳理数据库网络故障可能存在的问题,从而疾速定位复原。

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。

点击关注,第一工夫理解华为云陈腐技术~

正文完
 0