NAT-GW updates. Describe the functionality in the sysconfig file
[metze/ctdb/wip.git] / config / events.d / 91.lvs
1 #!/bin/sh
2 # script to manage the lvs ip multiplexer for a single public address cluster
3
4 . $CTDB_BASE/functions
5 loadconfig ctdb
6
7 [ -z "$CTDB_LVS_PUBLIC_IP" ] && exit 0
8 [ -z "$CTDB_PUBLIC_INTERFACE" ] && exit 0
9
10 [ -x /sbin/ipvsadm ] || {
11     echo "LVS configured but /sbin/ipvsadm is not installed."
12     exit 0
13 }
14
15
16 cmd="$1"
17 shift
18
19 PATH=/usr/bin:/bin:/usr/sbin:/sbin:$PATH
20
21 case $cmd in 
22      startup)
23         ipvsadm -D -t $CTDB_LVS_PUBLIC_IP:0
24         ipvsadm -D -u $CTDB_LVS_PUBLIC_IP:0
25
26         ip addr add $CTDB_LVS_PUBLIC_IP/32 dev lo scope host >/dev/null 2>/dev/null
27
28         # do not respond to ARPs that are for ip addresses with scope 'host'
29         echo 3 > /proc/sys/net/ipv4/conf/all/arp_ignore
30         # do not send out arp requests from loopback addresses
31         echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
32         ;;
33
34      shutdown)
35         ipvsadm -D -t $CTDB_LVS_PUBLIC_IP:0
36         ipvsadm -D -u $CTDB_LVS_PUBLIC_IP:0
37
38         # remove the ip
39         ip addr del $CTDB_LVS_PUBLIC_IP/32 dev lo >/dev/null 2>/dev/null
40
41         # flush our route cache
42         echo 1 > /proc/sys/net/ipv4/route/flush
43         ;;
44
45      takeip)
46         ;;
47
48      releaseip)
49         ;;
50
51      recovered)
52         # kill off any tcp connections
53         ipvsadm -D -t $CTDB_LVS_PUBLIC_IP:0
54         ipvsadm -D -u $CTDB_LVS_PUBLIC_IP:0
55         kill_tcp_connections $CTDB_LVS_PUBLIC_IP
56
57         PNN=`ctdb pnn | sed -e "s/.*PNN://"`
58         LVSMASTER=`ctdb lvsmaster | sed -e "s/.*Node //" -e "s/ .*//"`
59
60         [ "$PNN" != "$LVSMASTER" ] && {
61             # we are not the lvs master so we have to
62             # change the ip address to have scope host so we wont respond
63             # to arps
64             ip addr del $CTDB_LVS_PUBLIC_IP/32 dev lo >/dev/null 2>/dev/null
65             ip addr add $CTDB_LVS_PUBLIC_IP/32 dev lo scope host >/dev/null 2>/dev/null
66             exit 0
67         }
68
69         # change the scope so we start responding to arps
70         ip addr del $CTDB_LVS_PUBLIC_IP/32 dev lo >/dev/null 2>/dev/null
71         ip addr add $CTDB_LVS_PUBLIC_IP/32 dev lo >/dev/null 2>/dev/null
72
73         ipvsadm -A -t $CTDB_LVS_PUBLIC_IP:0 -p 9999 -s lc
74         ipvsadm -A -u $CTDB_LVS_PUBLIC_IP:0 -p 9999 -s lc
75
76         # add all nodes (except ourselves) to the lvs config
77         ctdb lvs | egrep -v "^$PNN:" | sed -e "s/.*://" | while read IP; do
78                 ipvsadm -a -t $CTDB_LVS_PUBLIC_IP:0 -r $IP -g
79                 ipvsadm -a -u $CTDB_LVS_PUBLIC_IP:0 -r $IP -g
80         done
81         # and add the localhost too
82         ipvsadm -a -t $CTDB_LVS_PUBLIC_IP:0 -r 127.0.0.1
83         ipvsadm -a -u $CTDB_LVS_PUBLIC_IP:0 -r 127.0.0.1
84
85         # send out a gratious arp so our peers will update their arp tables
86         ctdb gratiousarp $CTDB_LVS_PUBLIC_IP $CTDB_PUBLIC_INTERFACE >/dev/null 2>/dev/null
87
88         # flush our route cache
89         echo 1 > /proc/sys/net/ipv4/route/flush
90         ;;
91
92       monitor)
93         ;;
94
95 esac
96
97 exit 0