数据库服务器宕机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%
尝试了的方法:
- 把slave1号下架,发现所有负载集中到了slave2号,直到CPU 100%以后网站挂掉
- 把slave1,2号全部下架,发现master一个服务器足以处理所有请求,网站恢复正常
- 重新上架slave1,2号,又出现slave1号一个服务器CPU满载的情况,网站挂掉
- 最后没有办法,只好让master一个数据库服务器顶着,至少网站可以正常运行
找寻问题:
因为新年第一天网站就挂掉,上边给的压力非常大,务必要在今天内找出问题原因,但是毫无头绪啊。。
主要是因为两点
- 为什么只有1号slave服务器升高,2号却没有问题?
- 为什么一个master可以正常服务,跟两个slave一起上就出现问题(3个服务器都是24核64G一样的配置)
至今都好好的,也没搞什么特别的活动,为什么突然会挂掉?新年是不是有什么变化?
大家有没有遇到过类似现象呢?多谢了
后续:
经过一整天的排查和修改(主要修改了慢查询),最终解决了负载问题
但是没能精确定位问题,下次还有可能发生,只能督促所有人写sql的时候注意在线上环境执行(因为很多sql是用query builder连接起来的,不同的情况会出现不同的sql,从而导致不走Index直接查询全表,或者大量的file sort)会不会有问题,多explain优化一下了
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: