GaussDB(DWS) 集群通信系列二:通信报错定位思路

举报
NicholasD 发表于 2020/11/05 17:38:37 2020/11/05
【摘要】 GaussDB(DWS)

GaussDB(DWS) 集群通信报错主要分为以下三类:

一,pooler建连报错

常见的连接报错例如:

2020-01-09 16:57:17.853 5e16eab1.7933 test_1226 281467863168624 gsql 0 cn_5001 08006 72620544030096250 [BACKEND] ERROR: pooler: failed to create connections in parallel mode for thread 281467863168624, Error Message: pooler: failed to connect to dn_6009_6010:wait 172.31.17.4:45138:dn_6009_6010 timeout expired


从日志中可以得到几个关键信息

  • query_id(72620544030096250):用于查找相关query的日志,query_id全局唯一,用于检索本端和对端日志。

  • 连接的对端信息:包括对端名称(dn_6009_6010),对端IP和端口(172.31.17.4:45138),部分ERROR日志中缺失对端信息的,需通过grep query_id查找CN日志找到对端信息。

    image.png

  • errno信息(timeout expired):用于诊断具体的错误原因


errno信息主要错误原因如下:

  • timeout expired:表明连接已正常建立,但在认证握手时等待超时,一般是对端进程没有响应,需根据对端信息查看报错时间点对端进程状态。

  • Connection timed out:建立连接超时,说明网络不通畅。如果是偶现,则说明网络丢包导致重传超时(可用gsar脚本检查,还需关注/sbin/sysctl -a|grep retries中tcp重传次数是否正确配置)。

  • No route to host:表明IP不可达,使用ping命令检查网络连通性,检查防火墙配置。可以使用telnet/speed_test工具检查目的端口是否可以连通。

  • Connection refused:表明IP是可达的,但监听端口不存在。确认IP/端口信息配置正确,确认对端进程存活,到对端机器通过”netstat -anop|grep 对端进程号|grep LISTEN“检查监听端口正确监听在目的IP上,检查防火墙配置。

  • Operation now in progress:连接未完全建立好,可以参考Connection timed out处理方式。

  • can not accept connection in standby mode:对端是备机不能接受连接,需通过query_id查找CN日志找到连接对应主机的报错进一步分析。

  • Resource temporarily unavailable:如果是对端上报的,则看对端日志。如果是本端通信接口报错,需结合Error Message分析。

  • Connection reset by peer:网断断开,对端有异常关闭连接或网络原因造成网络闪断。

  • Broken pipe:网断断开,对端有异常关闭连接或网络原因造成网络闪断。


二,数据收发报错

数据收发常见报错如下:

2020-03-12 23:03:06.252 5e6a4f2a.1014 postgres 140003346740992 gs_clean 0 cn_5001 08006 72620543991406350 [BACKEND] WARNING: receive unexpected "EOF" (Local:cn_5001 Remote: 6005_6006:26080 Oid:16387)

2020-03-12 23:03:06.252 5e6a4f2a.1014 postgres 140003346740992 gs_clean 0 cn_5001 YY001 72620543991406350 [BACKEND] ERROR: Failed to read response from Datanodes, detail: Connection reset by peer 


2020-02-28 21:42:09.143 5e5918a6.2736 consis 139626057762560 cn_5002 0 cn_5004 08006 74309393851616575 [BACKEND] LOG: could not send data to client [ Remote IP: linux-m63 PORT: 57917]. detail:Broken pipe
2020-02-28 21:42:09.143 5e5918a6.2736 consis 139626057762560 cn_5002 0 cn_5004 08006 74309393851616575 [BACKEND] FATAL: connection to client lost


依然需要从日志中可以得到几个关键信息:

  • query_id

  • 连接的对端信息

  • errno信息

数据收发报错一般errno信息为Connection reset by peer 或Broken pipe,这个信息只能表明连接异常断开,需要根据query_id到对端日志中确认对端情况,常见的场景如:

  • 对端进程异常重启:根据ps命令确认对端进程重启时间是否与报错时间吻合,如果确认重启,则根据core/oom/cm kill三种场景进一步分析。

  • 对端日志也报Connection reset by peer 或Broken pipe,则说明网络环境问题导致连接断开,需用gsar工具查看网络压力和丢包重传情况。


三,监听报错

监听常见报错如下:

2019-03-22 19:58:57.173 CST 5c94cdec.1 [unknown] 140689788374080 [unknown] 0 dn_6001_6002_6003 00000 0 [LIBCOMM] WARNING: (mc tcp listen) Failed to bind host:port[100.185.183.15:33013], errno[98]:Address already in use.Maybe port 33013 is used, run 'netstat -anop|grep 33013' or 'lsof -i:33013'(need root) to see who is using.


2019-03-28 17:54:35.965 5c9c99d4.1 [unknown] 281473754333184 [unknown] 0 cn_5003 42809 0 [BACKEND] LOG: could not bind IPv4 socket at the 7 time: Cannot assign requested address
2019-03-28 17:54:35.965 5c9c99d4.1 [unknown] 281473754333184 [unknown] 0 cn_5003 42809 0 [BACKEND] HINT: Port 25308 is used, run 'netstat -anop|grep 25308' or 'lsof -i:25308'(need root) to see who is using this port.

2019-03-28 17:54:35.965 5c9c99d4.1 [unknown] 281473754333184 [unknown] 0 cn_5003 42809 0 [BACKEND] FATAL:could not create listen socket for 10.185.178.213


监听报错一般errno信息为,一般为以下场景:

  • 监听端口被占用,通过netstat -anop|grep 监听端口号命令查看是否有其他进程占用监听端口号,或者是本进程配置了两个两同的端口,或者是监听端口与随机端口范围冲突(net.ipv4.ip_local_port_range)

  • 监听IP非本地IP,导致监听失败


附录:

gsar脚本路径:$GAUSSHOME/bin/dfx_tool/

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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