| 219 |
jeremy |
1 |
#!/bin/bash
|
| 328 |
franck |
2 |
# $Id: alcasar-load_balancing.sh 2474 2017-12-30 02:00:04Z tom.houdayer $
|
| 221 |
franck |
3 |
|
| 1068 |
franck |
4 |
# Generic Load balancer for multiple WAN links - version 1.1 (04 Feb 2011)
|
|
|
5 |
# (c) 2011 Pau Oliva Fora - http://pof.eslack.org
|
|
|
6 |
#
|
|
|
7 |
# Licensed under GPLv3 - for full terms see:
|
|
|
8 |
# http://www.gnu.org/licenses/gpl-3.0.html
|
|
|
9 |
#
|
|
|
10 |
# Adapted and debugged (adr et ping -S) by ALCASAR Team (3abtux@alcasar.net)
|
|
|
11 |
# (c) 2013 3abtux - http://www.alcasar.net
|
|
|
12 |
#
|
|
|
13 |
# Specify each WAN link in a separate column, example:
|
|
|
14 |
# In this example we have 3 wan links (vlanXXX interfaces) attached to a single
|
|
|
15 |
# physical interface because we use a vlan-enabled switch between the balancer
|
|
|
16 |
# machine and the ADSL routers we want to balance. The weight parameter should
|
| 1078 |
franck |
17 |
# be kept to a low integer.
|
| 1068 |
franck |
18 |
#
|
|
|
19 |
#
|
|
|
20 |
# Modified by ALCASAR team :
|
| 219 |
jeremy |
21 |
|
| 672 |
richard |
22 |
|
| 1078 |
franck |
23 |
prog="alcasar-load_balancing.sh"
|
|
|
24 |
pidfile="/var/run/alcasar-load_balancing.pid"
|
|
|
25 |
|
| 1068 |
franck |
26 |
###############################
|
|
|
27 |
# MAIN PARAMETERs Configuration
|
|
|
28 |
###############################
|
| 219 |
jeremy |
29 |
|
| 1078 |
franck |
30 |
DIR_ETC="/usr/local/etc"
|
|
|
31 |
CONF_FILE="$DIR_ETC/alcasar.conf"
|
| 2474 |
tom.houday |
32 |
MULTIWAN=`grep ^MULTIWAN= $CONF_FILE|cut -d"=" -f2`
|
| 1078 |
franck |
33 |
MULTIWAN=${MULTIWAN:=off}
|
| 2474 |
tom.houday |
34 |
FAILOVER=`grep ^FAILOVER= $CONF_FILE|cut -d"=" -f2`
|
| 1078 |
franck |
35 |
FAILOVER=${FAILOVER:=30}
|
| 1789 |
franck |
36 |
EXTIF=`grep ^EXTIF= $CONF_FILE|cut -d"=" -f2` # INTernal InterFace
|
| 1078 |
franck |
37 |
|
|
|
38 |
|
| 1068 |
franck |
39 |
# space separated list of public IPs to ping in watchdog mode
|
|
|
40 |
# set this to some public ip addresses pingable and always on.
|
|
|
41 |
TESTIPS="8.8.8.8 192.0.32.10"
|
| 219 |
jeremy |
42 |
|
| 1068 |
franck |
43 |
# set to 1 when testing, set to 0 when happy with the results
|
| 1078 |
franck |
44 |
VERBOSE=0
|
| 219 |
jeremy |
45 |
|
| 1068 |
franck |
46 |
# CONFIGURATION ENDS HERE
|
|
|
47 |
###############################
|
| 219 |
jeremy |
48 |
|
|
|
49 |
|
| 1068 |
franck |
50 |
if [ $(whoami) != "root" ]; then
|
| 2454 |
tom.houday |
51 |
echo "You must be root to run this!" ; echo ; exit 1
|
| 219 |
jeremy |
52 |
fi
|
|
|
53 |
|
| 1068 |
franck |
54 |
# Adapter for ALCASAR project
|
|
|
55 |
CONF_FILE="/usr/local/etc/alcasar.conf"
|
| 219 |
jeremy |
56 |
|
| 1068 |
franck |
57 |
# Virtual interfaces creating
|
|
|
58 |
function create_eth () {
|
|
|
59 |
routecmd="ip route replace default scope global"
|
| 2474 |
tom.houday |
60 |
NBIFACE=`grep "^WAN=" $CONF_FILE | wc -l` # Nbre interfaces virtuelles
|
| 1068 |
franck |
61 |
i=0
|
|
|
62 |
while [ $i -le $NBIFACE ]
|
|
|
63 |
do
|
|
|
64 |
INT="WAN$i"
|
|
|
65 |
echo $INT
|
|
|
66 |
ACTIVE=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $1}'` # Active
|
|
|
67 |
WT=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $5}'` # WEIGHT
|
|
|
68 |
WT=${WT:-1}
|
|
|
69 |
IP=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $3}' | cut -d"/" -f1` # @IP
|
| 937 |
franck |
70 |
|
| 1068 |
franck |
71 |
if [ $i -ne 0 ]; then
|
| 1789 |
franck |
72 |
[ -e /etc/sysconfig/network-scripts/ifcfg-$EXTIF:$i ] && ifdown $EXTIF:$i && rm -f /etc/sysconfig/network-scripts/ifcfg-$EXTIF:$i
|
| 1068 |
franck |
73 |
IFACE=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $2}'` # IFACE
|
|
|
74 |
IP_NET=`grep "^$INT=" $CONF_FILE | awk -F'"' '{print $2}' | awk -F, '{ print $3}'` # IP
|
|
|
75 |
NET="`ipcalc -n $IP_NET | cut -d"=" -f2`/`ipcalc -p $IP_NET|cut -d"=" -f2`"
|
|
|
76 |
GW=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $4}'` # @GW
|
|
|
77 |
MTU=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $6}'` # MTU
|
| 219 |
jeremy |
78 |
|
| 1789 |
franck |
79 |
# Config $EXTIF:$i (Internet)
|
|
|
80 |
cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF:$i
|
| 1068 |
franck |
81 |
DEVICE=$IFACE
|
|
|
82 |
BOOTPROTO=static
|
|
|
83 |
IPADDR=`echo $IP | cut -d"/" -f1`
|
|
|
84 |
NETMASK=`ipcalc -m $IP_NET | cut -d= -f2`
|
|
|
85 |
NETWORK=`ipcalc -n $IP_NET | cut -d= -f2`
|
|
|
86 |
MTU=$MTU
|
|
|
87 |
ONBOOT=yes
|
|
|
88 |
NOZEROCONF=yes
|
|
|
89 |
MII_NOT_SUPPORTED=yes
|
|
|
90 |
IPV6INIT=no
|
|
|
91 |
IPV6TO4INIT=no
|
|
|
92 |
ACCOUNTING=no
|
|
|
93 |
USERCTL=no
|
|
|
94 |
EOF
|
| 1789 |
franck |
95 |
echo "ifup $EXTIF:$i"
|
|
|
96 |
ifup $EXTIF:$i
|
| 1068 |
franck |
97 |
NET="`ipcalc -n $IP_NET | cut -d"=" -f2`/`ipcalc -p $IP_NET|cut -d"=" -f2`"
|
|
|
98 |
else
|
| 1789 |
franck |
99 |
IFACE="$EXTIF"
|
| 1068 |
franck |
100 |
IP_NET=`grep "^PUBLIC_IP=" $CONF_FILE | awk -F'=' '{print $2}'` # IP/MSK
|
|
|
101 |
IP=`grep "^PUBLIC_IP=" $CONF_FILE | awk -F= '{ print $2 }' | cut -d"/" -f1` # @IP
|
|
|
102 |
GW=`grep "^GW=" $CONF_FILE | awk -F= '{print $2}'` # @GW
|
|
|
103 |
# MTU=`grep "^PUBLIC_MTU=" $CONF_FILE | awk -F= '{print $2}'` # MTU
|
|
|
104 |
fi # End
|
| 219 |
jeremy |
105 |
|
| 1068 |
franck |
106 |
NET="`ipcalc -n $IP_NET | cut -d"=" -f2`/`ipcalc -p $IP_NET|cut -d"=" -f2`"
|
| 2454 |
tom.houday |
107 |
if [ "$PARAM" == "add" ]; then
|
| 1068 |
franck |
108 |
set -x
|
|
|
109 |
table=$(($i + 1))
|
|
|
110 |
ip route ${PARAM} ${NET} dev ${IFACE} src ${IP} table $table
|
|
|
111 |
ip route ${PARAM} default via ${GW} table $table
|
|
|
112 |
ip rule ${PARAM} from ${IP} table $table
|
|
|
113 |
set +x
|
|
|
114 |
fi
|
|
|
115 |
echo " Iface: ${IFACE}"
|
|
|
116 |
echo " IP: ${IP}"
|
|
|
117 |
echo " IP_NET: ${IP_NET}"
|
|
|
118 |
echo " NET: ${NET}"
|
|
|
119 |
echo " GW: ${GW}"
|
|
|
120 |
echo " Weight: ${WT}"
|
|
|
121 |
echo " MTU : ${MTU}"
|
|
|
122 |
echo
|
|
|
123 |
routecmd="${routecmd} nexthop via ${GW} dev ${IFACE} weight ${WT}"
|
|
|
124 |
i=$(($i + 1))
|
|
|
125 |
done # End While
|
| 219 |
jeremy |
126 |
|
| 2454 |
tom.houday |
127 |
if [ "$PARAM" == "add" ]; then
|
| 1068 |
franck |
128 |
echo "[] Balanced routing:"
|
|
|
129 |
# suppress default route
|
|
|
130 |
ip route del default scope global
|
|
|
131 |
set -x
|
|
|
132 |
${routecmd}
|
|
|
133 |
set +x
|
|
|
134 |
echo
|
|
|
135 |
fi
|
| 2454 |
tom.houday |
136 |
|
| 1068 |
franck |
137 |
} # end create_eth
|
| 219 |
jeremy |
138 |
|
| 1068 |
franck |
139 |
###########################
|
|
|
140 |
# Fonction virtual Interfaces deleting
|
|
|
141 |
###########################
|
|
|
142 |
delete_eth () {
|
| 1789 |
franck |
143 |
IFACE_COUNT=`ls -l /etc/sysconfig/network-scripts/ifcfg-$EXTIF:* | wc -l`
|
| 1068 |
franck |
144 |
echo $IFACE_COUNT
|
|
|
145 |
while [ $IFACE_COUNT -ne 0 ]
|
|
|
146 |
do
|
| 2454 |
tom.houday |
147 |
i=$IFACE_COUNT
|
| 1789 |
franck |
148 |
echo "ifdown $EXTIF:$i"
|
|
|
149 |
ifdown $EXTIF:$i
|
|
|
150 |
rm -f /etc/sysconfig/network-scripts/ifcfg-$EXTIF:$i
|
| 1068 |
franck |
151 |
IFACE_COUNT=$(($IFACE_COUNT - 1))
|
|
|
152 |
done
|
|
|
153 |
ip route del default scope global
|
|
|
154 |
# ip route add default gw 192.168.1.1
|
|
|
155 |
}
|
| 219 |
jeremy |
156 |
|
| 2454 |
tom.houday |
157 |
|
| 1068 |
franck |
158 |
# do not modify below this line unless you know what you're doing :)
|
|
|
159 |
function getvalue() {
|
| 2454 |
tom.houday |
160 |
index=$1
|
|
|
161 |
VAR=$2
|
| 219 |
jeremy |
162 |
|
| 2454 |
tom.houday |
163 |
n=1
|
|
|
164 |
for f in ${VAR} ; do
|
|
|
165 |
if [ "${n}" == "${index}" ]; then
|
|
|
166 |
echo "$f"
|
|
|
167 |
break
|
|
|
168 |
fi
|
|
|
169 |
n=$(($n++))
|
|
|
170 |
done
|
| 1068 |
franck |
171 |
}
|
|
|
172 |
|
|
|
173 |
######################
|
|
|
174 |
# Fonction de FailOver
|
|
|
175 |
######################
|
|
|
176 |
function failover () {
|
|
|
177 |
|
|
|
178 |
echo "[] Watchdog started"
|
|
|
179 |
# 0 == all links ok, 1 == some link down
|
|
|
180 |
STATE=0
|
| 2454 |
tom.houday |
181 |
|
| 1068 |
franck |
182 |
DOWNCOUNT_BAK=0
|
|
|
183 |
DOWN_BAK=""
|
| 2474 |
tom.houday |
184 |
NBIFACE=`grep "^WAN=" $CONF_FILE | wc -l` # Nbre interfaces virtuelles
|
| 1068 |
franck |
185 |
echo "Nombre interfaces = "$NBIFACE
|
| 1789 |
franck |
186 |
WANIFACE[0]="$EXTIF"
|
| 1068 |
franck |
187 |
c=0
|
|
|
188 |
while [ $c -le $NBIFACE ]; do
|
| 2474 |
tom.houday |
189 |
ITH=(`grep "^WAN$c=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $2}'`) # IFACE
|
| 1068 |
franck |
190 |
echo $ITH
|
|
|
191 |
WANIFACE="${WANIFACE} $ITH"
|
|
|
192 |
echo $WANIFACE
|
|
|
193 |
c=$(($c + 1))
|
|
|
194 |
done
|
|
|
195 |
echo "Liste des interfaces : "${WANIFACE[*]}
|
|
|
196 |
# Failover test
|
|
|
197 |
while : ; do
|
| 2454 |
tom.houday |
198 |
|
| 1068 |
franck |
199 |
if [ $VERBOSE -eq 1 ]; then
|
|
|
200 |
echo "[] Sleeping, state=$STATE"
|
|
|
201 |
fi
|
| 1078 |
franck |
202 |
sleep $FAILOVER
|
| 2454 |
tom.houday |
203 |
|
| 1068 |
franck |
204 |
IFINDEX=1
|
|
|
205 |
DOWN="" # liste des interfaces down
|
|
|
206 |
DOWNCOUNT=0 # nombre d'interface down
|
|
|
207 |
for iface in $WANIFACE ; do
|
|
|
208 |
COUNT=0 # compteur de test
|
|
|
209 |
FAIL=0 # Nombre de fois down
|
| 1469 |
richard |
210 |
# Recup de l'adresse IP dynamiquement
|
| 1068 |
franck |
211 |
IP=`ifconfig $iface |grep "inet adr" |cut -f 2 -d ":" |awk '{print $1}'`
|
|
|
212 |
if [ $i -ne 0 ]; then
|
|
|
213 |
GW=`grep "$iface," $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $4}'` # @GW
|
|
|
214 |
WT=`grep "$iface," $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $5}'` # @WT
|
|
|
215 |
else
|
|
|
216 |
GW=`grep "^GW=" $CONF_FILE | awk -F= '{print $2}'` # @GW
|
| 2454 |
tom.houday |
217 |
fi
|
| 1068 |
franck |
218 |
for TESTIP in $TESTIPS ; do
|
|
|
219 |
COUNT=$(($COUNT + 1))
|
|
|
220 |
ping -W 3 -I $IP -c 1 $TESTIP > /dev/null 2>&1
|
|
|
221 |
# ping -W 3 -I $IP -c 1 $TESTIP
|
|
|
222 |
# Si ping de la première adresse --> ok --> stop du test pour l'interface testée
|
|
|
223 |
if [ $? -eq 0 ]; then
|
|
|
224 |
break
|
| 2454 |
tom.houday |
225 |
else
|
| 1068 |
franck |
226 |
# sinon on compte une erreur
|
|
|
227 |
FAIL=$(($FAIL + 1))
|
|
|
228 |
fi
|
|
|
229 |
done # End of test sur un serveur Internet
|
|
|
230 |
# Affichage du nombre de down
|
|
|
231 |
echo "FAIL=$FAIL"
|
|
|
232 |
# Si nombre de fois down = nombre de tests --> Iface down --> log dans fichier log avec l'heure
|
|
|
233 |
if [ $FAIL -eq $COUNT ]; then
|
|
|
234 |
echo "`date +%F-%Hh%mm%Ss` : [WARN] $iface is down!"
|
|
|
235 |
# Si etat différent de 1 (déjà tombé) --> changement de l'état général en default
|
|
|
236 |
if [ $STATE -ne 1 ]; then
|
|
|
237 |
echo "Switching state $STATE -> 1"
|
|
|
238 |
STATE=1
|
|
|
239 |
fi
|
|
|
240 |
# Rajout de l'iface dans la liste des interfaces down
|
|
|
241 |
DOWN="${DOWN} $IFINDEX"
|
|
|
242 |
echo "DOWN=$DOWN"
|
|
|
243 |
# Nombre d'interface down
|
|
|
244 |
DOWNCOUNT=$(($DOWNCOUNT + 1))
|
|
|
245 |
echo "DOWNCOUNT=$DOWNCOUNT"
|
|
|
246 |
fi
|
|
|
247 |
IFINDEX=$(($IFINDEX + 1))
|
|
|
248 |
echo "IFINDEX =$IFINDEX"
|
|
|
249 |
done # End Test Interface in WANIFACE
|
|
|
250 |
|
| 2454 |
tom.houday |
251 |
# 0 Passerelle down et état précédent différent (retour à la normale)) --> mise à la normale des passerelles
|
| 1068 |
franck |
252 |
# if [ $DOWNCOUNT -eq 0 ] && [ $DOWNCOUNT -ne $DOWNCOUNT_BAK ]; then
|
|
|
253 |
if [ $DOWNCOUNT -eq 0 ] ; then
|
|
|
254 |
if [ $STATE -eq 1 ]; then
|
|
|
255 |
echo
|
|
|
256 |
echo "[] All links up and running :)"
|
|
|
257 |
set -x
|
|
|
258 |
${routecmd}
|
|
|
259 |
set +x
|
|
|
260 |
# Changement de l'état en normal
|
|
|
261 |
STATE=0
|
|
|
262 |
echo "Switching state 1 -> 0"
|
|
|
263 |
fi # End retour etat normal
|
|
|
264 |
# if no interface is down, go to the next cycle
|
|
|
265 |
continue
|
|
|
266 |
# cas ou au moins une passerelle down mais état identique au précédent Test --> rien à changer
|
|
|
267 |
else
|
|
|
268 |
if [ "$DOWN_BAK" == "$DOWN" ]; then
|
|
|
269 |
echo "DOWN_BAK == DOWN = $DOWN"
|
|
|
270 |
continue # --> état identique test precedent --> boucle suivante
|
|
|
271 |
# cas ou au moins une passerelle down mais état différent de test précédent --> remplacement par nouvelle règle
|
|
|
272 |
else
|
|
|
273 |
cmd="ip route replace default scope global"
|
|
|
274 |
IFINDEX=1
|
|
|
275 |
suffix=""
|
|
|
276 |
# Pour chaque interface --> traitement et application de la règle de routage
|
|
|
277 |
for iface in $WANIFACE ; do
|
|
|
278 |
echo "-------------------------"
|
|
|
279 |
echo "iface=$iface"
|
|
|
280 |
echo "Index = " $IFINDEX
|
|
|
281 |
FAILIF=0
|
| 2454 |
tom.houday |
282 |
# Pour chaque interface down -->
|
| 1068 |
franck |
283 |
echo "Interfaces DOWN = $DOWN"
|
|
|
284 |
for lnkdwn in $DOWN ; do
|
|
|
285 |
echo "LINKDOWN = "$lnkdown
|
|
|
286 |
if [ $lnkdwn -eq $IFINDEX ]; then
|
|
|
287 |
FAILIF=1
|
| 2454 |
tom.houday |
288 |
break
|
| 1068 |
franck |
289 |
else
|
|
|
290 |
continue
|
|
|
291 |
fi
|
|
|
292 |
done # End linkdown in DOWN
|
|
|
293 |
# Interface en etat normal --> rajout de la règle en mode nexthop
|
|
|
294 |
if [ $FAILIF -eq 0 ]; then
|
|
|
295 |
IP=`ifconfig $iface |grep "inet adr" |cut -f 2 -d ":" |awk '{print $1}'`
|
| 1789 |
franck |
296 |
if [ $iface != "$EXTIF" ]; then
|
| 1068 |
franck |
297 |
GW=`grep "$iface," $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $4}'` # @GW
|
|
|
298 |
WT=`grep "$iface," $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $5}'` # @GW
|
|
|
299 |
else
|
|
|
300 |
GW=`grep "^GW=" $CONF_FILE | awk -F= '{print $2}'` # @GW
|
| 2454 |
tom.houday |
301 |
fi
|
| 1068 |
franck |
302 |
echo "GW=$GW"
|
|
|
303 |
echo "WT=$WT"
|
|
|
304 |
echo "suffix=$sufix"
|
|
|
305 |
suffix="${suffix} nexthop via ${GW} dev ${iface} weight ${WT:-1}"
|
|
|
306 |
fi # End interface = noFAIL
|
|
|
307 |
IFINDEX=$(($IFINDEX + 1))
|
|
|
308 |
done # End iface IN WANIFACE
|
|
|
309 |
# Commande globale
|
|
|
310 |
cmd="ip route replace default scope global $suffix"
|
| 2454 |
tom.houday |
311 |
|
| 1068 |
franck |
312 |
if [ $VERBOSE -eq 1 ]; then
|
|
|
313 |
set -x
|
|
|
314 |
# echo "Avec commentaire : " ${cmd}
|
|
|
315 |
${cmd}
|
|
|
316 |
set +x
|
|
|
317 |
echo
|
|
|
318 |
else
|
|
|
319 |
${cmd} 2>/dev/null
|
|
|
320 |
echo ${cmd}
|
|
|
321 |
fi # end Application de la commande de routage globale
|
|
|
322 |
fi #
|
|
|
323 |
DOWN_BAK=$DOWN # Enregistrement de l'etat
|
| 2454 |
tom.houday |
324 |
fi # End
|
| 1068 |
franck |
325 |
done
|
|
|
326 |
} # End of Failover
|
|
|
327 |
|
|
|
328 |
|
|
|
329 |
#################
|
|
|
330 |
# Main
|
|
|
331 |
#################
|
|
|
332 |
|
|
|
333 |
echo "[] Load balancer for multiple WAN interfaces - v2.1"
|
|
|
334 |
echo "[] (c) 2011 Pau Oliva Fora <pof> @eslack.org"
|
|
|
335 |
echo "[] (c) 2013 3abtux ALCASAR <3abtux> @alcasar.net"
|
|
|
336 |
echo
|
|
|
337 |
|
|
|
338 |
case $1 in
|
| 2454 |
tom.houday |
339 |
create)
|
|
|
340 |
create_eth
|
| 1068 |
franck |
341 |
;;
|
| 2454 |
tom.houday |
342 |
delete)
|
|
|
343 |
delete_eth
|
| 1068 |
franck |
344 |
;;
|
| 2454 |
tom.houday |
345 |
start)
|
|
|
346 |
if [ "$MULTIWAN" != "on" ] && [ "$MULTIWAN" != "On" ]; then
|
| 1078 |
franck |
347 |
echo "The MultiGateway is not activated !"
|
|
|
348 |
exit 0
|
| 1068 |
franck |
349 |
fi
|
| 2454 |
tom.houday |
350 |
PARAM="add"
|
|
|
351 |
create_eth
|
|
|
352 |
ip route flush cache
|
|
|
353 |
if [ $FAILOVER -eq 0 ]; then
|
| 1078 |
franck |
354 |
echo "The MultiWAN Mode is actived but not failover connectivity !"
|
|
|
355 |
exit 0
|
|
|
356 |
fi
|
| 2454 |
tom.houday |
357 |
echo "Starting down $prog: "
|
|
|
358 |
pid=`pidof -x "alcasar-load_balancing.sh"`
|
|
|
359 |
if [ $pid != "" ]; then
|
|
|
360 |
echo $pid > $pidfile
|
|
|
361 |
fi
|
|
|
362 |
touch /var/lock/subsys/alcasar-load_balancing
|
|
|
363 |
failover
|
| 1068 |
franck |
364 |
;;
|
| 2454 |
tom.houday |
365 |
stop)
|
| 1068 |
franck |
366 |
PARAM="del"
|
| 1078 |
franck |
367 |
echo "Shutting down $prog: "
|
| 2454 |
tom.houday |
368 |
if [ -f $pidfile ]; then
|
|
|
369 |
pid=`cat $pidfile`
|
|
|
370 |
kill -9 $pid
|
|
|
371 |
else
|
|
|
372 |
echo "$prog is not running."
|
|
|
373 |
exit 1
|
|
|
374 |
fi
|
|
|
375 |
RETVAL=$?
|
|
|
376 |
echo
|
|
|
377 |
[ $RETVAL -eq 0 ] && rm -f $pidfile && rm -f /var/lock/subsys/alcasar-load_balancing
|
|
|
378 |
echo "Delete of virtual interfaces"
|
|
|
379 |
delete_eth
|
|
|
380 |
echo "Network restart"
|
|
|
381 |
service network restart 2>&1 > /dev/null
|
|
|
382 |
ip route
|
|
|
383 |
|
| 1068 |
franck |
384 |
;;
|
| 1078 |
franck |
385 |
status)
|
| 2454 |
tom.houday |
386 |
echo "Checking $prog : "
|
|
|
387 |
if [ -f $pidfile ]; then
|
|
|
388 |
pid=`cat $pidfile`
|
|
|
389 |
CHECK=`ps -p $pid --no-heading | awk {'printf $1'}`
|
|
|
390 |
if [ "$CHECK" = "" ]; then
|
|
|
391 |
echo "$prog is NOT running."
|
|
|
392 |
else
|
|
|
393 |
echo "$prog is running !"
|
|
|
394 |
fi
|
|
|
395 |
else
|
|
|
396 |
echo "$prog is Not running."
|
|
|
397 |
fi
|
| 1078 |
franck |
398 |
;;
|
| 2454 |
tom.houday |
399 |
fail)
|
|
|
400 |
failover
|
| 1078 |
franck |
401 |
;;
|
| 2454 |
tom.houday |
402 |
*)
|
| 1078 |
franck |
403 |
echo "Usage: $0 [start|stop|status|create|delete]" ; echo ; exit 1
|
| 1068 |
franck |
404 |
;;
|
|
|
405 |
esac
|
|
|
406 |
|
|
|
407 |
exit 0
|