
El balanceig de càrrega no incrementa la velocitat per a una única connexió sinó que és efectiu quan es realitzen a través de múltiples connexions.
1- L'script load-balance:
L'script que es mostra a continuació cal copiar-lo al directori /etc/init.d
cp load-balance /etc/init.d/load-balance
i s'habilita per tal que s'iniciï en el moment de posar en marxa la màquina:
insserv /etc/init.d/load-balance
L'script presuposa que l'ordinador disposa de 2 ethernets (eth0 i eth1) amb les IPs següent: 192.168.0.33 i 192.168.1.33 (es poden adaptar a les necessitats de cada centre). A banda, l'script presuposa que els routers ADSL tenen com a IP: 192.168.0.1 i 192.168.1.1. Tots aquests valors s'han de modificar per tal que s'ajustin a les característiques del centre.
SCRIPT load-balance:
#!/bin/bash
#
# El propósito de este script es:
#
# - Agregar una IP para monitorizar cada router
# - Inicializar las tablas corresponientes a los routers (deben haberse
# definido en /etc/iproute2/rt_tables previamente). Cada tabla tendrá la
# ruta necesaria para alcanzar al router y la ruta por defecto
# - Agregar reglas para utilizar la tabla correspondiente en función
# de la dirección de origen del paquete (una de las IPs del primer punto)
# - Fijar como ruta por defecto una ruta multihop utilizando todos los
# routers
### BEGIN INIT INFO
# Provides: load_balance
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Balancejador de Càrrega entre 2 ADSLs
# Description: Arrencar el Balancejador de Càrrega
entre 2 ADSLs
### END INIT INFO
# CONTINGUT /etc/iproute2/rt_tables
#1 XTEC
#2 EXT1
#../.. EXT
#N EXTN
RT_TABLES=/etc/iproute2/rt_tables
NUM_ADSL=`cat $RT_TABLES | grep -e XTEC -e EXT | wc -l`
if [ ! $NUM_ADSL -ge 2 ]; then
echo "1 XTEC" >> $RT_TABLES
echo "2 EXT1" >> $RT_TABLES
echo "3 EXT2" >> $RT_TABLES
echo "4 EXT3" >> $RT_TABLES
echo "5 EXT4" >> $RT_TABLES
# Per protegir duplicats
cat $RT_TABLES | uniq > $RT_TABLES.tmp
mv $RT_TABLES.tmp $RT_TABLES
fi
# IPs para monitorizar routers
ifconfig eth0 192.168.0.33 up
ifconfig eth1 192.168.1.33 up
# Inicializamos las tablas para los dos enlaces
ip route add 192.168.0.0/24 dev eth0 table XTEC
ip route add default via 192.168.0.1 table XTEC
ip route add 192.168.1.0/24 dev eth1 table EXT1
ip route add default via 192.168.1.1 table EXT1
# Reglas para la selección de tablas
ip rule add from 192.168.0.33 table XTEC
ip rule add from 192.168.1.33 table EXT1
# Regla por defecto
ip route replace default scope global nexthop via 192.168.0.1 weight 1
nexthop via 192.168.1.1 weight 1
sleep 2
nohup /etc/sysconfig/network/load-balance.control.sh & > /dev/null 2>&1
2- L'script load-balance.control.sh:
Aquest script es copia al directori /etc/sysconfig/network:
cp load-balance.control.sh /etc/sysconfig/network/load-balance.control.sh
i els seus permisos han de ser 700 (chmod 700 load-balance.control.sh)
cp load-balance.control.sh /etc/sysconfig/network/load-balance.control.sh
i els seus permisos han de ser 700 (chmod 700 load-balance.control.sh)
El funcionament de l'script es basa en la utilització d'una IP objectiu que és la que es fa servir per comprovar la connectivitat a Internet, en aquest cas la IP és la: 213.176.161.13 que correspon al servidor www.xtec.cat.
SCRIPT load-balance.control.sh:
#!/bin/bash
#
# Autor: Victor Carceler
#
# Licencia: GPLv3 o posterior
#
# Función:
#
# Monitorizar el estado de los diferentes enlaces y dar de baja/alta
# routers en la ruta por defecto de forma dinámica
PROGNAME=`basename $0`
TESTIP=213.176.161.13
PINGTIMEOUT=2
GATEWAY_PING_SRC=(192.168.0.33 192.168.1.33)
GATEWAY_LIST=(192.168.0.1 192.168.1.1)
GATEWAY_WEIGHT_LIST=(1 1)
SLEEP=5
N_GATEWAYS=`echo ${GATEWAY_LIST[@]} | wc -w`
N_GATEWAYS=`expr $N_GATEWAYS - 1`
last_hopes=""
while true
do
hopes=""
for x in `seq 0 1 $N_GATEWAYS`
do
ping -W $PINGTIMEOUT -I ${GATEWAY_PING_SRC[$x]} -c 1 $TESTIP /dev/null 2>/dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]
then
hopes="$hopes nexthop via ${GATEWAY_LIST[$x]} weight
${GATEWAY_WEIGHT_LIST[$x]}"
fi
done
if [ "$last_hopes" != "$hopes" ]
then
logger "$PROGNAME: Cambiamos la ruta por defecto a: $hopes"
logger "$PROGNAME: Valor anterior: $last_hopes"
logger "$PROGNAME: ip route replace default scope global $hopes"
ip route replace default scope global $hopes
last_hopes=$hopes
fi
sleep $SLEEP
done
logger "$PROGNAME: ip route replace default scope global $hopes"
ip route replace default scope global $hopes
last_hopes=$hopes
fi
sleep $SLEEP
done
Cap comentari:
Publica un comentari a l'entrada