2 # script to manage the lvs ip multiplexer for a single public address cluster
4 [ -n "$CTDB_BASE" ] || \
5 export CTDB_BASE
=$
(cd -P $
(dirname "$0") ; dirname "$PWD")
11 [ -z "$CTDB_LVS_PUBLIC_IP" ] && exit 0
12 [ -z "$CTDB_PUBLIC_INTERFACE" ] && exit 0
14 [ -x /sbin
/ipvsadm
] ||
{
15 echo "LVS configured but /sbin/ipvsadm is not installed."
21 ipvsadm
-D -t $CTDB_LVS_PUBLIC_IP:0
22 ipvsadm
-D -u $CTDB_LVS_PUBLIC_IP:0
24 ip addr add
$CTDB_LVS_PUBLIC_IP/32 dev lo scope
host >/dev
/null
2>/dev
/null
26 # do not respond to ARPs that are for ip addresses with scope 'host'
27 echo 3 > /proc
/sys
/net
/ipv
4/conf
/all
/arp_ignore
28 # do not send out arp requests from loopback addresses
29 echo 2 > /proc
/sys
/net
/ipv
4/conf
/all
/arp_announce
33 ipvsadm
-D -t $CTDB_LVS_PUBLIC_IP:0
34 ipvsadm
-D -u $CTDB_LVS_PUBLIC_IP:0
37 ip addr del
$CTDB_LVS_PUBLIC_IP/32 dev lo
>/dev
/null
2>/dev
/null
39 # flush our route cache
40 echo 1 > /proc
/sys
/net
/ipv
4/route
/flush
43 recovered|ipreallocated
)
44 # kill off any tcp connections
45 ipvsadm
-D -t $CTDB_LVS_PUBLIC_IP:0
46 ipvsadm
-D -u $CTDB_LVS_PUBLIC_IP:0
47 kill_tcp_connections_local_only
$CTDB_LVS_PUBLIC_IP
49 PNN
=`ctdb pnn | sed -e "s/.*PNN://"`
50 LVSMASTER
=`ctdb lvsmaster | sed -e "s/.*Node //" -e "s/ .*//"`
52 [ "$PNN" != "$LVSMASTER" ] && {
53 # we are not the lvs master so we have to
54 # change the ip address to have scope host so we wont respond
56 ip addr del
$CTDB_LVS_PUBLIC_IP/32 dev lo
>/dev
/null
2>/dev
/null
57 ip addr add
$CTDB_LVS_PUBLIC_IP/32 dev lo scope
host >/dev
/null
2>/dev
/null
61 # change the scope so we start responding to arps
62 ip addr del
$CTDB_LVS_PUBLIC_IP/32 dev lo
>/dev
/null
2>/dev
/null
63 ip addr add
$CTDB_LVS_PUBLIC_IP/32 dev lo
>/dev
/null
2>/dev
/null
65 ipvsadm
-A -t $CTDB_LVS_PUBLIC_IP:0 -p 1999999 -s lc
66 ipvsadm
-A -u $CTDB_LVS_PUBLIC_IP:0 -p 1999999 -s lc
68 # add all nodes (except ourselves) to the lvs config
69 ctdb lvs |
egrep -v "^$PNN:" |
sed -e "s/.*://" |
while read IP
; do
70 ipvsadm
-a -t $CTDB_LVS_PUBLIC_IP:0 -r $IP -g
71 ipvsadm
-a -u $CTDB_LVS_PUBLIC_IP:0 -r $IP -g
73 # and add the localhost too
74 ipvsadm
-a -t $CTDB_LVS_PUBLIC_IP:0 -r 127.0.0.1
75 ipvsadm
-a -u $CTDB_LVS_PUBLIC_IP:0 -r 127.0.0.1
77 # send out a gratious arp so our peers will update their arp tables
78 ctdb gratiousarp
$CTDB_LVS_PUBLIC_IP $CTDB_PUBLIC_INTERFACE >/dev
/null
2>/dev
/null
80 # flush our route cache
81 echo 1 > /proc
/sys
/net
/ipv
4/route
/flush
85 ctdb_standard_event_handler
"$@"