shell腳本:nginx反向代理節點狀態檢查

lvs能夠使用ipvsam -Ln 查看RS節點的狀況,當RS宕機後剔除,當RS恢復後自動加入,nginx上面沒法查看,須要安裝插件或本身寫腳本實現;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腳本,實現發現宕機剔除,恢復服務自動加入功能;bash

腳本解釋:curl

使用守護進程的方式,每隔5秒執行一次腳本,判斷後端RS服務是不是正常,發現有宕機的RS,則sed修改配置文件#號註釋掉對應的RS,ip地址,並重啓nginx服務;當發現服務恢復的時候,去掉#號,並重啓nginx服務,加入到RS中;ide

[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


腳本執行結果以下圖:url

wKiom1ZX9kezEslWAAAsQwGWDkA131.jpg

相關文章
相關標籤/搜索