• lvs健康检查脚本第三版


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

      1 #!/bin/bash
      2 #
      3 
      4 VIP=192.168.28.50
      5 CPORT=80
      6 FAIL_BACK=127.0.0.1
      7 RS=("192.168.28.11" "192.168.28.12")
      8 #RSTATUS=("1" "1")
      9 RW=("2" "1")
     10 RPORT=80
     11 TYPE=g
     12 CHKLOOP=3
     13 LOG=/var/log/ipvschk.log
     14 
     15 #添加RS,添加成功返回0,否则返回1
     16 function addrs() {
     17  ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
     18  [ $? -eq 0 ] && return 0 || return 1
     19 }
     20 #删除RS,删除成功返回0,否则返回1
     21 function delrs() {
     22  ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
     23  [ $? -eq 0 ] && return 0 || return 1
     24 }
     25 
     26 #检测RS服务是否在线,注意一下这里面指的RS的服务,如果连续三次都监测不通,则返回1,否则返回0
     27 function checkrs(){
     28  local I=1
     29  while [ $I -le $CHKLOOP ];do 
     30   if curl --connect-timeout 1 http://$1 &>/dev/null ; then
     31    return 0
     32   fi
     33  let I++ 
     34  done
     35  return 1
     36 }
     37 
     38 #初始化RS在线状态,如果在线,设置节点初始化状态为1,否则为0
     39 function initstatus(){
     40  local I 
     41  local COUNT=0
     42  for I in ${RS[*]};do
     43   if checkrs $I ; then
     44    RSSTATUS[${COUNT}]=1
     45   else
     46    RSSTATUS[${COUNT}]=0
     47   fi
     48  let COUNT++
     49  done
     50 }
    51 #ipvs状态检查,如果已添加至ipvs则返回0,否则返回1 52 function rrstatus(){ 53 realsta=`ipvsadm -L -n | grep $1 | grep -v grep | wc -l` 54 [ $realsta -ne 0 ] && return 0 || return 1 55 } 56 59 #进行初始化 61 initstatus 62 63 #判断ipvsadm是否启动,如果没有启动则直接退出,否则继续 64 65 if [ ! -e /var/lock/subsys/ipvsadm ]; then 66 echo "`date +'%F %H:%M:%S'`, ipvs is stop." >> $LOG 67 exit 1 68 fi 71 72 #在这里逻辑关系有点复杂,总体思路是:监测rs是否加入到ipvs中。如果未添加并且在线则添加;如果已添加并且不在线,则删除 73 while :; do 74 let COUNT=0 75 for I in ${RS[*]} ; do 76 rrstatus $I 77 [ $? -eq 0 ] && RRSTATUS=1 || RRSTATUS=0 78 if checkrs $I; then 79 if [ $RRSTATUS -eq 0 ]; then 80 addrs $I ${RW[$COUNT]} 81 if [ $? -eq 0 ] ; then 82 RSSTATUS[$COUNT]=1 83 echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG 84 else 85 echo "`date +'%F %H:%M:%S'`, add $I faild." >> $LOG 86 fi 87 fi 88 else 89 if [ $RRSTATUS -eq 1 ] ; then 90 delrs $I 91 if [ $? -eq 0 ] ; then 92 RSSTATUS[$COUNT]=0 93 echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG 94 else 95 echo "`date +'%F %H:%M:%S'`, del $I faild or $I already has gone." >> $LOG 96 fi 97 fi 98 fi 99 let COUNT++ 100 done 101 102 #如果服务都不在线,并且备用服务未添加至ipvs,则添加备用服务;一旦有服务在线,则删除已添加的备用节点 103 if [ ${RSSTATUS[0]} -eq 0 -a ${RSSTATUS[1]} -eq 0 ];then 104 rrstatus $FAIL_BACK 105 if [ $? -eq 1 ]; then 106 ipvsadm -a -t $VIP:$CPORT -r $FAIL_BACK -w 1 107 fi 108 else 109 rrstatus $FAIL_BACK 110 if [ $? -eq 0 ]; then 111 ipvsadm -d -t $VIP:$CPORT -r $FAIL_BACK 112 fi 113 fi 114 115 #5s监测一次 116 sleep 5 117 done
  • 相关阅读:
    Delphi的类和对象(九)- 类运算符as、is
    delphi中as,is关键字是如何工作的?
    delphi 中 as 和 is 的使用
    甘超波:NLP发问技巧
    甘超波:NLP如何挖掘信念
    甘超波:NLP自我价值感
    甘超波:NLP次感元
    甘超波:NLP前提假设之每个人都有足够资源,能达成成功的资源
    甘超波:NLP十二条前提假设之重复旧的行为,只会得到旧的结果
    甘超波:NLP十二条前提假设之诺要求知、必须行动
  • 原文地址:https://www.cnblogs.com/guoew/p/10391047.html
Copyright © 2020-2023  润新知