当前位置:网站首页>keepalived:故障检测自动修复脚本

keepalived:故障检测自动修复脚本

2022-08-10 19:01:00 focus_lyh

小提示


下面的内容灵活性极高,可随意扩展:

  1. 脚本可通过 keepalived.conf 实现检测,也可以通过 crontab 实现;
  2. 探测 nginx 服务是否异常,除了通过查看进程数量,也可以通过发送 request 请求,看是否能收到相应来判断,而且准确率也更高点;
  3. 探测到服务异常,可以直接自动修复,也可以发送告警,人工介入处理;
    … …
    脚本内容可根据实际场景,随意调整。

一、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 上进行监控即可!

原网站

版权声明
本文为[focus_lyh]所创,转载请带上原文链接,感谢
https://blog.csdn.net/focus_lyh/article/details/126262886