Closed ranzhendong closed 3 months ago
业务背景 gaea 后端的 mysql 做切主动作(IP 会变),会导致连接 proxy 的业务报错 resource pool timed out,同时 gaea 也会报同样的错误,最后花了一段时间才自己恢复的
怀疑根因 我们经过排查发现,怀疑:老长连接在切主之后依然存在,切主应该是没有优雅退出的,所以在 gaea 来看,就是后端 mysql 突然失联,所以 tcp 连接是没有主动断开的,所以在这种场景下,会导致服务连接 gaea 都会报错,直到 gaea 连接后端 mysql 的老 tcp 连接全部失效,才恢复正常
针对这个场景我们想通过 net.ipv4.tcp_retries2 来控制 tcp 检测是否超时,但是依然是比较被动的 action
想问下,针对这个场景,还有其他解决方案吗,是否有 gaea 配置可以解决这个问题,现在 gaea 针对后端 mysql 的 tcp 连接有主动超时配置或健康检查吗?
如果是通过调整 net.ipv4.tcp_retries2 来控制 TCP 连接尝试的次数,这是一个解决方案,但这更多是网络层面的调整,不足以解决数据库中间件层面的问题。最新版的 Gaea 版本 (预计马上会发最新一版)提供了健康检查机制解决了这个问题,提供了checkInstanceStatus监测后端数据库实例状态,并且能够自动剔除失效的连接,能够检测到无效连接并将其关闭。
业务背景 gaea 后端的 mysql 做切主动作(IP 会变),会导致连接 proxy 的业务报错 resource pool timed out,同时 gaea 也会报同样的错误,最后花了一段时间才自己恢复的
怀疑根因 我们经过排查发现,怀疑:老长连接在切主之后依然存在,切主应该是没有优雅退出的,所以在 gaea 来看,就是后端 mysql 突然失联,所以 tcp 连接是没有主动断开的,所以在这种场景下,会导致服务连接 gaea 都会报错,直到 gaea 连接后端 mysql 的老 tcp 连接全部失效,才恢复正常
针对这个场景我们想通过 net.ipv4.tcp_retries2 来控制 tcp 检测是否超时,但是依然是比较被动的 action
想问下,针对这个场景,还有其他解决方案吗,是否有 gaea 配置可以解决这个问题,现在 gaea 针对后端 mysql 的 tcp 连接有主动超时配置或健康检查吗?