- #!/bin/bash
- #create lvs dr or tunl realservr scripts.
- #chenjian 2011-09-23
- VIP_LIST="192.168.116.20 192.168.116.21"
- USAGE="Usage: $0 {start|stop|status} {dr|tunl}"
- NAME=tunl
- NUM=0
- if [ -z $1 ]
- then
- echo $USAGE
- exit 2
- fi
- ACTION=`echo $1|tr A-Z a-z`
- if ! [ $1 == status ]
- then
- if [ -z $2 ]
- then
- echo $USAGE
- exit 2
- fi
- fi
- TYPE=`echo $2|tr A-Z a-z`
- case "$1" in
- start)
- if [ $TYPE == dr ]
- then
- if /sbin/ifconfig |grep lo: > /dev/null
- then
- /sbin/ifdown lo
- /sbin/ifup lo
- fi
- for vip in `echo $VIP_LIST`;do
- /sbin/ifconfig lo:$NUM $vip netmask 255.255.255.255 broadcast $vip
- /sbin/route add -host $vip dev lo:$NUM
- NUM=`echo $[$NUM+1]`
- done
- echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
- echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
- echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
- echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
- sysctl -p >/dev/null 2>&1
- echo "$TYPE RealServer Start [ OK ]"
- elif [ $TYPE == tunl ]
- then
- for vip in `echo $VIP_LIST`;do
- if [ $NAME == tunl ]
- then
- NAME=tunl0
- /sbin/ifconfig "$NAME" $vip netmask 255.255.255.255
- /sbin/route add -host $vip dev $NAME
- else
- /sbin/ifconfig "$NAME":"$NUM" $vip netmask 255.255.255.255
- /sbin/route add -host $vip dev $NAME
- fi
- NUM=`echo $[$NUM+1]`
- done
- echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
- echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
- echo 0 > /proc/sys/net/ipv4/conf/tunl0/arp_filter
- echo 1 > /proc/sys/net/ipv4/conf/tunl0/forwarding
- echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
- echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
- sysctl -p >/dev/null 2>&1
- echo "$TYPE RealServer Start [ OK ]"
- else
- echo $USAGE
- exit 2
- fi
- ;;
- stop)
- if [ $TYPE == dr ]
- then
- /sbin/ifconfig lo down
- /sbin/ifconfig lo up
- 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
- echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
- sysctl -p >/dev/null 2>&1
- echo "$TYPE RealServer Stop [ OK ]"
- elif [ $TYPE == tunl ]
- then
- /sbin/ifconfig tunl0 down
- echo 0 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
- echo 0 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
- echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_filter
- echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
- echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
- else
- echo $USAGE
- exit 2
- fi
- ;;
- status)
- if /sbin/ifconfig |grep -q 'lo:'
- then
- TYPE=dr
- elif /sbin/ifconfig |grep -q 'tunl'
- then
- TYPE=tunl
- else
- exit 2
- fi
- for vip in `echo $VIP_LIST`;do
- if [ ! `/sbin/ifconfig |grep -q $vip` -o ! `netstat -rn |grep $vip` ];
- then
- echo "LVS-$TYPE real server stopped,vip = $vip"
- else
- echo "LVS-$TYPE Running,vip = $vip"
- fi
- done
- ;;
- *)
- echo "$USAGE"
- exit 1
- ;;
- esac