mahonglin123456 发表于 2019-1-5 13:11:50

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" 403182580@qq.com
      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" 403182580@qq.com
      fi
    fi
    let COUNT++
done
sleep 5
done  本脚本检查到realserver未运行时,会自动从ipvsadm配置中踢出该服务器。如果realserver重新启用时会自动添加realserver到ipvsadm配置文件中。同时
  如有疑问可联系QQ:403182580



页: [1]
查看完整版本: lvs健康检测脚本