奥尔覅几22 发表于 2018-8-25 08:05:30

负载均衡之LVS--Shell脚本配置LVS

#!/bin/bash  
#
  
#
  
VIP=192.168.19.211
  
CPORT=80
  
FAIL_BACK=127.0.0.1
  
RS=("192.168.19.245" "192.168.19.219") #定义一个数组并赋值
  
declare -a RSSTATUS #定义一个空数组
  
RW=("2" "1")
  
RPORT=80
  
TYPE=g #定义为DR模型
  
CHKLOOP=3
  
LOG=/var/log/ipvsmonitor.log
  

  
#定义一个添加规则的函数
  
addrs() {
  
    if ipvsadm -L -n | grep "$1:$RPORT" &> /dev/null;then
  
      return 0
  
    else
  
      ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
  
      [ $? -eq 0 ] && return 0 || return 1
  
    fi
  
}
  

  
#定义删除规则的函数
  
delrs() {
  
    if ipvsadm -L -n | grep "$1:$RPORT" &> /dev/null;then
  
      ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
  
      [ $? -eq 0 ] && return 0 || return 1
  
    else
  
      return 0
  
    fi
  
}
  

  
#定义是否要添加错误页面的规则的函数
  
ifaddls() {
  
    if [ ${RSSTATUS} -eq 0 ];then
  
      if [ ${RSSTATUS} -eq 0 ];then
  
            if ipvsadm -L -n | grep "127.0.0.1:80" &> /dev/null;then
  
                echo "`date '+%F %T'` All RS is Down and Local web is up" >> $LOG
  
            else
  
                ipvsadm -a -t $VIP:$CPORT -r 127.0.0.1:80 -$TYPE
  
                [ $? -eq 0 ]; echo "`date '+%F %T'` All RS is Down! Local 127.0.0.1:80 is up!!!" >> $LOG
  
            fi
  
      else
  
            if ipvsadm -L -n | grep "127.0.0.1:80" &> /dev/null;then
  
                ipvsadm -d -t $VIP:$CPORT -r 127.0.0.1:80
  
            fi
  
      fi
  
    else
  
      if ipvsadm -L -n | grep "127.0.0.1:80" &> /dev/null;then
  
            ipvsadm -d -t $VIP:$CPORT -r 127.0.0.1:80
  
      fi
  
    fi
  
}
  

  
#定义检测后端服务器服务健康状态的函数
  
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
  
}
  

  
#检测脚本初始化函数
  
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
  
ifaddls
  

  
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 %T'`, $I is back." >> $LOG
  
            fi
  
      else
  
            if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
  
                delrs $I
  
                [ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date '+%F %T'`, $I is gone." >> $LOG
  
            fi
  
      fi
  
      let COUNT++
  
    done
  
    ifaddls
  
    sleep 5 #睡眠5s再循环
  
done


页: [1]
查看完整版本: 负载均衡之LVS--Shell脚本配置LVS