全省职业考试时服务器突然瘫痪,如何搞定?-阿里云开发者社区

开发者社区> 阿里云支持与服务> 正文

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

简介: 某省政务云反馈:即将进行的全省职业考试的服务器重启后无法访问,导致全省在线考试系统瘫痪,如果不尽快解决,将影响上万个准备了数月的考生,时间紧迫,要求紧急处理。阿里云售后工程师先“曲线救国”优先保证启动系统,又抛除惯性思维,一步步梳理出症结所在。涉及的技术谈不上精深,但案例和总结都鲜活而生动。
+关注继续查看

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10086 0
阿里云IoT Studio服务开发定时关灯功能示例Demo
IoT Studio服务开发是一个物联网业务逻辑的开发工具,通过编排服务节点的方式快速完成简单的物联网业务逻辑的设计。本文主要使用:定时触发、设备和钉钉机器人节点实现对灯泡的定时控制,并将控制后的结果发送给钉钉机器人。
2537 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2962 0
Android官方开发文档Training系列课程中文版:连接无线设备之网络服务搜索功能
原文地址:http://android.xsoftlab.net/training/connect-devices-wirelessly/index.html 引言 Android设备除了可以与服务器建立连接之外,Android无线API还允许处于同一网段下的两台设备建立连接,或者是物理距离相近的两台设备建立连接。
825 0
初始使用ECS服务器心得体会
通过这次的云服务器ECS的使用,我收获颇丰,第一次将项目放到了服务器上进行访问,在过程中,遇到了很多的困难,所有我将这次的服务器部署写成了这篇心得体会。
123 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13891 0
利用python制作在Linux服务器后台定时运行的任务-邮件提醒
1. 自动任务的功能为:   定时扫描数据库中的记录,然后发邮件 代码如下 scheduleMail.py import pymysql import smtplib from email.
2088 0
+关注
阿里云支持与服务
分享阿里云支持与服务团队最佳实践、经典案例与故障排查。
197
文章
4856
问答
来源圈子
更多
作为全球云计算的领先者,阿里云为全球230万企业提供着云计算服务,服务范围覆盖200多个国家和地区。我们致力于为企业、政府等组织机构提供安全可靠的云计算服务,给用户带来极速愉悦的服务体验。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载