当前位置:8090社团 >故障解决 > 查看文章
阿里云优惠码

最近线上又新上了一套系统,还没有正式开跑,没什么访问量,都是内部人员在用,然而近日出了一个比较蛋疼的问题,查看系统的监控,会发现 DB 不定期的会凉。

 

而且只是个别项目会提示 DB 凉了,每次 DB 凉了 20~30 秒后又会回到 up 状态,大概看了一下,提示 DB 凉了的项目大概分布在 8 台业务服务器上,绝大部分都没事,业务服务器大概在 40 台左右,然后连接到出问题的业务服务器,看了一眼那个时间段的项目 log, 重点就是Communications link failure, 然后在 elk 里面检索了一下,显示 DB 凉了的服务器都是抛的这个错。

确认了不是代码问题,然后我这里开排查,谷歌了一下,解决办法绝大都是修改 MySQL 的wait_timeout参数,然后我这头也适当的调大了一些,然后看效果,也是偶发性的,没法手动测,晚上下班之前改的,第二天早晨来发现还有报错,最后把wait_timeout参数调到了最大值,也就是 1 年,但是没什么卵用,还是有抛错,看来是和这个参数没啥太大关系,然后又把该值调回了默认,也就是 8 小时,下面就得排查系统问题了。

系统的话看上去也木有啥子问题,一切运行正常,直到开发的大哥问我你是不是开防火墙了,我说木有撒,都是用安全组去控制的,然后突然想 TCP 存活的问题,也就是 TCP keepalive,涉及到了一个内核参数,net.ipv4.tcp_keepalive_time,我记得在我的环境部署脚本里面有这个参数,但是设置的是多少我也忘了,打开我的脚本,发现设置的是 1200,也就是 20 分钟,为毛这么低,仔细想了一下特么的那个是针对一套高并发 DSP 系统去写的,我是拿过来直接用了,然后用 ansible 批量检索了一下,全部服务器都是 1200,那只好批量改了一下试试咯,改成 2 小时,默认的就好,需要使用 ansible 的lineinfile模块了,直接用 sed 命令也阔以。

[root@ansible ~]# ansible server -m lineinfile -a "dest=/etc/sysctl.conf regexp="net.ipv4.tcp_keepalive_time=1200" line="net.ipv4.tcp_keepalive_time=7200""
[root@ansible ~]# ansible server -m shell -a "cat /etc/sysctl.conf | grep net.ipv4.tcp_keepalive_tim
[root@ansible ~]# ansible server -m shell -a "sysctl -p"

改完以后一切恢复正常。

相关文章
为您推荐
各种观点
暂时还木有人评论,坐等沙发!
发表评论

快捷键:Ctrl+Enter