lvs健康檢測腳本

本腳本適合單臺lvs服務器時使用,使用keepalived是會自動檢測狀態,所以使用lvs+keepalived是不需要使用腳本檢查realserver狀態。

#!/bin/bash
#
VIP=192.168.3.22
CPORT=80
FAIL_BACK=127.0.0.1
RS=("192.168.3.211" "192.168.3.215")
#聲明數組變量RSSTATUS
declare -a RSSTATUS
RW=("2" "1")
RPORT=80
TYPE=g
CHKLOOP=3
LOG=/var/log/ipvsmonitor.log
#添加realserver函數
addrs() {
  ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
  [ $? -eq 0 ] && return 0 || return 1
}
#刪除realserver函數
delrs() {
  ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT 
  [ $? -eq 0 ] && return 0 || return 1
}
#檢查realserver是否在線
checkrs() {
  local I=1
  while [ $I -le $CHKLOOP ]; do 
    if curl --connect-timeout 1 http://$1 &> /dev/null; then
      return 0
    fi
    let I++
  done
  return 1
}
#檢測ipvsadm配置中是否包含realserver服務器以及端口,如果存在就給數組賦值1  不存在就賦值爲2

initstatus() {
  local I
  local COUNT=0;
  for I in ${RS[*]}; do
    if ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null ; then
      RSSTATUS[$COUNT]=1
    else 
      RSSTATUS[$COUNT]=0
    fi
  let COUNT++
  done
}

initstatus

while :; do
  let COUNT=0
  for I in ${RS[*]}; do
    if checkrs $I; then
      if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then
         addrs $I ${RW[$COUNT]}
         [ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG
         echo "`date +'%F %H:%M:%S'`, $I is back."|sendmail -s "realserver is back" [email protected]
      fi
    else
      if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
         delrs $I
         [ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG
         echo "`date +'%F %H:%M:%S'`, $I is gone."|sendmail -s "realserver is gone" [email protected]
      fi
    fi
    let COUNT++
  done 
  sleep 5
done

本腳本檢查到realserver未運行時,會自動從ipvsadm配置中踢出該服務器。如果realserver重新啓用時會自動添加realserver到ipvsadm配置文件中。同時

如有疑問可聯繫QQ:403182580

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