/ctdb/events.d/91.lvs
http://github.com/brinkman83/bashrc · Shell · 86 lines · 51 code · 20 blank · 15 comment · 6 complexity · b9721062420276564e6fe1b1ab4f9119 MD5 · raw file
- #!/bin/sh
- # script to manage the lvs ip multiplexer for a single public address cluster
- . $CTDB_BASE/functions
- loadconfig ctdb
- [ -z "$CTDB_LVS_PUBLIC_IP" ] && exit 0
- [ -z "$CTDB_PUBLIC_INTERFACE" ] && exit 0
- [ -x /sbin/ipvsadm ] || {
- echo "LVS configured but /sbin/ipvsadm is not installed."
- exit 0
- }
- case "$1" in
- startup)
- ipvsadm -D -t $CTDB_LVS_PUBLIC_IP:0
- ipvsadm -D -u $CTDB_LVS_PUBLIC_IP:0
- ip addr add $CTDB_LVS_PUBLIC_IP/32 dev lo scope host >/dev/null 2>/dev/null
- # do not respond to ARPs that are for ip addresses with scope 'host'
- echo 3 > /proc/sys/net/ipv4/conf/all/arp_ignore
- # do not send out arp requests from loopback addresses
- echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
- ;;
- shutdown)
- ipvsadm -D -t $CTDB_LVS_PUBLIC_IP:0
- ipvsadm -D -u $CTDB_LVS_PUBLIC_IP:0
- # remove the ip
- ip addr del $CTDB_LVS_PUBLIC_IP/32 dev lo >/dev/null 2>/dev/null
- # flush our route cache
- echo 1 > /proc/sys/net/ipv4/route/flush
- ;;
- recovered|stopped)
- # kill off any tcp connections
- ipvsadm -D -t $CTDB_LVS_PUBLIC_IP:0
- ipvsadm -D -u $CTDB_LVS_PUBLIC_IP:0
- kill_tcp_connections_local_only $CTDB_LVS_PUBLIC_IP
- PNN=`ctdb pnn | sed -e "s/.*PNN://"`
- LVSMASTER=`ctdb lvsmaster | sed -e "s/.*Node //" -e "s/ .*//"`
- [ "$PNN" != "$LVSMASTER" ] && {
- # we are not the lvs master so we have to
- # change the ip address to have scope host so we wont respond
- # to arps
- ip addr del $CTDB_LVS_PUBLIC_IP/32 dev lo >/dev/null 2>/dev/null
- ip addr add $CTDB_LVS_PUBLIC_IP/32 dev lo scope host >/dev/null 2>/dev/null
- exit 0
- }
- # change the scope so we start responding to arps
- ip addr del $CTDB_LVS_PUBLIC_IP/32 dev lo >/dev/null 2>/dev/null
- ip addr add $CTDB_LVS_PUBLIC_IP/32 dev lo >/dev/null 2>/dev/null
- ipvsadm -A -t $CTDB_LVS_PUBLIC_IP:0 -p 9999 -s lc
- ipvsadm -A -u $CTDB_LVS_PUBLIC_IP:0 -p 9999 -s lc
- # add all nodes (except ourselves) to the lvs config
- ctdb lvs | egrep -v "^$PNN:" | sed -e "s/.*://" | while read IP; do
- ipvsadm -a -t $CTDB_LVS_PUBLIC_IP:0 -r $IP -g
- ipvsadm -a -u $CTDB_LVS_PUBLIC_IP:0 -r $IP -g
- done
- # and add the localhost too
- ipvsadm -a -t $CTDB_LVS_PUBLIC_IP:0 -r 127.0.0.1
- ipvsadm -a -u $CTDB_LVS_PUBLIC_IP:0 -r 127.0.0.1
- # send out a gratious arp so our peers will update their arp tables
- ctdb gratiousarp $CTDB_LVS_PUBLIC_IP $CTDB_PUBLIC_INTERFACE >/dev/null 2>/dev/null
- # flush our route cache
- echo 1 > /proc/sys/net/ipv4/route/flush
- ;;
- *)
- ctdb_standard_event_handler "$@"
- ;;
- esac
- exit 0