LVS(五)LVS集群RealServer高可用健康监测

RealServer高可用健康监测

 

 1 #!/bin/bash
 2 #
 3 VIP=192.168.43.200
 4 CPORT=80
 5 FAIL_BACK=127.0.0.1
 6 RS=("192.168.43.202" "192.168.43.203")
 7 declare -a RSSTATUS
 8 RW=("2" "1")
 9 RPORT=80
10 TYPE=g
11 CHKLOOP=3
12 LOG=/var/log/ipvsmonitor.log
13 
14 addrs(){
15  ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
16  [ $? -eq 0 ] && return 0 || return 1    
17 }
18 delrs(){
19  ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
20  [ $? -eq 0 ] && return 0 || return 1
21 }
22 checkrs(){
23  local I=1
24  while [ $I -le $CHKLOOP ]; do
25   if curl --connect-timeout 1 http://$1 &> /dev/null; then
26    return 0
27   fi
28   let I++
29  done
30  return 1
31 }
32 initstatus(){
33  local I
34  local COUNT=0;
35  for I in ${RS[*]}; do
36   if checkrs $I; then
37    RSSTATUS[$COUNT]=1
38   else
39    RSSTATUS[$COUNT]=0
40   fi
41  let COUNT++
42  done
43 }
44 initstatus
45 while :; do
46  let COUNT=0
47  for I in ${RS[*]}; do
48   if checkrs $I; then
49    if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then
50     addrs $I ${RW[$COUNT]}
51     [ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo " $I is back." >> $LOG
52    fi
53   else
54    if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
55     delrs $I
56     [ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo " $I is gone." >> $LOG
57    fi
58   fi
59   let COUNT++
60  done
61  sleep 5
62 done

 

posted @ 2018-05-30 18:05  MatrixDemiurge  阅读(301)  评论(0编辑  收藏  举报