Linux自动化运维——Web服务自动检测及恢复
  

justgonnab 2167

{{ttag.title}}
本帖最后由 justgonnab 于 2018-3-8 17:36 编辑

在一个新的B/S系统上线时,往往会遇到很多问题。
这次分享就关于系统大并发访问量做一个小窍门技术分享。

最常见的问题就是:系统上线,用户大量访问,没几分钟网页就挂了,从而影响业务的持续性。而这种问题通常是由于web服务器没有根据实际环境调试优化到最佳状态而导致的。但是,没有负载均衡的网站集群不是真正的集群,所以在负载均衡+Web服务器调优都齐活的情况下还不断的出现状况那就真的没辙了……只能另辟蹊径!

之前应该分享过Nginx做负载均衡的相关文章,而且根据具体的项目,会出现各种各样的状况,比如针对java编写的B/S系统在有session存在时并且前端有代理集中访问的情况,负载均衡服务器就无法很好的驾驭了,因为源地址都是代理服务器的地址,实际用户的地址都被掩盖导致负载均衡服务器无法分辨、无法实现均衡地负载。

首先我们需要分析高并发访问量过后web服务器宕机会出现什么样的结果,通过什么标识来判断?
所以自动化运维的脚本实现的功能要模仿用户无法访问系统时的样子,比如:web服务器宕机后访问网页后HTTP响应状态应该返回的是非“200”,那么这个情况基本上就是用户无法访问网页时的情况了。若是用测试端口或者ping测试都是不准确的。

Linux系统中利用wget命令则可以很简单地实现这样的判断效果:
如:wget -S --spider --tries=3 --timeout=3 http://localhost:8080 2>&1 | grep HTTP/1.1 |awk '{print $2}'
筛选出来的数字就是HTTP状态代码,然后利用判断语句判断是否是“200”就知道web服务器是否正常。

大致的核心思路就是这样:判断web服务器是否正常(以tomcat为例),如果正常则不操作,若无法访问则重启web服务器。
附一段具有启发性的代码吧:

  1. # 获取tomcat进程ID  /usr/local/tomcat_ds_api
  2. TomcatID=$(ps -ef |grep tomcat |grep -v 'grep'|awk '{print $2}')

  3. # tomcat启动程序(这里注意tomcat实际安装的路径)
  4. StartTomcat=/usr/local/tomcat/bin/startup.sh
  5. StopTomcat=/usr/local/tomcat/bin/shutdown.sh

  6. TomcatMonitorLog=/tmp/tomcatmonitor/TomcatMonitor.log
  7. Monitor()
  8. {
  9.   echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
  10.   if [[ $TomcatID ]];then # 这里判断TOMCAT进程是否存在
  11.     echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."
  12.     # 检测是否启动成功(成功的话页面会返回状态"200")
  13.     TomcatServiceCode=$(wget -S --spider --tries=3 --timeout=3 http://localhost:8080 2>&1 | grep HTTP/1.1 |awk '{print $2}')
  14.     if [ "$TomcatServiceCode" = "200" ];then
  15.         echo "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常......"
  16.     else
  17.         echo "[error]tomcat页面出错,请注意......状态码为 $TomcatServiceCode"
  18.         echo "[error]页面访问出错,开始重启tomcat"
  19.         echo "停止tomcat!"
  20.         $StopTomcat
  21.         sleep 6
  22.         echo "启动tomcat!"
  23.         $StartTomcat
  24.     fi
  25.   else
  26.     echo "[error]tomcat进程不存在!tomcat开始自动重启..."
  27.     echo "[info]$StartTomcat,请稍候......"
  28.     $StartTomcat
  29.     echo "启动命令执行完成!"
  30.   fi
  31. }
复制代码

然后写好代码,chmod 755 文件名,sh 文件名 进行测试。

需要定时检测的话可以利用Linux自带的cron工具,这样系统定期检测Web服务器有问题就会自动重启恢复正常,然后配合负载均衡在Web服务器重启期间切换到其它Web服务器继续正常提供Web服务,这样就可以暂时缓解高并发访问所带来的苦恼了。

代码很简单,思路很重要,后面的细节就不用多讲了,希望对大家的Linux Web运维有所帮助!

打赏鼓励作者,期待更多好文!

打赏
1人已打赏

Sangfor_闪电回_朱丽 发表于 2018-3-16 11:41
  
对有运维需求的小伙伴很有帮助哦,感谢分享!
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
技术笔记
干货满满
信服课堂视频
功能体验
GIF动图学习
标准化排查
产品连连看
新版本体验
每周精选
2023技术争霸赛专题
自助服务平台操作指引
秒懂零信任
技术晨报
技术咨询
安装部署配置
答题自测
通用技术
排障笔记本
社区帮助指南
在线直播
网络基础知识
玩转零信任
深信服技术支持平台
畅聊IT
专家问答
技术圆桌
MVP
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人