暂无图片
因为前后两个链接经过F5负载,无法发到一台MySQL代理,导致SQL没法控制超时。这个问题怎么解决?
我来答
分享
暂无图片 匿名用户
因为前后两个链接经过F5负载,无法发到一台MySQL代理,导致SQL没法控制超时。这个问题怎么解决?

F5对几个MySQL代理负载均衡,当SQL超时的时候,JDBC驱动会创建新链接执行kill query杀死超时SQL。

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
cqiwen

原理:mysql每次建立一个socket连接(connect)时,这个socket都会占用一定内存。即使你关闭(close)连接时,并不是真正的关闭,而是处于睡眠(sleep)状态。当你下次再进行连接时,就可以快速启动当前处于睡眠状态的socket。

但由于使用了负载均衡器,jdbc处理超时,导致重新建立的连接并不一定会继续发往同一个后端mysql服务器。这样就无法自动kill 超时query。

像这种情况,解决方法有两个:一是直接在F5上做设置,当其第一次连接确定后,以后这个IP的连接只转发到第一次连接的后端服务器上(最好的方法,但会影响负载均衡效果);二是在mysql端做处理,比如设置如下参数:

在mysql的配置文件中修改my.cnf

添加如下的设置:

[mysqld]

wait_timeout = 100

interactive_timeout = 100

然后重启mysql服务,更改就会生效。

注:这个参数的含义:

wait_timeout:mysql服务器关闭非交互式连接之前等待活动的秒数

interactive_timeout:mysql服务器关闭交互式连接之前等待活动的秒数


以上参数需要进行实际业务测试,否则可能产生其它新问题。

暂无图片 评论
暂无图片 有用 0
暂无图片
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏