【业务连接】An I/O error occurred while sending to the backend

1 集群版本

GaussDB A 8.0及6.5.1版本

2 问题描述

客户端使用与数据库建好的连接报错:An I/O error occurred while sending to the backend.

3 原理分析

正如2.3.2中所说,当数据库侧由于某种原因将连接断开,应用侧再次使用此连接就会产生这个报错。而数据库侧连接异常断开主要有四种原因:1. CN进程异常重启;2. session超时;3. 人为kill session;4. LVS中virtual router id冲突。

4 定位方法

  1. 查看CN进程是否异常重启
  2. ps -eo pid,lstart,etime,cmd | grep coo

如果连接在CN进程启动之前就存在,那么CN进程重启之后,连接就会断开,业务侧继续使用则会报错。

  1. 未达到session_timeout时间就报错

  如果不存在CN重启,且时间未到设置的session_timeout,或者业务正在运行中就产生此报错,可排查LVS中的virtual router id是否冲突。

   查看OS日志,搜索Keepalive字段,若存在如下图字样,即为冲突,可修改主备LVS配置文件后,重启LVS即可:.

   /etc/keepalived/keepalived.conf:文件中virtual_router_id字段,同一子网下不可冲突

   /etc/init.d/gs_keepalived restart:重启LVS

  1.   排查CN日志是否含有due to

非常清晰的两种情况,根据日志中相应时间分析;

调用select pg_terminate_backend(pid); 终止了会话,多数是用户操作产生,个别情况是由于cm_agent在检测磁盘超过阈值(默认90%)场景下,会调用此方法终止当前CN上所有非omm用户的SQL,同时会打印调用日志“cancel session ok”,可排查cm_agent日志。

会话设置了session_timeout时间,当超过此时间,数据库会自动清理连接。对于需要保持长连接的场景。可通过客户端对此session设置session_timeout为0或预期时长。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/316472.html

(0)
上一篇 2025年10月29日 22:28
下一篇 2025年10月29日 22:33

相关推荐

发表回复

登录后才能评论