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日志找到对端信息。
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/
- 点赞
- 收藏
- 关注作者
评论(0)