数据库服务器宕机2小时之"找不出原因"

背景:

昨天公司网站19:50分开始出现访问延迟,20:00左右的时候PHP已经开始吐too many conections错误,导致所有网页都是500 Error。

服务器配置:

Web服务器有8台,数据库服务器有3台(1 master, 2 slave),标准的LAMP架构,CentOS6(Apache), PHP5.4, MariaDB

详细情况:

web服务器tcp connection和CPU负载率都很正常,没有超出正常范围,主要是 1号 slave数据库服务器出现了Connection满载,CPU飙升到100%,导致处理速度变慢,从而没有响应的问题,master和2号slave数据库虽然负载升高,但CPU远没有达到100%

尝试了的方法:

  1. 把slave1号下架,发现所有负载集中到了slave2号,直到CPU 100%以后网站挂掉
  2. 把slave1,2号全部下架,发现master一个服务器足以处理所有请求,网站恢复正常
  3. 重新上架slave1,2号,又出现slave1号一个服务器CPU满载的情况,网站挂掉
  4. 最后没有办法,只好让master一个数据库服务器顶着,至少网站可以正常运行

找寻问题:

因为新年第一天网站就挂掉,上边给的压力非常大,务必要在今天内找出问题原因,但是毫无头绪啊。。
主要是因为两点

  1. 为什么只有1号slave服务器升高,2号却没有问题?
  2. 为什么一个master可以正常服务,跟两个slave一起上就出现问题(3个服务器都是24核64G一样的配置)

至今都好好的,也没搞什么特别的活动,为什么突然会挂掉?新年是不是有什么变化?
大家有没有遇到过类似现象呢?多谢了:sob:

后续:

经过一整天的排查和修改(主要修改了慢查询),最终解决了负载问题
但是没能精确定位问题,下次还有可能发生,只能督促所有人写sql的时候注意在线上环境执行(因为很多sql是用query builder连接起来的,不同的情况会出现不同的sql,从而导致不走Index直接查询全表,或者大量的file sort)会不会有问题,多explain优化一下了

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9

如果有读写分离的逻辑的话,猜测应该是代码问题,只用master的话,没有数据不一致的问题,此时代码逻辑运行正常,加上slave之后,由于主从同步,刚写完数据还没有同步,代码里直接查查不到,走了错误逻辑,此时逻辑有问题,导致慢查询或其他什么情况,连接数飙升。

1个月前 评论
ikin 1个月前
songxue77 (楼主) 1个月前
JeffreyBool

连接用完了啊,是不是没有连接池啊。。

1个月前 评论
songxue77 (楼主) 1个月前

试试看下配置的最大连接数和慢查询日志。

1个月前 评论
songxue77 (楼主) 1个月前

是不是有啥队列内存泄漏了,没释放mysql资源

1个月前 评论
songxue77 (楼主) 1个月前

mysql配置都一样吗

1个月前 评论
songxue77 (楼主) 1个月前
yema

新年第一天 会不会和系统或者代码里关于时间的有关系 总之是连接过多,旧链接没释放,或者是死循环

1个月前 评论
songxue77 (楼主) 1个月前

如果有读写分离的逻辑的话,猜测应该是代码问题,只用master的话,没有数据不一致的问题,此时代码逻辑运行正常,加上slave之后,由于主从同步,刚写完数据还没有同步,代码里直接查查不到,走了错误逻辑,此时逻辑有问题,导致慢查询或其他什么情况,连接数飙升。

1个月前 评论
ikin 1个月前
songxue77 (楼主) 1个月前
fatrbaby

有没有考虑不过查看一下tpc backlog和somaxconn

1个月前 评论
songxue77 (楼主) 1个月前

24 核 64G这个服务器配置有点6,应该是哪里代码问题 看看php日志

1个月前 评论
songxue77 (楼主) 1个月前

考虑redis数据缓存??

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!