lvs健康检查脚本第三版

如下是学习完马哥视频lvs后改写的健康检查脚本第三版。利用工作之余三四个小时时间才把整个逻辑搞清楚,有时候自己都有点蒙圈,尤其是在写到while循环的时候。总的来说非常感谢马哥的慷慨解囊!脚本原稿及思路均来自马哥,自己又折腾几小时终于完成第三版!如有不妥之处,欢迎指出批评。

#!/bin/bash
#

VIP=192.168.28.50
CPORT=80
FAIL_BACK=127.0.0.1
RS=("192.168.28.11" "192.168.28.12")
#RSTATUS=("1" "1")
RW=("2" "1")
RPORT=80
TYPE=g
CHKLOOP=3
LOG=/var/log/ipvschk.log

#添加RS,添加成功返回0,否则返回1
function addrs() {
 ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
 [ $? -eq 0 ] && return 0 || return 1
}
#删除RS,删除成功返回0,否则返回1
function delrs() {
 ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
 [ $? -eq 0 ] && return 0 || return 1
}

#检测RS服务是否在线,注意一下这里面指的RS的服务,如果连续三次都监测不通,则返回1,否则返回0
function 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
}

#初始化RS在线状态,如果在线,设置节点初始化状态为1,否则为0
function initstatus(){
 local I
 local COUNT=0
 for I in ${RS[*]};do
  if checkrs $I ; then
   RSSTATUS[${COUNT}]=1
  else
   RSSTATUS[${COUNT}]=0
  fi
 let COUNT++
 done
}
#ipvs状态检查,如果已添加至ipvs则返回0,否则返回1
function rrstatus(){
 realsta=`ipvsadm -L -n | grep $1 | grep -v grep | wc -l`
 [ $realsta -ne 0 ] && return 0 || return 1
}

 

#进行初始化

initstatus

#判断ipvsadm是否启动,如果没有启动则直接退出,否则继续

if [ ! -e /var/lock/subsys/ipvsadm ]; then
 echo "`date +'%F %H:%M:%S'`, ipvs is stop." >> $LOG
 exit 1
fi

 

#在这里逻辑关系有点复杂,总体思路是:监测rs是否加入到ipvs中。如果未添加并且在线则添加;如果已添加并且不在线,则删除
while :; do
 let COUNT=0
 for I in ${RS[*]} ; do
  rrstatus $I
  [ $? -eq 0 ] &&  RRSTATUS=1 || RRSTATUS=0
  if checkrs $I; then
   if [ $RRSTATUS -eq 0 ]; then
    addrs $I ${RW[$COUNT]}
    if [ $? -eq 0 ] ; then 
     RSSTATUS[$COUNT]=1
     echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG
    else
     echo "`date +'%F %H:%M:%S'`, add $I faild." >> $LOG
    fi
   fi
  else
   if [ $RRSTATUS -eq 1 ] ; then
    delrs $I
    if [ $? -eq 0 ] ; then
     RSSTATUS[$COUNT]=0
     echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG
    else
     echo "`date +'%F %H:%M:%S'`, del $I faild or $I already has gone." >> $LOG
    fi
   fi
  fi
  let COUNT++
 done

#如果服务都不在线,并且备用服务未添加至ipvs,则添加备用服务;一旦有服务在线,则删除已添加的备用节点
 if [ ${RSSTATUS[0]} -eq 0 -a ${RSSTATUS[1]} -eq 0 ];then
  rrstatus $FAIL_BACK
  if [ $? -eq 1 ]; then
   ipvsadm -a -t $VIP:$CPORT -r $FAIL_BACK -w 1
  fi
 else
  rrstatus $FAIL_BACK
  if [ $? -eq 0 ]; then
   ipvsadm -d -t $VIP:$CPORT -r $FAIL_BACK
  fi
 fi

#5s监测一次
 sleep 5
done

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值