使用shell腳本檢測lvs中realserver狀態,並實現自動刪除已掛機主機

#!/bin/sh

# Describe:check the real server status

# History:2015-08-25 22:21:38 

# Author:Tim


PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH


VIP=192.168.1.121

DIP=192.168.1.112

RIP=("192.168.1.122" "192.168.1.123")

VPORT=80

STATUS=(0 0)

TYPE=g

SCHEMA=rr

WEIGHT=(1 3)

let COUNT=0


#初始化realserver狀態

initstats() {

  local I

  for I in `seq 0 1`;do

    if ipvsadm -L -n |grep ${RIP[$I]} &>/dev/null ;then

      STATUS[$I]=1 

    else

      STATUS[$I]=0

    fi

  done

}


#添加realserver

add() {

  ipvsadm -a -t $VIP:$VPORT -r ${RIP[$1]} -$TYPE -w ${WEIGHT[$1]}

  [ $? -eq 0 ] && return 0 || return 1

}


#刪除realserver

del() {

  ipvsadm -d -t $VIP:$VPORT -r ${RIP[$1]}

  [ $? -eq 0 ] && return 0 || return 1

}


#檢測realserver狀態,也可以考慮使用上述initstats方式

check() {

    if curl --connect-timeout 1 http://$1 &>/dev/null;then

      return 0

   else

     return 1

   fi

}


initstats

while :;do

for N in `seq 0 1`;do

  if check ${RIP[$N]} ;then

    if [ ${STATUS[$N]} -eq 0 ] ;then

      add $N &&STATUS[$N]=1 && echo "`date +%F-%T` , ${RIP[$N]} is back">>/var/log/ipvs 

    fi

  else 

    if [ ${STATUS[$N]} -eq 1 ];then

      del $N &&STATUS[$N]=0 &&echo "`date +%F-%T`, ${RIP[$N]} is gone" >>/var/log/ipvs

    fi

  fi

  

done 


if [ ${STATUS[0]} -eq 0 -a ${STATUS[1]} -eq 0 ] ;then

  ipvsadm -a -t $VIP:$VPORT -r $DIP -$TYPE 

else

  ipvsadm -d -t $VIP:$VPORT -r $DIP &>/dev/null

fi

sleep 5

done

注:此腳本是學習馬哥linux視頻教程時編寫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章