数据库服务器宕机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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9

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

3年前 评论
ikin 3年前
songxue77 (楼主) 3年前

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

3年前 评论
ikin 3年前
songxue77 (楼主) 3年前
JeffreyBool

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

3年前 评论
songxue77 (楼主) 3年前

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

3年前 评论
songxue77 (楼主) 3年前

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

3年前 评论
songxue77 (楼主) 3年前

mysql配置都一样吗

3年前 评论
songxue77 (楼主) 3年前
yema

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

3年前 评论
songxue77 (楼主) 3年前
fatrbaby

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

3年前 评论
songxue77 (楼主) 3年前

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

3年前 评论
songxue77 (楼主) 3年前

考虑redis数据缓存??

3年前 评论

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