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

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。

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

实践案例丨GaussDB网络重传/丢包问题定位总结的更多相关文章

  1. 实践案例丨基于 Raft 协议的分布式数据库系统应用

    摘要:简单介绍Raft协议的原理.以及存储节点(Pinetree)如何应用 Raft实现复制的一些工程实践经验. 1.引言 在华为分布式数据库的工程实践过程中,我们实现了一个计算存储分离. 底层存储基 ...

  2. 实践案例丨基于ModelArts AI市场算法MobileNet_v2实现花卉分类

    概述 MobileNetsV2是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网,此模型基于 MobileNetV2: Inverted Residuals and Linear ...

  3. 实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值

    摘要:一文带你用小熊派开发板动手做土壤湿度传感器. 一.实验准备 1.实验环境 一块stm32开发板(推荐使用小熊派),以及数据线 已经安装STM32CubeMX 已经安装KeilMDK,并导入stm ...

  4. openStack controller 管理网口TX数据量非常大 网络总是丢包

  5. dropwatch 网络协议栈丢包检查利器 与 火丁笔记

    http://blog.yufeng.info/archives/2497 源码:http://git.fedorahosted.org/cgit/dropwatch.git http://blog. ...

  6. 【原】linux设置网络延迟/丢包操作

    1.tc方式 * 清除设备策略:tc qdisc del root dev eth2 2>/dev/null* 设置设备策略:tc qdisc add dev eth0 root netem l ...

  7. 实践案例丨教你一键构建部署发布前端和Node.js服务

    如何使用华为云服务一键构建部署发布前端和Node.js服务 构建部署,一直是一个很繁琐的过程 作为开发,最害怕遇到版本发布,特别是前.后端一起上线发布,项目又特别多的时候. 例如你有10个项目,前后端 ...

  8. 使用Network Emulator Toolkit工具模拟网络丢包测试(上)

    弱网络测试包括延时和丢包二种场景下应用的功能是否正常: 网络延时测试使用Fiddler工具控制上下行数据传输延时时间来模拟网络延时场景: 网络丢包测试使用Network Emulator Toolki ...

  9. 发生tcp丢包(拥堵、超时)重传

    可以根据wireshark的Seq序列号和Ack序列号来进行详细分析. 可见,网络丢包(可能是网络拥堵.也有可能是骨干网上有"防火墙"故意随机丢包,因为这个服务器的IP放在国外)对 ...

  10. Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

    本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...

随机推荐

  1. 谈谈SSO单点登录的设计实现

    谈谈SSO单点登录的设计实现 本篇将会讲讲单点登录的具体实现. 实现思路 其实单点登录在我们生活中很常见,比如学校的网站,有很多个系统,迎新系统,教务系统,网课系统.我们往往只需要登录一次就能在各个系 ...

  2. WebViewJavascriptBridge.js代码学习

    //notation: js file can only use this kind of comments //since comments will cause error when use in ...

  3. Qt中QTabWidget添加控件(按钮,label等)以及使用方法

    今天遇到了一个问题,已经在QTabWidget每一行添加了一个按钮,我有一个需求就是,点击每一行的按钮都有各自的响应 首先说一下添加控件代码: 添加文字可以用setItem,添加控件就得用setCel ...

  4. 手撕Vuex-安装模块方法

    前言 经过上一篇文章的介绍,我们实现了将模块安装到 store 中,那么本章我们就来介绍一下怎么安装模块当中的方法也就是 actions.mutations.getters. 所以本次文章的目标就是将 ...

  5. 重学Java(二):对象无处不在

    前言 本系列文章内容来自于<Thinking in Java>作者的最新续作<On Java>基础卷,作者根据最新 Java 8.11.17的内容,重讲了Java的编程思想,值 ...

  6. 震惊,微信小程序可以设置网络字体!真香

    准备工作,获取字体链接 还原设计稿的时候需要用到如下特殊字体(google 的 Montserrat): https://fonts.google.com/specimen/Montserrat 选择 ...

  7. MySQL-mysqldump 报错:[ERROR] unknown variable 'local_infile=1'.

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin mysqldump: [ERROR] unknown variable 'local_infile=1'. 解决方法: ...

  8. 用友NCC&WMS&泛微 系统对接案例分享

    用户故事 产品版本:NCC2105 故事是这么开始的,用友全国伙伴社区的社区成员,对我们的多系统集成架构很感兴趣,经常跟我讨论相关系统集成层面的问题:随着企业的发展,由于信息产业的技术含量高,信息系统 ...

  9. 【JSOI2008】火星人 (哈希+Splay)

    题目 这种含有修改操作的就难以用后缀数组实现了,求LCP这种区间相等的类型可以想到用hash判断,同时LCP的答案大小符合二分条件可以二分求出,如果只有修改可以用线段树维护,因为还有有插入操作所以想到 ...

  10. 明解Java第一章练习题答案

    @ 目录 练习1-1 练习1-2 练习1-3 <明解Java>书籍其他章节答案 练习1-1 如果没有表示程序语句末尾的分号,结果会怎么样呢?请编译程序进行确认. 答:编译器报错 练习1-2 ...