惊魂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/*

  再次重启

[[email protected] 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应用都崩溃掉还是什么原因呢?如果您知道问题所在,请告诉我。

时间: 2024-11-09 06:23:22

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

Web服务器宕机诊断方法

如果你正面临Web服务器宕机的问题,下面几招可以帮你解决燃眉之急并避免再次出现此类事故. 过去20年里,网络已成为文明的重要部分.从社会需求层次看,网络需求排名仅低于饮用水与可靠电力供应,网络为人类社会提供了更多的生产力,个人娱乐以及整体生活质量改善在过去半个世纪的发展,是以往任何时期都无法比拟的. 通过访问网站满足需求已经被许多现代用户接受:可以通过Web进行学术研究.个人致富和订披萨,用户可以在舒适的家里完成这一切操作.为了竞争,最有信誉的企业也投身到世界级网站建设中,一般说来,就是深入We

几台WEB经常宕机,求分析原因

几台WEB服务器经常宕机,平时运行得好好的,负载也都在2以下,偶尔会突然负高上去就宕机,init 6也无法重启成功 只能echo 'b'>/proc/sysrq-trigger 硬重启才行,dmesg 没发现硬件方面有问题. 从top相关信息来看,每次宕机现象都是系统内核态占用非常高,相关nginx,php-cgi进程虽然不僵死但无法kill 每次宕机都会有kswaped0进程出现,但是从free上来看,内存还是有空闲,swap用得也并不多 top - 22:26:02 up 3 days,  

记一次dell R720服务器ESXI5.5系统宕机的奇葩经历

?记一次dell R720服务器ESXI5.5系统宕机的奇葩经历? 总结点: 1,  没看宕机的原因. 2,  无故重置bois. 3,  不看日志. 4,  Dell r720服务器 内存需要按照顺序插入,如:A1,A2,A3,A4. 5,  使用idrac远程管理页面. 6,  要有自己的判断问题思路,不要什么都依着400. 7,  对问题不重视,要不然就不会直接重启设备了. 失误点一:没看宕机的原因 17号下午5点多的时候,正用着服务器上的虚拟机工作时,mstsc窗口突然断开了.Ping也

记一次服务器宕机处理过程

今天整理之前的运维资料,发现了自己整理的一次刀片服务器(运行的vmware虚拟化)事故处理流程,所有记录下,备忘. 一.事件处理过程 14:10 接到机房运维工程师通知,Opmanager监控系统上出现了多台服务器宕机现象,并且均为虚拟机. 14:12 通知机房运维工程师检查HP刀片服务器是否有告警,远程登录vcenter进行检查.远程查看发现ESX04(10.203.11.64)出现告警,告警信息如下图所示:  14:15 通知工程师ESX04出现告警,然后确认该刀片服务器是否存活,并进入机房

Windows RabbitMQ 镜像队列 (高可用性、一台宕机自动切换另一台) 使用 RabbitMQ 自带的Web 管理工具

镜像队列是基于普通的集群模式的,所以得先配置普通集群(参照前一篇Windows RabbitMQ 集群搭建),然后才能设置镜像队列. 在集群服务器上新建一个 队列 : 镜像队列是通过RabbitMQ 的配置策略(policy)来实现的: 镜像队列提供了三种模式: ?  all:全部的节点队列都做镜像: ?  exactly:指定镜像队列的节点最高镜像数量: ?  nodes:只为指定具体节点配置镜像队列: 创建镜像队列如下图: 点击 "Add policy " 即  完成 创建 . h

屌炸天实战 MySQL 系列教程(四)【秒杀七年经验 LowB工程师】 主从复制、读写分离、模拟宕机、备份恢复方案生产环境实战

第一篇:屌炸天实战 MySQL 系列教程(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:屌炸天实战 MySQL 系列教程(二) 史上最屌.你不知道的数据库操作 第三篇:屌炸天实战 MySQL 系列教程(三)你不知道的 视图.触发器.存储过程.函数.事物.索引.语句 第四篇:屌炸天实战 MySQL 系列教程(四) 主从复制.读写分离.模拟宕机.备份恢复方案生产环境实战 去年公司有一个七年PHP开发经验的工程师,想要跳槽. 去国内某知名互联网公司面试后,被虐惨了,非要我给他讲讲什么是主从

625某电商网站数据库宕机故障解决实录(上)

博客编辑器越来越用不好了,伙伴们将就看,需要排版更好的文档请加Q群246054962. 625某电商网站数据库特大故障解决实录(上) 这是一次,惊心动魄的企业级电商网站数据库在线故障解决实录,故障解决的过程遇到了很多问题,思想的碰撞,解决方案的决策,及实际操作的问题困扰,老男孩尽量原汁原味的描述恢复的全部过程及思想思维过程!老男孩教育版权所有,本内容禁止商业用途. 目录: 625某电商网站数据库特大故障解决实录... 1 1接到电商客户报警... 1 1.1与客户初步沟通... 1 1.2深入沟

625某电商网站数据库宕机故障解决实录(下)

1.4开始进行故障恢复***** 1.重新初始化建库 [[email protected] data]# mkdir mysql [[email protected] data]# chown -R mysql.mysql mysql [[email protected] data]# /install/mysql/scripts/mysql_install_db--basedir=/install/mysql/ --datadir=/data/mysql/ --user=mysql Insta

日活上百万时,腾讯产品如何提前规避服务器宕机风险?

众所周知,优异的应用性能是良好用户体验的坚实基础,而服务器响应缓慢.卡顿.崩溃的产品,即便设计再精美也无法留住用户的心. 2017年2月28日,百度就和用户们开了一个不大不小的玩笑,从当天的20点54分到21点24分左右,百度搜索整整宕机了30分钟,众多网友戏言那30分钟成为了百度最有存在感的30分钟,但是从后来百度的公关文章中,可以看到其提到了"错过了大家上亿次的搜索请求",从这个体量来看,这无论如何都是一次很大的影响了. 无独有偶,今日头条也在今年的1月出现了宕机现象,系统超过30