本脚本适合单台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