天天看点

shell脚本

自用shell脚本

#!/bin/bash

#2011-09-07 zhaoyun write

while [ 1 ] 

do

NULL=/dev/null

status=`cat /etc/keepalived/keepalived.conf |grep state |awk '{print $2}'`

echo $status > .status

VIP=`cat /etc/keepalived/keepalived.conf |sed -n '15p' | awk -F/.* '{print $1}'`

INTERFACE=`cat /etc/keepalived/keepalived.conf |grep interface |awk '{print $2}'`

RUNTIME=3

TRUSTRUN=`nc -vv -z localhost 6443 2>$NULL ; echo $?`

LOADFILE=/ssl/bin/LoadBalance.config

FPAT=/ssl/bin/LoadBalance.config.bak

LOADFILEOK=`cat /etc/rc.local |grep /ssl/bin/LoadBalance.config >$NULL ; echo $?`

 if [ $LOADFILEOK -eq 1 ] ; then

sed -i '/touch/a\cp -rf /ssl/bin/LoadBalance.config.bak /ssl/bin/LoadBalance.config' /etc/rc.local 

 fi 

  if [ $TRUSTRUN -eq 0 ] ; then

              if [ -e $LOADFILE ] ; then

mv  $LOADFILE $FPAT

ipvsadm -C

              fi

time=`date +"%Y-%m-%d %H:%M:%S"`

LOG=/var/log/keepalived.log

BACKUP=`cat /ssl/bin/Vrrpd.config |grep PeerHost |awk -F'<PeerHost>' '{print $2}' |awk -F'</PeerHost>' '{print $1}'`

MASTER=`cat /ssl/bin/Vrrpd.config |grep PeerHost |awk -F'<PeerHost>' '{print $2}' |awk -F'</PeerHost>' '{print $1}'`

STATA=`grep MASTER .status > $NULL ; echo $?`

STATB=`grep BACKUP .status > $NULL ; echo $?`

PID=`ps aux |grep "keepalived -D" | grep -v grep > $NULL ; echo $?`

touch .STA

A=`cat .STA`

PING="ping -c 3 -i 0.00000001 -w 1"

NC="nc -n -vv -z -w 1"

            if [ $PID -eq 0 ] ; then

              echo \ ; echo \ >>$LOG  

             echo $time keepalived - - - is - - - running @*****@>>$LOG 

if [ $STATA -eq 0 ] ; then

IP=`ip add list |grep $VIP >$NULL ; echo $?`

SPORT=`nc -vv -z -w 1 localhost 443 2>$NULL ; echo $?`

       if [ $IP -eq 0 ] && [ $SPORT -eq 0 ]; then

           echo $time   vip - - - is  - - -  OK !@!@!@!  >> $LOG

           echo $time status - - -  is - - - MASTER >> $LOG

        else 

           echo $INTERFACE |xargs ip addr add $VIP  dev 

           echo $time add $VIP for $INTERFACE to master ok ! >>$LOG

service keepalived restart 

echo $time  Sending gratuitous ARPs on $INTERFACE for $VIP >>$LOG

sleep 3

date +%s >.timea

       fi

STA=`$PING $BACKUP >$NULL  ; echo $? `

           echo $STA > .STA

         if [ $STA -eq 0 ] ; then

           echo $time BACKUP - - -  is - - -  alive >> $LOG

                if [ $SPORT -eq 1 ] ; then

                    echo $INTERFACE |xargs ip addr del $VIP  dev

                    echo $time remove $VIP for $INTERFACE in master ok ! >>$LOG

                    echo $time  ssl_port --- is --- closed >> $LOG

                fi

         fi

      if [ $A -gt 0 ] ; then

         service keepalived restart >$NULL

echo $time Sending gratuitous ARPs on $INTERFACE for $VIP >>$LOG

date +%s >.timea       

      fi

OLDTIME=`cat .timea`

NOWTIME=`date +%s`

RTIME=`echo "$NOWTIME-$OLDTIME" | bc`

RETIME=115

          if [ $RTIME -gt $RETIME ] ; then

                 service keepalived restart

          fi

fi

#backup part

  if [ $STATB -eq 0 ] ; then 

ROUTEID=`grep 51 /etc/keepalived/keepalived.conf >/dev/null ; echo $?`

          if [ $ROUTEID -eq 0 ] ; then

sed -i '5s/51/52/' /etc/keepalived/keepalived.conf 

STB=`$PING  $MASTER  > $NULL ; echo $? `

IP=`ip add list |grep $VIP   >$NULL ; echo $?`

SSLPORT=`$NC  $MASTER 443 2>$NULL ; echo $?`

     if [ $STB -eq 0 ] && [ $SSLPORT -eq 0 ] ; then

               echo $time MASTER - - -  is - - -  alived >> $LOG

               echo $time status - - - is - - - BACKUP >> $LOG       

               echo 1 >.sta

             if [ $IP -eq 0 ] ; then

IPSTAT=`ip addr list |grep $VIP | wc -l `

         if  [ $IPSTAT -eq 2 ] ; then

                  echo $INTERFACE |xargs ip addr del $VIP dev 2>>$NULL

                  echo $time  Remove $VIP for $INTERFACE in backup ok !  >>$LOG

             fi

     else       

ST=`cat .sta`

 if [ $ST -eq 1 ] ; then

service keepalived restart

echo $time  Sending gratuitous ARPs on $INTERFACE for $VIP from backup 1 >>$LOG

echo 0 >.sta

 fi

        if [ $IP -eq 0 ] ; then

           echo $time master - - - is - - -  shutdown >> $LOG

           echo $time   vip  - - -  is  - - -   ok >>$LOG

           echo $time  now -- status --  is --   MASTER >> $LOG

        else

           echo $time "status is -------->>>>>>>  MASTER" >>$LOG

           echo $INTERFACE |xargs ip addr add $VIP  dev

           echo $time Add $VIP for $INTERFACE to backup ok 1 ! ! >>$LOG

service keepalived restart >$NULL

echo $time  Sending gratuitous ARPs on $INTERFACE for $VIP from backup 2 >>$LOG

sleep 10     

        fi

     fi  

  fi

       else

IP=`ip add list |grep $VIP  >$NULL  ; echo $?`

       if [ $IP -eq 0 ] ; then

LINE=`wc -l $FPAT |awk '{print $1}'`

           if [ $LINE -gt 3 ] ; then

             echo $time  Load balance - is -  running 1 >$NULL

             echo $time  keepalived  - - - not - - -  running 1 >>$LOG

           else 

             echo $INTERFACE |xargs ip addr del $VIP dev 2> $NULL

             echo $time  keepalived  - - - not - - -  running 2 >>$LOG

           fi

          echo $INTERFACE |xargs ip addr del $VIP dev 2> $NULL

         echo $time  keepalived  - - - not - - -  running  3 >>$LOG

#loadbalance

             echo $time  Load balance - - -  is  - - -   running @*****@ >>$LOG

  if [ $STATA -eq 0 ] ; then

        echo keepalived running >$NULL

            else

       IP=`ip add list |grep $VIP  >$NULL  ; echo $?`

               if [ $IP -eq 0 ] ; then

                   echo vip is ok >$NULL

               else

             echo $INTERFACE |xargs ip addr add $VIP dev 2> $NULL

            fi      

PIDLINE=`ipvsadm -L -n | wc -l`

OUTPUTIP1=`cat $FPAT | sed -n '6p' | awk -F'<Addr_Out>' '{print $2}' |awk -F'</Addr_Out>' '{print $1}'`

INPUTIP1=`cat $FPAT |sed -n '9p' | awk -F'<Addr_In>' '{print $2}' |awk -F'</Addr_In>' '{print $1}'`

OUTPUTIP2=`cat $FPAT | sed -n '15p' | awk -F '<Addr_Out>' '{print $2}' |awk -F'</Addr_Out>' '{print $1}'`

INPUTIP2=`cat $FPAT | sed -n '18p' | awk -F'<Addr_In>' '{print $2}' |awk -F'</Addr_In>' '{print $1}'`

OUTPUTPORT1=`cat $FPAT | sed -n '7p' |awk -F'<Port_Out_Uni>' '{print $2}'|awk -F'</Port_Out_Uni>' '{print $1}'`

OUTPUTPORT2=`cat $FPAT | sed -n '8p' |awk -F'<Port_Out_Bi>' '{print $2}'|awk -F'</Port_Out_Bi>' '{print $1}'`

OUTVIP=`cat /etc/keepalived/keepalived.conf |sed -n '15p' | awk -F/.* '{print $1}'`

INVIP=192.168.0.99

INFACE=eth3  

LINEB=`wc -l $FPAT |awk '{print $1}'` 

              if [ $LINEB -gt 22 ] ; then

OUTPUTIP3=`cat $FPAT |sed -n '24p'| awk -F '<Addr_Out>' '{print $2}' |awk -F'</Addr_Out>' '{print $1}'`

INPUTIP3=`cat  $FPAT |sed -n '27p'| awk -F'<Addr_In>' '{print $2}' |awk -F'</Addr_In>' '{print $1}'`

                if [ $PIDLINE -eq 3 ] ; then

                          echo $time ipvsadm -  not - set  -  ok ! >>$LOG

                   if [ "$OUTPUTIP1" == "$INPUTIP1" ] ; then

ipvsadm -A -t $OUTVIP:$OUTPUTPORT1 -s wlc -p 900

ipvsadm -a -t $OUTVIP:$OUTPUTPORT1 -r $OUTPUTIP1:$OUTPUTPORT1 -g

ipvsadm -a -t $OUTVIP:$OUTPUTPORT1 -r $OUTPUTIP2:$OUTPUTPORT1 -g

ipvsadm -a -t $OUTVIP:$OUTPUTPORT1 -r $OUTPUTIP3:$OUTPUTPORT1 -g

ipvsadm -A -t $OUTVIP:$OUTPUTPORT2 -s wlc -p 900

ipvsadm -a -t $OUTVIP:$OUTPUTPORT2 -r $OUTPUTIP1:$OUTPUTPORT2 -g

ipvsadm -a -t $OUTVIP:$OUTPUTPORT2 -r $OUTPUTIP2:$OUTPUTPORT2 -g

ipvsadm -a -t $OUTVIP:$OUTPUTPORT2 -r $OUTPUTIP3:$OUTPUTPORT2 -g

                      echo $time set - - - ipvsadm - - - ok >> $LOG

                  else

ipvsadm -A -t $INVIP:$OUTPUTPORT1 -s wlc -p 900

ipvsadm -a -t $INVIP:$OUTPUTPORT1 -r $INPUTIP1:$OUTPUTPORT1 -g

ipvsadm -a -t $INVIP:$OUTPUTPORT1 -r $INPUTIP2:$OUTPUTPORT1 -g

ipvsadm -a -t $INVIP:$OUTPUTPORT1 -r $INPUTIP3:$OUTPUTPORT1 -g

ipvsadm -A -t $INVIP:$OUTPUTPORT2 -s wlc -p 900

ipvsadm -a -t $INVIP:$OUTPUTPORT2 -r $INPUTIP1:$OUTPUTPORT2 -g

ipvsadm -a -t $INVIP:$OUTPUTPORT2 -r $INPUTIP2:$OUTPUTPORT2 -g

ipvsadm -a -t $INVIP:$OUTPUTPORT2 -r $INPUTIP3:$OUTPUTPORT2 -g

                   echo $time set - - - ipvsadm - - - ok  >> $LOG  

                fi  

             else

                echo $time ipvsadm - - - is - - - alived >> $LOG

            fi

                 if [ $PIDLINE -eq 3 ] ; then

                   echo $time ipvsadm -  not - set  -  ok ! >>$LOG

              if [ "$OUTPUTIP1" == "$INPUTIP1" ] ; then

                 echo $time set - - - ipvsadm - - - ok >> $LOG

                 echo $time set - - - ipvsadm - - - ok  >> $LOG

                 echo $time ipvsadm - - - is - - - alived >> $LOG  

               if [ $LINE -gt 3 ] ; then

STD=`$PING  $OUTPUTIP1 >$NULL ; echo $?`

STE=`$PING  $OUTPUTIP2 >$NULL ; echo $?`

               fi

PORTA=`$NC $OUTPUTIP1 $OUTPUTPORT1 2> $NULL ; echo $?`

PORTB=`$NC $OUTPUTIP2 $OUTPUTPORT1 2> $NULL ; echo $?`

          if [ $PORTA -eq 1 ] ; then

               echo $OUTPUTIP1 > .ipaddSTD

ipvsadm -d -t $OUTVIP:$OUTPUTPORT1 -r $OUTPUTIP1 2>$NULL

ipvsadm -d -t $OUTVIP:$OUTPUTPORT2 -r $OUTPUTIP1 2>$NULL

               echo 1 >.A

AS=`cat .A`

              if [ $AS -eq 1 ] ; then

                    echo $time ipvsadm remove $OUTPUTIP1 server 1 >>$LOG

                    echo log ok >$NULL

VALUEIP=`wc -l .ipaddSTD |awk '{print $1}'`

                           if [ $VALUEIP -gt 0 ] ; then

STD1=`$PING $OUTPUTIP1 >$NULL ; echo $?`

PORTA=`$NC $OUTPUTIP1 $OUTPUTPORT1 2>$NULL ; echo $?`

                        if [ $STD1 -eq 0 ]  && [ $PORTA -eq 0 ] ; then

                    echo $time $OUTPUTIP1 is alived add to ipvsadm >>$LOG

>.ipaddSTD

                           else

                                echo status ok >$NULL

                         fi

                             fi

                              if [ $PORTB -eq 1 ] ; then

                                   echo $OUTPUTIP2 > .ipaddSTE

ipvsadm -d -t $OUTVIP:$OUTPUTPORT1 -r $OUTPUTIP2 2>$NULL

ipvsadm -d -t $OUTVIP:$OUTPUTPORT2 -r $OUTPUTIP2 2>$NULL

echo 1 >.B

BS=`cat .B`

                     if [ $BS -eq 1 ] ; then

                          echo $time ipvsadm remove $OUTPUTIP2  server 2 >>$LOG

                     else

                           echo log ok > $NULL

                     fi

                             else

VALUEIP=`wc -l .ipaddSTE |awk '{print $1}'`

                         if [ $VALUEIP -gt 0 ] ; then

STD1=`$PING $OUTPUTIP2 >$NULL ; echo $?`

PORTA=`$NC $OUTPUTIP2 $OUTPUTPORT1 2>$NULL ; echo $?`

                      if [ $STD1 -eq 0 ]  && [ $PORTA -eq 0 ] ; then

                         echo $time  $OUTPUTIP2 is alived add to ipvsadm >>$LOG

>.ipaddSTE

                         else

                               echo status ok > $NULL

                      fi

                                    if [ $LINEB -gt 22 ] ; then

PORTC=`$NC $OUTPUTIP3 $OUTPUTPORT1 2>$NULL ; echo $?`

STF=`$PING  $OUTPUTIP3 >$NULL ; echo $?`

                                  if [ $PORTC -eq 1 ] ; then

ipvsadm -d -t $OUTVIP:$OUTPUTPORT1 -r $OUTPUTIP3 2>$NULL

ipvsadm -d -t $OUTVIP:$OUTPUTPORT2 -r $OUTPUTIP3 2>$NULL

                                     echo $OUTPUTIP3 > .ipaddSTF

                                     echo 1 >.C

CS=`cat .C`

                                if [ $CS -eq 1 ] ; then

                         echo $time ipvsadm remove $OUTPUTIP3  server 3 >>$LOG

                                else

                                    echo log ok >$NULL

                                fi

                                  else

VALUEIP=`wc -l .ipaddSTF |awk '{print $1}'`

                        if [ $VALUEIP -gt 0 ] ; then

STD1=`$PING $OUTPUTIP3 >$NULL ; echo $?`

PORTA=`$NC $OUTPUTIP3 $OUTPUTPORT1 2>$NULL ; echo $?`

                     if [ $STD1 -eq 0 ]  && [ $PORTA -eq 0 ] ; then

                       echo $time $OUTPUTIP3 is alived add to ipvsadm >>$LOG

>.ipaddSTF

                        else

                              echo status ok > $NULL

                  fi

##

           else

      echo "$time status is backup Can't use LVS !~!~! "  >> $LOG

              echo \; echo\; echo

IP=`ip add list |grep $OUTVIP >$NULL ; echo $?`

ROUTE=`route -n |grep $OUTVIP |grep lo  >$NULL; echo $?`

       if [ "$OUTPUTIP1" == "$INPUTIP1" ] ; then

                        if [ $IP -eq 0 ] && [ $ROUTE -eq 0 ] ; then

                           ifconfig lo:2 $OUTVIP netmask 255.255.255.255 up

echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

                              echo $time add $OUTVIP for lo:2 to backup server ok 1! >>$LOG

                              route add -host $OUTVIP dev lo:2

                        fi

       else                      

IPA=`ip add list |grep $OUTVIP >$NULL ; echo $?`

IPB=`ip add list |grep $INVIP >$NULL ; echo $?`

ROUTEA=`route -n |grep $OUTVIP |grep lo  >$NULL; echo $?`

ROUTEB=`route -n |grep $INVIP |grep lo  >$NULL; echo $?`

                        if [ "$IPA" == "$IPB" ] && [ "$ROUTEA" == "$ROUTEB" ] ; then

                            echo $time VIP - - Set - - UP - -ok >>$LOG  

                            echo $time add $OUTVIP for lo:2 to backup server ok 2! >>$LOG

                            route add -host $OUTVIP dev lo:2

                            ifconfig lo:3 $INVIP netmask 255.255.255.255 up

                            route add -host $INVIP dev lo:3

                            echo $time add $INVIP for lo:3 to backup server ok ! >>$LOG

      fi                 

ipvsadm -C   

             if [ $STATB -eq 0 ] ; then

echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce

echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore

             ip addr del $OUTVIP dev lo  2>$NULL

             ip addr del $INVIP dev lo   2>$NULL

             route del -host $OUTVIP dev lo 2>$NULL

             route del -host $INVIP dev lo  2>$NULL    

             echo $time Load balance - is -  closed >>$LOG

   else

   LOG=/var/log/keepalived.log

   ipvsadm -C

   echo $INTERFACE |xargs ip addr del $VIP dev 2>>$NULL

   echo $time TrustMore Gateway Server Not Running >> $LOG

FILE=`grep "nohup /ssl/bin/k.sh &" /etc/rc.local > $NULL ; echo $?`

    if [ $FILE -eq 0 ] ; then

       echo file ok >$NULL

    else

       echo "nohup /ssl/bin/k.sh & " >>/etc/rc.local

    fi

ls -l $LOG |awk '{print $5}' | awk '$1 > 107374182 {print$1}' >.size

SIZE=`wc -l .size | awk '{print $1}'`

    if [ $SIZE -gt 0 ] ; then

      rm -rf $LOG

sleep $RUNTIME

done

本文转自zhaoyun00 51CTO博客,原文链接:http://blog.51cto.com/zhaoyun/666226

上一篇: tomcatmonitor
下一篇: 安装脚本