Nic*_*ick 5 postgresql haproxy go compose-db sqlx
一段时间不活动后,我的 go web 服务在执行第一个 postgres sql 查询时收到一条net.OpError
消息read tcp x.x.x.x:52086->x.x.x.x:24414: read: connection reset by peer
。错误后,后续请求将正常工作。
postgres 数据库由 compose.com 托管,它在 postgres db 前面有 haproxy。我的 go web 应用程序使用标准 sql 和 sqlx。
我试过db.Ping()
每 15 分钟运行一次自动收报机,但这并没有解决问题。
为什么 go 标准sql
库不处理这些连接中断?
因为没有人明确写出这一点。解决这个问题的方法就是设置db.SetConnMaxLifetime(time.Minute)
. 我尝试过并且有效。在返回 TCP RST 后,AWS 上经常会发生连接重置,其中不活动限制设置为 350 秒。