当前位置:网站首页>keepalived:故障检测自动修复脚本
keepalived:故障检测自动修复脚本
2022-08-10 19:01:00 【focus_lyh】
小提示
下面的内容灵活性极高,可随意扩展:
- 脚本可通过 keepalived.conf 实现检测,也可以通过 crontab 实现;
- 探测 nginx 服务是否异常,除了通过查看进程数量,也可以通过发送 request 请求,看是否能收到相应来判断,而且准确率也更高点;
- 探测到服务异常,可以直接自动修复,也可以发送告警,人工介入处理;
… …
脚本内容可根据实际场景,随意调整。
一、nginx 挂了,keepalived 存活
- 现象:VIP 不会漂移,服务不可用
- 解决方案:
step1 尝试恢复 nginx
step2 如果恢复 nginx 失败,stop keepalived,使得VIP漂移
step3 通过 zabbix 发送告警,人工介入修复 master - 参考范例(作用于 BACKUP 和 MASTER)
vim /server/scripts/check_web.sh
#!/bin/bash
nginxpid=$(ps -C nginx --no-header|wc -l)
#1.判断 Nginx 是否存活,如果不存活则尝试启动 Nginx
if [ $nginxpid -eq 0 ];then
systemctl restart nginx
sleep 3
#2.等待 3 秒后再次获取一次 Nginx 状态
nginxpid=$(ps -C nginx --no-header|wc -l)
#3.再次进行判断, 如 Nginx 还不存活则停止 Keepalived,让地址进行漂移,并退出脚本
if [ $nginxpid -eq 0 ];then
systemctl stop keepalived
fi
fi
global_defs {
router_id lb02
}
# 1. 定义web检测脚本
vrrp_script check_web {
script "/server/scripts/check_web.sh"
interval 5
weight 50
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
vrrp_instance VI_2 {
state MASTER
interface eth1
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress {
172.16.1.4
}
# 2. 调用并运行该web检测脚本
track_script {
check_web
check_brain
}
}
二、nginx 存活,keepalived 挂了
- 现象:VIP 漂移,服务看 BACKUP 是否可用
- 解决方案:restart keepalived
- 参考范例(作用于 MASTER 或 BACKUP):
vim /server/scripts/check_web.sh
#!/bin/bash
keepalivedpid=$(ps -C keepalived --no-header|wc -l)
#1.判断 keepalived 是否存活,如果不存活则尝试启动 keepalived
if [ $keepalivedpid-eq 0 ];then
systemctl restart keepalived
sleep 3
#2.等待 3 秒后再次获取一次 keepalived 状态
keepalivedpid=$(ps -C keepalived--no-header|wc -l)
#3.再次进行判断, 如 Nginx 还不存活则停止 Keepalived,让地址进行漂移,并退出脚本,同时发送告警,人工介入处理
if [ $keepalivedpid-eq 0 ];then
systemctl stop keepalived
fi
fi
三、心跳检测异常,nginx 和 keepalived 存活
- 现象:VIP 不会漂移,可能发生裂脑
- 解决方案:
step1 如果 master 还能 ping 通,并且 backup 有 VIP,就认为是列脑了
step2 kill keepalived 或者 通过 zabbix 发送告警,人工介入 - 参考范例(作用于 BACKUP):
#!/bin/bash
lb01_vip=10.0.0.3
lb01_ip=10.0.0.5
while true;do
ping -c 2 -W 3 ${lb01_ip} &>/dev/null
if [ $? -eq 0 -a `ip add|grep "$lb01_vip"|wc -l` -eq 1 ];then
echo "ha is split brain.warning."
# 此处也可替换为相应的措施,比如 kill BACKUP 的 keepalived 等,稳妥起见,还是告警后人工介入的好。
else
echo "ha is ok"
fi
sleep 5
done
脚本写完,扔到 zabbix 上进行监控即可!
边栏推荐
猜你喜欢
随机推荐
799. 最长连续不重复(双指针)
C#/VB.NET 将PDF转为PDF/X-1a:2001
Major upgrade of MSE Governance Center - Traffic Governance, Database Governance, Same AZ Priority
工业基础类—利用xBIM提取IFC几何数据
API 网关的功能
Solution for thread not gc-safe when Rider debugs ASP.NET Core
人生苦短,开始用go
第四届“传智杯”全国大学生IT技能大赛(初赛A组) 补题
陕西CAS:1244028-50-9_Biotin-PEG3-SCO-PPh3 固体
803. 区间合并(贪心)左端点、右端点排序均可
QoS服务质量七交换机拥塞管理
Redis persistence mechanism
基于 RocksDB 实现高可靠、低时延的 MQTT 数据持久化
FEMRL: A Framework for Large-Scale Privacy-Preserving Linkage of Patients’ Electronic Health Rec Paper Summary
IIC通信协议总结[通俗易懂]
力扣18-四数之和——双指针法
皮质-皮质网络的多尺度交流
[Teach you how to make a small game] Write a function with only a few lines of native JS to play sound effects, play BGM, and switch BGM
从企业的视角来看,数据中台到底意味着什么?
【知识分享】在音视频开发领域中SEI到底是个啥?