一、技术原理与选型
服务器状态检测主要基于三种机制:心跳包监测(TCP/UDP端口探测)、进程存活检查和服务响应验证。以Shell脚本实现为例,可通过nc
命令检测端口状态,结合ps
命令验证进程存活,当连续三次检测失败时触发恢复流程。
技术栈选型建议:
- Shell脚本:适用于简单服务检测与基础恢复操作
- Python脚本:支持复杂逻辑和API集成(如云平台联动)
- Systemd服务管理:内置
Restart=on-failure
策略实现进程守护 - Nginx健康检查:适用于负载均衡场景的被动故障切换
二、核心脚本部署步骤
以下展示基于Bash的通用部署流程(以Java微服务为例):
- 环境准备
- 安装
nc
命令:yum install nmap-ncat
- 配置SSH免密登录(集群场景)
- 安装
- 脚本编写
代码1:服务检测逻辑片段 declare -A port_services=( ["8101"]="bridata-user ["8102"]="bridata-auth for port in "${!port_services[@]}"; do if ! nc -z 127.0.0.1 $port; then systemctl restart ${port_services[$port]} fi done
- 测试验证
- 模拟服务崩溃:
kill -9
- 观察
/var/log/recovery.log
日志输出
- 模拟服务崩溃:
三、监控与恢复方案优化
基础方案增强建议:
- 日志轮转机制:通过
logrotate
限制日志文件大小(示例配置MAX_LOG_SIZE=10240
) - 多级恢复策略:首次重启服务→三次失败后切换备用节点→触发VIP漂移
- 监控集成:对接Prometheus实现恢复成功率统计
故障持续时间 | 响应动作 |
---|---|
<5分钟 | 本地服务重启 |
5-15分钟 | 切换备用节点 |
>15分钟 | 触发告警通知 |
四、生产环境最佳实践
关键注意事项:
- 权限最小化原则:恢复脚本以非root用户运行,通过
sudo
授权特定命令 - 模拟演练制度:每季度执行全链路故障恢复测试
- 版本控制:脚本纳入Git仓库管理,禁止直接修改生产环境代码
推荐采用systemd
守护核心脚本,配置示例:
[Service]
Restart=always
ExecStart=/usr/local/bin/service_monitor.sh
通过自动化检测与分级恢复机制,可将MTTR(平均恢复时间)缩短至5分钟以内。建议结合业务场景选择Shell/Python实现基础检测,配合Nginx被动检查或云平台API完成复杂架构的故障转移,同时建立完整的监控告警闭环。