本腳本適合單臺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