shell脚本:nginx反向代理节点状态检查

lvs可以使用ipvsam -Ln 查看RS节点的情况,当RS宕机后剔除,当RS恢复后自动加入,nginx上面无法查看,需要安装插件或自己写脚本实现;


反向代理的配置如下:(server 去掉前面的空格,为了方便后面脚本使用sed做文本替换;)

[root@localhost vhosts]# cat upstream01.conf
upstream backend {
server 192.168.20.10:80 weight=5;
server 192.168.20.11:80 weight=5;
}
server {
    listen 80;
    server_name blog.yong.com;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}


检查nginx后端real server脚本,实现发现宕机剔除,恢复服务自动加入功能;

脚本解释:

使用守护进程的方式,每隔5秒执行一次脚本,判断后端RS服务是否是正常,发现有宕机的RS,则sed修改配置文件#号注释掉对应的RS,ip地址,并重启nginx服务;当发现服务恢复的时候,去掉#号,并重启nginx服务,加入到RS中;

[root@localhost vhosts]# cat check_nginx_RS.sh  
#!/bin/bash
#written by mofansheng@2015-11-26
ip_array=($(grep "192.168.20" upstream01.conf |awk '{print $2}'|awk -F":" '{print $1}'))
while true
do
    for((i=0;i<${#ip_array[*]};i++))
    do
         egrep "^#.*${ip_array[$i]}.*" upstream01.conf &>/dev/null
         [ $? -eq 0 ] && continue
         status=`curl -s -w "%{http_code}" -o /dev/null ${ip_array[$i]}`
         if [ ${status} -ne 200 ]
             then
              sed -i "s/server ${ip_array[$i]}/#server ${ip_array[$i]}/g" upstream01.conf
              /etc/init.d/nginx reload
         fi
    done
sleep 5

for((i=0;i<${#ip_array[*]};i++))
do
 a=`curl -s -w "%{http_code}" -o /dev/null ${ip_array[$i]}`
     if [ ${a} -eq 200 ];then
      egrep "^#.*${ip_array[$i]}.*" upstream01.conf &>/dev/null
      if [ $? -eq 0 ];then
           sed -i -r "s/#(.*${ip_array[$i]}.*)/\1/g" upstream01.conf
           /etc/init.d/nginx reload
      fi
     fi
done
done


脚本执行结果如下图:

wKiom1ZX9kezEslWAAAsQwGWDkA131.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值