-
Notifications
You must be signed in to change notification settings - Fork 2
2017 08 12 所有网站无法访问
lupeng0512 edited this page Aug 28, 2017
·
1 revision
- | - |
---|---|
发现时间 | 2017/08/12 20:21 |
发现人 | 微信群 ^张亚^ |
处理时间 | 2017/08/12 20:45 - 2017/08/12 21:51 |
处理人 | 徐晓诗 卢朋 殷管中 季星宇 刘卓 董利军 |
撰写人 | 董利军 |
所有网站无法打开,有的提示502错误,有的提示数据库无法连接
- [20:21] 微信群里有人反映与非网打不开
- [20:39] 反映与非其他网站也都打不开
- [20:44] 卢朋在返回路上,已经通知晓诗开始处理
- [20:45] 运维在群里通知正在处理故障
- [21:10] 晓诗反馈数据库服务器硬盘满,正在清理部分数据并重启
- 初步判断数据库和日志文件出问题的可能性最大
- 解决思路是优先让网站恢复运行,然后排查具体原因
- [21:23] 除电路城网站,其他都已恢复
- [21:45] 运维反馈其他服务已经恢复,只有cirmall起不来,已经联系管中在处理
- [21:51] 运维通知cirmall网站恢复,至此全部网站恢复运行,进入问题分析排查阶段
- 确认cirmall的问题是由于上线流程不规范,没有走完整的测试发布流程,直接在线修改代码造成的
- 隐含的问题是开发流程不规范,直接在Git仓库主干开发,导致多人协作开发的情况下,部署代码困难
- [22:00] 排查到MySQL的binlog数据突然增多
数据库端口 | binlog大小 |
---|---|
3310 | 303G |
3313 | 201G |
3314 | 120G |
- [22:07] 卢朋报告爱板网导航栏错乱,开始并行处理
- [22:21] 星宇判断爱板导航数据有问题,参与排查
- [22:35] 排查到
3310
的binlog是从9号开始迅速增长,频繁时候几分钟就能生成一个1G容量的日志文件,3313
和3314
的数据增长量平稳- 确定思路放在重点排查
3310
的binlog,找出是哪个或哪些SQL在大量触发
- 确定思路放在重点排查
- [22:40] 星宇反映爱板网导航的url和层次关系都没了,可能的方式是操作后台或者修改数据库
- [22:52] 晓诗反馈
3310
的binlog中有大量疑似读写avatar(用户头像)的数据,这个数据库端口是爱板网在用 - [23:11] 确认binlog格式是
MIXED
,尝试让运维输出可读性更好的binlog日志,用于定位问题SQL - [23:28] 晓诗找出完整的嫌疑SQL
use eeboards; REPLACE INTO bbs_common_syscache SET cname=..., data=...
- [23:33] 思路调整到快速统计这条嫌疑SQL语句在每个binlog文件中出现的数量,以判断是否为问题根源
- [23:46] 星宇反馈一时半会找不出爱板导航问题的原因,建议恢复到当天备份的数据库
- 确定解决思路是恢复备份会丢数据,尽可能找无损的解决方案,实在解决不了,再考虑回档
- 晓诗建议找编辑重新设置导航数据
- 确定爱板导航问题和本次数据库磁盘满问题无关
- [00:08] 为验证猜测,确定先统计单条嫌疑SQL语句的大小,再根据出现数量计算一个binlog文件中占用的大小
- 联想到爱板网最近做过一次修复用户头像同步问题的改动,时间点有契合
- [00:12] 根据嫌疑SQL,定位到爱板论坛代码中调用的部分,初步判断程序逻辑存在问题,导致不合理地把大量数据缓存到数据库中
- 确定快速解决方案,注释掉缓存用户头像url到数据库的操作,先解决binlog持续快速增长的问题
- 并留言刘卓尽快检查这部分代码的逻辑
- [00:28] 晓诗反馈单条嫌疑SQL大小为2M左右
- [00:32] 刘卓加入排查
- [00:38] 刘卓恢复论坛头像部分的更改代码,解决日志增长问题
- 用户头像不同步的bug也会复现,优先级较低,放在事后解决
- [00:59] 刘卓尝试连测试环境,排查爱板导航问题
- 确定测试环境用的上周四更新的数据库,能保证导航数据完整性
- [01:23] 确认恢复爱板论坛代码后,数据库磁盘增常速度恢复正常
- [01:25] 讨论本次事故没有提前收到预警的问题
-
晓诗反映
Nagios
有发磁盘空间满的警报邮件,但是大家都没注意到 - 阿里云监控有发网站无法访问的短信警报,但是大家都没注意手机
- 确定增加董利军到报警联系人列表
- 强调工作方式,从沟通角度讲,遇到类似问题,不管在干什么或者能不能立刻解决,先在群里给其他人一个回复,免得都不知道有没有人在处理
-
晓诗反映
- [02:12] 晓诗配合刘卓重新配置线上爱板网导航栏
- [03:20] 卢朋统计出抽样数据,单个binlog文件包含400~600的问题SQL语句,总容量近1G
- 数据量符合预测,可以作为本次事故原因分析的数据依据,把事故总结在微信群做通报
- 安排卢朋统计本次事故期间产生的全部异常增量数据大小,下周一给出
时间 | 异常log大小 |
---|---|
20170801 | 785M |
20170802 | 707M |
20170804 | 764M |
20170807 | 653M |
20170809 | 35.9G |
20170810 | 102.8G |
20170811 | 96.7G |
20170812 | 68.1G |
20170813 | 1.1G |
- [04:13] 爱板网导航栏修复完毕
- 导航数据错乱原因需另行调查
- 根据网站报错信息,初步判断数据库出问题可能性较大
- 登录数据库服务器,检查各项状态,发现磁盘空间占满
- 清除部分过期或无用数据,腾出安全大小的磁盘空间,并重启数据库服务
- 尝试重启各网站服务,检查是否可以正常通过浏览器访问
- 各网站恢复正常访问,只有cirmall重启失败,最后联系开发协助解决,cirmall恢复
- 根据事故症状,优先检查各数据库文件和日志文件大小是否正常
- 筛选出
3310
,3313
,3314
三个端口的binlog日志占用空间巨大(数百G),其中只有3310
符合近期空间暴涨的特征,对应的网站服务是爱板网 - 重点排查
3310
的日志,用mysqlbinlog
转化近期的binlog日志输出可读性好的日志格式,尝试找出是哪个或者哪些SQL在频繁出现 - 定位到可疑的SQL
use eeboards; REPLACE INTO bbs_common_syscache SET cname=..., data=...
,单条大小2M
左右,充斥日志 - 尝试抽样统计几个近期binlog日志,发现每个日志文件中包含400~600条可疑SQL语句,计算可知接近整个binlog文件大小,由此判断这条SQL就是直接问题根源
- 根据SQL语句特征,尝试搜索爱板论坛代码,定位可能的代码调用点
- 相关代码9日更新上线,用于从主站获取用户头像,并缓存到数据库,由于设计不当,导致大量数据被频繁写入数据库,由此产生的binlog日志逐渐占满了磁盘空间(从9日到12日产生了300G+ 日志数据)
- 注释相关写数据库代码或者回滚论坛代码到修改前版本,暂时解决日志增长问题
- 预警机制不完善
- 磁盘空间不足的预警信息淹没在大量其他警报邮件中,不能引起人的关注,就失去了通知的意义
- 警报通知人太少,巧合情况下会出现大家都没有注意到警告短信
- 开发流程不规范,直接在代码主干开发
- 写代码前的设计工作不足,没有选择有效的实现方案
- 运维方面
- 预警机制
- 优化
Nagios
报警策略,减少不必要的邮件通知,只发送特别严重的预警 - 增加董利军到报警通知联系人列表,以期缩短应急反应的时间
- 优化
- 提升排查、定位问题的能力,在遇到类似突发事故时候,能更快找到解决方案
- 预警机制
- 开发方面
- 规范开发流程,协作开发要自建分支,避免在主干上开发
- 尽可能避免人工修改线上代码的操作方式,线上更新走正规的测试发布流程
- 重视设计,在功能开发或者改进前,选择合理有效的解决方案
- 重构爱板网获取用户头像部分的代码,解决头像不同步问题