线上事故通报 -『9.24』 Linux内核导致服务不可用
事故说明
事故:Ali Yun ECS Linux 内核导致服务不可用 Owner:滚键盘 业务:All 开始时间:2018-09-24 00:02 结束时间:2018-09-25 14:39 影响:总计 39h,GMV 影响为 400 左右 事故定级:一级事故
事故分析
事故经过
- 2018-09-24 00:02 Ali Yun 上 ECS 跑完最后一次脚本任务,CPU 从打满降落至 11%左右,与平常回落至 0%不一致,且出现 ssh 不能连接的现象
- 2018-09-24 00:13 在尝试解决问题未果的前提下,对实例进行正常重启操作
- 2018-09-24 00:17 ECS 经过 5min 左右停止,重新启动后 CPU 彪至 90%+,进入远程连接之后,显示 Linux 载入 Error
- 2018-09-24 00:21 创建工单求助客服
- 2018-09-24 00:25 反馈 CPU 跑满,建议利用远程连接查看日志
- 2018-09-24 00:40 反馈日志截图
- 2018-09-24 00:43 反馈内核问题,建议先制作快照
- 2018-09-24 01:11 快照制作完毕
- 2018-09-24 01:19 授权 Ali Yun 操作实例
- 2018-09-24 01:41 修复失败建议初始化
- 2018-09-24 11:41 初始化之后 ssh 再次失效
- 2018-09-24 18:01 回滚快照之后,出现 CPU 跑满,Linux 卡在初始化状态
- 2018-09-25 14:39 恢复服务
- 2018-09-26 15:30 恢复数据
事故反思
- 无机器监控配置,实例失常状态不可知;
- 无数据备份机制,重要日志数据极易丢失;
- 无快照备份机制,事故发生之后恢复服务困难;
- 机器配置不可理,T5 突发性能实例 CPU 仅可用 10%,CPU 性能偏弱。
- 暴露了服务流程管理混乱,极易不可用,尤其是目前单实例阶段;
- 实际上事后反思是因为内存打满导致的 CPU 彪高,再因为重启导致的内核崩溃;
- 正确的处理方法应该是远程连接->top->M/P->k kill 杀死彪高进程
- 之后 10.2 晚又出现相同情况,在合理操作下规避了内核崩溃的风险
恢复经验及改进:
- Linux 内核尽量不升级,保持稳定可用性,谨小慎微;
- 监控报警体系需完善,安装类似『Ptrace Agent』的监控组件;
- 理清 T5 突发实例与正常实例的区别与联系,云厂商产品设计思路;
- 理清源码安装过程;
- 重新梳理 Nginx 调优步骤, 目前支持 TLS1.3, h2, HSTS 等;
- 了解 Ali Yun 从数据盘导数据流程;
- 优化 pv 脚本;
- 增加日志备份定时任务;
- shell->hadoop, 利用 MapReduce 减小内存占用,提高效率;
导数据流程
- 制作快照
- 利用快照制作云盘
- 挂载云盘(如果你能挂载上实例,当然是最好的,否则可以按量购买一台高配 ECS 挂载于此)
mount /dev/vdb1 /mnt
挂载数据盘,切记在之前不能对数据盘分区,不能初始化数据盘,否则数据全没了- 利用
fdisk -l
,df -h
查看磁盘及挂载情况 - 若挂载成功,此时
/mnt
就是你之前的/
路径
源码安装
- wget tar.gz 文件
- tar -xzvf 压缩包
- ./configure or ./bootstrap 进行编译,此时带的参数是安装模块,安装路径等
- make 即 build, 可加-j8
- make install
- cmake 的安装是我见过最费内存,时间最长的,可能会提示虚拟内存不够的情况,
dd if=/dev/zero of=/swap bs=32M count=16
命令扩容 - 有些编译可能会报错,可能是有些包未安装导致的
You can use this BibTex to reference this blog if you find it useful and want to quote it.