数据库服务器宕机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 协议》,转载必须注明作者和本文链接
推荐文章: