全省职业考试时服务器突然瘫痪,如何搞定?

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 某省政务云反馈:即将进行的全省职业考试的服务器重启后无法访问,导致全省在线考试系统瘫痪,如果不尽快解决,将影响上万个准备了数月的考生,时间紧迫,要求紧急处理。阿里云售后工程师先“曲线救国”优先保证启动系统,又抛除惯性思维,一步步梳理出症结所在。涉及的技术谈不上精深,但案例和总结都鲜活而生动。

369b142e9fdc0e0db4b9e1dc86f0e0031c9451de

本期云享团的分享嘉宾是闻战,擅长系统故障分析排查,热爱技术挑战。聚焦弹性计算方案应用。
对于云计算服务,闻战是这样理解的:“每一次托付,都是使命与责任并行!”

事件概述:

前几天,阿里云突然接到某省政务云反馈:即将进行的全省职业考试的服务器重启后无法访问,导致全省在线考试系统瘫痪,如果不尽快解决,将影响上万个准备了数月的考生,时间紧迫,要求紧急处理。阿里云售后工程师快速排查发现 Redis服务启动异常,导致后续启动条目卡住,随后尝试单用户chkconfig禁用该服务,优先保证启动系统。但是,重启后发现该组件再次启动,chkconfig多次强关无效。检查rc3.d、rc.local、profile、crontab等脚本并未发现针对redis服务的相关调用。

Hot点:

1、Linux启动流程。
2、服务启动顺序分析。
3、问题分析的方法思路。

影响程度:【紧急】

架构梳理:

screenshot.png

情景复现:

1、主机启动后,ping测试,EIP无法ping通。
2、VNC检查ECS服务器状态,停在启动进度条,按ECS键查看启动过程,发现redis服务启动异常。

screenshot.png

至此,小伙伴大多会初步判定redis服务启动异常,可以尝试禁用Redis服务后,优先保障系统正常启动,按提示写入相关语句到rc.local,进行后续排查,一个并不算太复杂的故障。

But,处理过程没有想象的这么顺利……

无法禁用的小强

1、重启服务器可以正常进入单用户模式,执行chkconfig命令禁用redis服务。

[root@iZ****<strong> ~]# chkconfig --list|grep redis-server
redis-server     0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@iZ</strong>**<strong> ~]# chkconfig redis-server --level 2345 off
[root@iZ</strong>**<strong> ~]# chkconfig --list|grep redis-server
redis-server     0:off   1:off   2:off    3:off    4:off    5:off    6:off
[root@iZ</strong>**** ~]# reboot

重启服务器后,神奇的一幕出现了,服务器再次停留在redis 启动界面。

screenshot.png

2、此刻我是怀疑人生的,难道redis服务没有禁用成功。

为排除原系统干扰,选择通过LiveCD方式切换chroot检查原系统配置。发现redis服务确实已关闭。

[@bash]$     sudo su
[root@bash]# mount /dev/xvda1 /mnt
[root@bash]# chroot /mnt
[root@bash]# chkconfig --list|grep redis-server
redis-server     0:off   1:off   2:off    3:off    4:off    5:off    6:off
[root@bash]# cat /etc/rc.local
#!/bin/sh
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
touch /var/lock/subsys/local

3、按照redis启动时的报错,在rc.local添加对应语句,检查rc.local 已经777有执行权限。保存重启后,还是卡在redis启动界面。

[root@bash]# echo “echo never > /sys/kernel/mm/transparent_hugepage/enabled”>>/etc/rc.local
[root@bash]# ls -al /etc/rc.local
lrwxrwxrwx. 1 root root 13 Aug 14  2014 /etc/rc.local -> rc.d/rc.local
[root@bash]# reboot

曲线救国

由于时间比较紧迫,为保障优先恢复用户业务(全省职业考试),想了一个不是办法的办法:

    在单用户下:先mv /usr/local/redis/bin/redis-server 进行重命名,由于开机找不到这个文件,系统会跳过加载。然后系统正常启动后,再mv把名称改回恢复业务。

但这始终不是一个长久的解决办法,问题的根源还是没有找到。

重整思路

哪里有些不对,忽略了什么细节呢?排查至此,有必要对之前的思路进行一次梳理重整。

1、单用户下能正常启动,把redis-server重命名也能正常启动,证明系统底层和内核是好的。

2、单用户和liveCD chkconfig验证,redis服务自启动是已经关闭的。

3、打点测试 rc.local和profile没有输出对应的log文件,说明系统还没有走到这一步就卡住了。也就是出现问题的环节,在加载rc.local之前。

[root@bash]# echo touch /root/rc_test.log  >>/etc/rc.local
[root@bash]# echo touch /root/pro_test.log >>/etc/profile
[root@bash]# reboot    //重启服务器进入liveCD模式
[@bash]$     sudo su 
[root@bash]# mount /dev/xvda1 /mnt
[root@bash]# cd /mnt/root
[root@bash]# ls -al |grep log|wc -l
0

但是,这个服务到底是怎么起来的呢?

破云见日

1、Linux启动流程

在【加电】→【启动内核】后,Linux进入【init】阶段,示意图如下。

screenshot.png

2、分析推论

对比启动流程逐步检查,分析/etc/inittab文件,发现启动级别为5。默认该启动级别应该为3(这也是刚开始检查rc3.d目录没发现异常的原因之一)。

screenshot.png

3、初见端倪

那么Linux启动时,会去加载/etc/rc5.d/目录中的服务配置,逐个检查该目录下的配置文件终于发现了端倪: S-1redis-server 这个文件,而我们明明在单用户和LiveCD中已经关闭redis服务,怎么还会出现这个服务的启动脚本呢。

随后通过chkconfig启用redis-server服务,对比rc3.d目录,确定了问题所在。

screenshot.png

4、原来如此

正常情况下,我们启用一个服务后,会在对应的rc*.d启动目录下,生成一个该服务的启动配置文件。而rc5.d启动级别,redis-server却有两个启动脚本,其中一个还是负数?!

测试通过chkconfig 关闭redis-server服务时,S-1redis-server不受管控。也就是系统t启动的时候,还是会加载这个服务,而且是插队加载。

Linux读取rc*.d目录加载启动服务时,会顺序读取S开头的配置脚本,辣么……编号为负数的启动条目会跑在所有启动项之前,导致系统卡住,并且不受 chkconfig 管束!!!

各位官人、剩下您知道怎么解了吧?

经验和总结

1、用户现场业务受影响时,应本着业务保障的第一原则,如果快速排查不能定位问题,要考虑是否有途径先恢复业务。可以让用户创建一个镜像进行排查。

2、经验能提高我们快速排障的效率,但有时候也是这些经验,会形成排查时的惯性思维,导致对细节的忽略。

不足之处,请大家随时拍砖。感谢。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
14天前
|
安全 测试技术 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C安全事件响应/网络安全数据取证/应用安全
B模块涵盖安全事件响应和应用安全,包括Windows渗透测试、页面信息发现、Linux系统提权及网络安全应急响应。在Windows渗透测试中,涉及系统服务扫描、DNS信息提取、管理员密码、.docx文件名及内容、图片中单词等Flag值。页面信息发现任务包括服务器端口、主页Flag、脚本信息、登录成功信息等。Linux系统渗透需收集SSH端口号、主机名、内核版本,并实现提权获取root目录内容和密码。网络安全应急响应涉及删除后门用户、找出ssh后门时间、恢复环境变量文件、识别修改的bin文件格式及定位挖矿病毒钱包地址。
17 0
|
14天前
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A-CTF攻击与防御
模块C和D是CTF夺旗比赛,分别聚焦攻击和防御。攻击者需利用各种漏洞(如命令注入、文件上传、远程代码执行等)攻陷靶机,获取权限,但禁止攻击裁判服务器。防御者则需检测并加固堡垒服务器,确保服务可用性,发现并修补同样类型的漏洞。比赛分数依据靶机的flag值和加固报告,强调不提供补时。操作环境涉及Windows和Linux,选手需使用谷歌浏览器登录。注意提交清晰的截图和PDF报告至U盘。
14 0
|
14天前
|
安全 JavaScript 前端开发
第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题—B模块安全事件响应/网络安全数据取证/应用安全
该内容描述了一次网络安全演练,包括七个部分:Linux渗透提权、内存取证、页面信息发现、数字取证调查、网络安全应急响应、Python代码分析和逆向分析。参与者需在模拟环境中收集Flag值,涉及任务如获取服务器信息、提权、解析内存片段、分析网络数据包、处理代码漏洞、解码逆向操作等。每个部分都列出了若干具体任务,要求提取或生成特定信息作为Flag提交。
30 0
|
14天前
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A基础设施设置/安全加固
网络安全工程师需加固A模块的Windows和Linux服务器,措施包括:设置强密码策略,限制用户权限,隐藏登录信息,优化Nginx安全配置如禁止目录浏览,限制HTTP请求,调整超时时间并降权运行。实施日志监控,设置不同日志的最大大小和处理方式。加固SSHD、VSFTPD、IIS服务,修改端口,限制root登录,配置计划任务,限制VSFTPD和IIS的访问权限。加强本地安全策略,阻止匿名枚举,禁止未登录关机,禁用某些权限,超时强制注销。最后,配置Linux防火墙规则,限制SSH连接源,防御DoS攻击,并控制DNS解析请求。操作需截图并以Word转PDF形式保存,命名后提交至U盘。
15 0
|
14天前
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C基础设施设置/安全加固
网络安全工程师需对AServer08(Win)和AServer09(Linux)进行安全加固,包括密码策略(复杂性、长度),Windows用户管理(所有权、命令提示符、用户名显示),Nginx安全配置(禁止目录浏览、限制HTTP请求、超时设置、降权运行)。日志监控涉及安全、应用和系统日志的最大大小及覆盖策略。中间件服务加固涉及SSH(端口、root登录、计划任务、PID路径),VSFTPD(非特权用户、连接端口、本地用户限制),IIS(日志审计、关闭WebDAV)。本地安全策略涵盖匿名枚举、无登录关闭、凭证存储、权限应用和登录超时
20 0
|
14天前
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B-CTF夺旗与攻击
模块C和D是CTF夺旗比赛,分别侧重攻击和防御。作为渗透测试工程师,你需要在靶机(Linux/Windows)上找寻多种漏洞,如命令注入、文件上传、文件包含、远程代码执行和缓冲区溢出,以获取权限。同时,注意不能攻击裁判服务器,违者将被罚离场。提交靶机的唯一标识flag值并按规则加分。模块D中,你需要在堡垒服务器上发现并修复同样类型的漏洞,保证服务可用性,制作系统防御报告,所有截图需清晰,文件以PDF格式保存提交。
16 0
|
14天前
|
安全 测试技术 Linux
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A模块安全事件响应/网络安全数据取证/应用安全
该内容描述了一个网络安全挑战,涉及Windows和Linux系统的渗透测试以及隐藏信息探索和内存取证。挑战包括使用Kali Linux对Windows Server进行服务扫描、DNS信息提取、密码获取、文件名和内容查找等。对于Linux系统,任务包括收集服务器信息、提权并查找特定文件内容和密码。此外,还有对Server2007网站的多步骤渗透,寻找登录界面和页面中的隐藏FLAG。最后,需要通过FTP获取win20230306服务器的内存片段,从中提取密码、地址、主机名、挖矿程序信息和浏览器搜索关键词。
17 0
|
5月前
|
安全 网络安全 PHP
2021年中职“网络安全“江西省赛题—B-5:应急响应
2021年中职“网络安全“江西省赛题—B-5:应急响应
66 0
|
14天前
|
算法 定位技术 数据中心
中国工商银行数据中心科技菁英校园招聘面试经历与体检情况
中国工商银行数据中心科技菁英校园招聘面试经历与体检情况
|
安全 网络协议 关系型数据库
2021年“网络安全”赛项郑州市选拔赛 任务书
2021年“网络安全”赛项郑州市选拔赛 任务书
294 0
2021年“网络安全”赛项郑州市选拔赛 任务书