通过shell脚本优化keepalived+Nginx高可用集群
前面我们测试的情况是 keepalived挂掉的情况,实际情况是keepalived不容易挂掉,容易挂掉的是nginx;
所以这里就有有问题了,nginx挂了,但是keepavlied没挂,这时候 依然可以访问机器,但是访问不到服务;
所以这里需要借助keepalived的vrrp_script配置;来调用自定义shell脚本;
我们给下脚本:
#!/bin/bash
echo 'xxxxxx'
count_nginx=`ps -ef|grep -w nginx|grep -v grep|wc -l`
echo $count_nginx
if [ $count_nginx -eq 0 ];then
systemctl start nginx.service
sleep 2
if [ `ps -ef|grep -w nginx|grep -v grep|wc -l` -eq 0 ];then
systemctl stop keepalived.service
fi
fi
这个shell脚本的意思是 统计nginx进程数,假如是0个 说明Nginx挂掉了,那就启动nginx,等2秒,再统计,假如还是0,说明nginx启动失败,
那我们就把keepalived也啥掉 切换备份机器,假如不是0,说明启动成功,那就继续运行;
把上面shello脚本命名nginx_check.sh文件,存/shell/目录下;
下面是shell脚本测试;
切换shell目录
ps -ef|grep -w nginx|grep -v grep 测试;
我们测试: sh nginx_check.sh
执行没问题,有2条记录,所以不用干啥;
假如我们把 nginx停掉 ; 模拟nginx宕机;systemctl stop nginx.service
我们执行shell脚本 是0 所以自动启动nginx
所以我们下面执行会发现 又有 Nginx了;
脚本没毛病;
我们配置下keepalived.conf;
vrrp_script chk_http_port {
script "/shell/nginx_check.sh" #脚本地址
interval 2 #检测脚本执行的间隔
weight 2 #比重
}
这时候 我们重启keepalived测试,也是没问题;