惊魂web应用宕机记一次网站的紧急恢复

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:   这次网站的故障出现的比较突然,没有任何防备,有种突如其来的感觉。这是一台阿里云服务器,采用wdcp的nginx+apache+mysql的方式运行。一位同事在对web目录进行压缩后,由于web目录有很多图片,导致压缩包很大。

  这次网站的故障出现的比较突然,没有任何防备,有种突如其来的感觉。这是一台阿里云服务器,采用wdcp的nginx+apache+mysql的方式运行。一位同事在对web目录进行压缩后,由于web目录有很多图片,导致压缩包很大。如果全部压缩的话在4G左右,如果在龟速的网络下,全部压缩下载是个非常痛苦的事情。由于是在wdcp的管理界面中进行的压缩,点击全部压缩后整个web应用都没反应,过了一会干脆直接访问不了。由于web访问页面无法打开,wdcp也访问不了,于是尝试直接用SecureCRT连服务器。可喜的是SecureCRT可以连上服务器。于是有了下面一系列的操作。

  1、查看nginx服务是否启动

ps -ef|grep nginx

  发现nginx服务没有起来,于是启动nginx服务

service ngxind restart

  查看nginx是否启动成功

ps -ef|grep nginx

  此时,nginx已经成功启动

root      1690     1  0 12:01 ?        00:00:00 nginx: master process /www/wdlinux/nginx/sbin/nginx -c /www/wdlinux/nginx/conf/nginx.conf
www       1692  1690  0 12:01 ?        00:00:00 nginx: worker process                                              
www       1693  1690  0 12:01 ?        00:00:00 nginx: worker process                                              
www       1694  1690  0 12:01 ?        00:00:00 nginx: worker process  

  此时刷新网页,仍然无法访问

  2、检查apache是否正常

ps -ef|grep httpd

  发现apache没有起来,于是启动apache

service httpd restart

  查看启动结果

ps -ef|grep httpd
root      1716     1  0 12:01 ?        00:00:00 /www/wdlinux/apache/bin/httpd
www       1721  1716  0 12:01 ?        00:00:09 /www/wdlinux/apache/bin/httpd
www       1722  1716  0 12:01 ?        00:00:11 /www/wdlinux/apache/bin/httpd
www       1723  1716  0 12:01 ?        00:00:10 /www/wdlinux/apache/bin/httpd
www       1724  1716  0 12:01 ?        00:00:09 /www/wdlinux/apache/bin/httpd
www       1725  1716  0 12:01 ?        00:00:11 /www/wdlinux/apache/bin/httpd
root      2216     1  0 12:03 ?        00:00:00 /www/wdlinux/wdapache/bin/httpd
wdcpu     2228  2216  0 12:03 ?        00:00:00 /www/wdlinux/wdapache/bin/httpd
www       2720  1716  0 12:09 ?        00:00:11 /www/wdlinux/apache/bin/httpd
wdcpu     2889  2216  0 13:42 ?        00:00:00 /www/wdlinux/wdapache/bin/httpd

  再次刷新页面,此时报一个莫名其妙的异常,说文件不存在。由于涉及到具体网站和文件,这里就不贴详细异常了。

  于是看看这些文件是否真的少了,然而查找的结果是文件一个都没少。于是发呆了一会,感觉没道理。怎么会报这样的异常呢?郁闷中。。。

  又过了一会,看了异常的一个文件,报错的都是一些数据库变量。想了下,这是一个ecshop的程序,会不会是缓存被破坏了的原因呢?于是到将缓存目录的内容都删掉

rm -rf ./temp/static_caches
rm -rf ./temp/caches

  注意,这里用到了rm -rf,目录开头是“./”而不是“/”,不要自己坑自己了;到时候出问题了呼天喊地,再大声的“我爸是李刚”也没用。

  再次刷新页面,此时出现一个异常是

ECSHOP info: Can't Connect MySQL Server(localhost:XXXX)!

  3、启动mysql

service mysqld restart

  执行了上述命令后,等了很久都没反应,心急如焚

MySQL manager or server PID file could not be found!
Starting MySQL.............................................................................................................................

  于是ctr + c 结束掉;再次运行,仍然如此。于是看看进程在不在

ps -ef|grep mysqld

  发现进程是在的,但就是重启不成功。于是网上查了下,各种说法和原因都有。也有说是mysql目录权限的问题,于是

chown -R root:root /www/wdlinux/mysql-5.1.63

  再次检查,仍旧没有解决。有些说kill掉进程重启就行了,但这并不是我原因做的事情。因为kill掉进程是有风险的。后来又折腾了很久,实在没办法,最后还是选择了将进程kill掉。

  查看进程ID

ps aux |grep mysql*

  将进程kill掉

kill 23238

  再次查看,进程还在。。。。。,没办法,只能使出必杀技了(总是隐约中感觉到有点不太好)。

kill -9 23238

  再次查看,这会好了,消腾了(好戏还在后头)。

service mysqld restart

  期待的是

service mysqld restart
Starting MySQL... SUCCESS! 

  但是现实总是残酷的,

service mysqld restart
 ERROR! MySQL manager or server PID file could not be found!
Starting MySQL. ERROR! Manager of pid-file quit without updating file.

  于是网上找了一下,有说是磁盘空间已满、mysql使用的端口已经被占用、binlog日志文件错误、权限问题等等;还有说要删除日志文件data/mysql-bin.index的,再怎么说不能删日志文件呀,磁盘空间也足够,mysql端口也正常。剩下的就是权限问题了

chown -R root:root /www/wdlinux/mysql-5.1.63

  再次尝试启动mysql,仍然无果。于是查看了下mysql的var目录,有一个XXXXXXXXX.err的文件,打开看一下

tail -100 XXXXXXX.err

  末尾的一段是这样的

150708 12:04:40 mysqld_safe Starting mysqld daemon with databases from /www/wdlinux/mysql-5.1.63/var
/www/wdlinux/mysql-5.1.63/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
150708 12:04:40 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
150708 12:04:40 [ERROR] /www/wdlinux/mysql-5.1.63/libexec/mysqld: Can't create/write to file '/www/wdlinux/mysql-5.1.63/var/XXXXXXXXXXXX.pid' (Errcode: 13)
150708 12:04:40 [ERROR] Can't start server: can't create PID file: Permission denied
150708 12:04:40 mysqld_safe mysqld from pid file /www/wdlinux/mysql-5.1.63/var/XXXXXXXXXXXX.pid ended

  Can't start server: can't create PID file: Permission denied,异常仍然说是权限不足。于是

chown -R mysql:mysql /www/wdlinux/mysql-5.1.63/*

  再次重启

[root@XXXXXXXXXXXXXXXXX mysql-5.1.63]# service mysqld restart
 ERROR! MySQL manager or server PID file could not be found!
Starting MySQL... SUCCESS! 

  我的奥特曼终于出现了,于是刷新下网站页面。一切正常,松了口气。。。

  4、后记

  虽然问题解决了,但是中间还是有很多问题值得思考的。

  a、当碰到这样的问题的时候,其实并没有事先想好一个预案和解决办法,碰到问题马上上来就着手解决。只是脑子里有个大概的思路,问题应该出在哪,然后一步步去解决。这也是解决问题的一种方法,但显然不是最有效和快速的。例如,中间的删除缓存,这一步其实就没什么必要了,因为问题不出在缓存,而处在mysql上。

  b、对于kill -9和rm -rf这种强有力的杀伤性武器,用的时候必须慎重。如果一不小心kill -9导致整个mysql都用不了呢?想想都觉得可怕,还好这次顺利地解决了问题。

  c、wdcp中mysql的var目录需要mysql用户及用户组的权限,也就是说上诉修改mysql目录权限的步骤没有必要。因为这是在没有明确问题所在,又引入了一个新的问题,进而重复解决。说得明白一点就是将简单的问题复杂化了。

  d、对于一些占用资源的操作,建议还是直接用SecureCRT等工具操作较为妥当,避免出现不必要的问题。

  e、上诉的所有操作也许敌不过一条命令,那就是reboot;据说reboot可以解决掉百分之九十的问题。

  f、最后的最后,为什么使用wdcp控制面板压缩会导致这样的问题呢?原因是什么呢?是由于太占用资源导致整个web应用都崩溃掉还是什么原因呢?如果您知道问题所在,请告诉我。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
SQL 缓存 搜索推荐
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,涵盖从基础架构到性能优化的多个方面。通过分析当前主流后端技术的优缺点,并提供一些实用的解决方案和建议,帮助开发者更好地应对日常开发中的挑战。
13 1
|
7天前
|
人工智能 关系型数据库 数据安全/隐私保护
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,通过分析其在数据处理、业务逻辑实现和安全性保障方面的应用,揭示后端技术的核心价值。同时,本文还将讨论当前后端开发面临的主要挑战,如高并发处理、数据安全、微服务架构的复杂性等,并给出相应的解决方案。无论是后端开发者还是对后端技术感兴趣的读者,都可以通过这篇文章获得启发和指导。
|
15天前
|
前端开发 安全 JavaScript
构建高效Web应用:前后端分离架构的实践
【9月更文挑战第4天】在数字时代,Web应用已成为企业与用户互动的主要平台。本文将介绍如何通过前后端分离的架构设计来构建高效的Web应用,探讨该架构的优势,并分享实现过程中的关键步骤和注意事项。文章旨在为开发者提供一种清晰、高效的开发模式,帮助其在快速变化的市场环境中保持竞争力。
|
19天前
|
中间件 编译器 数据处理
在web开发中应用管道过滤器
【9月更文挑战第1天】本文介绍管道-过滤器架构将数据处理流程分解为一系列独立组件,通过管道连接,适用于数据流处理如图像处理、编译器设计等。通过具体实例说明了Gin如何有效支持管道-过滤器风格的设计,构建高性能Web服务。
33 9
|
20天前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
27 1
|
20天前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
29 0
|
20天前
|
开发者 Java 前端开发
Struts 2验证框架:如何让数据校验成为Web开发的隐形守护者?揭秘前后端一致性的秘诀
【8月更文挑战第31天】在现代Web开发中,数据验证对确保应用健壮性和良好用户体验至关重要。随着前后端分离架构的普及,保证数据校验一致性尤为关键。Struts 2 验证框架基于 JavaBean 验证 API(JSR 303/JSR 380),允许开发者通过注解或 XML 配置轻松定义验证规则,确保输入数据在执行业务逻辑前已通过验证。此外,Struts 2 支持与前端 JavaScript 验证相结合,确保前后端数据校验一致,提升用户体验。通过注解、XML 配置和资源文件,开发者可以轻松定义和调整验证规则,实现前后端一致的数据校验,提高应用健壮性。
26 0
|
20天前
|
Java 缓存 数据库连接
揭秘!Struts 2性能翻倍的秘诀:不可思议的优化技巧大公开
【8月更文挑战第31天】《Struts 2性能优化技巧》介绍了提升Struts 2 Web应用响应速度的关键策略,包括减少配置开销、优化Action处理、合理使用拦截器、精简标签库使用、改进数据访问方式、利用缓存机制以及浏览器与网络层面的优化。通过实施这些技巧,如懒加载配置、异步请求处理、高效数据库连接管理和启用GZIP压缩等,可显著提高应用性能,为用户提供更快的体验。性能优化需根据实际场景持续调整。
44 0
|
20天前
|
Java 数据库连接 Spring
Struts 2 插件开发竟如魔法盛宴,为框架注入超能力,开启奇幻编程之旅!
【8月更文挑战第31天】在Web开发中,Struts 2插件开发允许我们在不改动框架核心代码的前提下,通过创建实现特定接口的Java类来扩展框架功能、调整其行为或促进与其他框架(如Spring、Hibernate)的集成,从而更好地满足特定业务需求。遵循良好的设计原则与实践,能够确保插件的高效稳定运行并提升整体项目的可维护性。具体步骤包括创建项目、定义插件类、实现初始化与销毁逻辑,并将插件部署至应用中。
40 0
|
20天前
|
开发者 Java 开发框架
JSF与EJB,打造企业级应用的神器!让你的Web应用更加稳定、高效!
【8月更文挑战第31天】在现代企业级应用开发中,JSF(JavaServer Faces)与EJB(Enterprise JavaBeans)是两大核心技术。JSF作为一款基于Java的Web应用框架,以其丰富的UI组件和表单处理功能著称;EJB则专注于提供分布式事务处理及远程调用等企业级服务。两者的结合为企业应用带来了高效便捷的开发模式。下文将通过一个简单的示例展示如何利用JSF进行用户信息的输入与保存,并借助EJB实现相关业务逻辑。尽管这一组合具有明显优势,但在实际应用中还需考虑其局限性并作出合理选择。
33 0