Balanceig de càrrega entre 2 ADSL
De Wiki Linkat
Balanceig de càrrega entre 2 (o més) routers:
En molts casos, les connexions a Internet poden ser poc fiables o bé no proporcionar prou ample de banda. Una forma d'incrementar la fiabilitat i l'ample de banda és distribuir la càrrega (el balanceig de càrrega) a través de múltiples connexions. És convenient també disposar de sistemes tolerants a errors que siguin transparent a l'administrador.
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.
La proposta de balanceig de càrrega que es proposa consta de 2 scripts (load-balance i load-balance.control.sh):
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 # Autor: Victor Carceler # # Licencia: GPL v3 o posterior # # 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 Balanceador de Carga 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 # # IP1: IP associada a eth0 # IP2: IP associada a eth1 # GTW1: Porta de sortida 1 associada a l'eth0 # GTW2: Porta de sortida 1 associada a l'eth1 # XARXA1: Subxarxa 1 associada a l'eth0 # XARXA2: Subxarxa 1 associada a l'eth1 # IP1=192.168.0.33 IP2=192.168.1.33 GTW1=192.168.0.1 GTW2=192.168.1.1 XARXA1=192.168.0.0 XARXA2=192.168.1.0 # IPs para monitorizar routers ifconfig eth0 $IP1 up ifconfig eth1 $IP2 up # Inicializamos las tablas para los dos enlaces ip route add $XARXA1/24 dev eth0 table XTEC ip route add default via $GTW1 table XTEC ip route add $XARXA2/24 dev eth1 table EXT1 ip route add default via $GTW2 table EXT1 # Reglas para la selección de tablas ip rule add from $IP1 table XTEC ip rule add from $IP2 table EXT1 # Regla por defecto ip route replace default scope global nexthop via $GTW1 weight 1 nexthop via $GTW2 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
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: IP objectiu que s'utilitza per saber si han caigut els gateways # 213.176.161.13 es la IP associada a: www.xtec.cat # TESTIP=213.176.161.13 PINGTIMEOUT=2 # # IPs i portes de sortida del balancejador # IP1=192.168.0.33 IP2=192.168.1.33 GTW1=192.168.0.1 GTW2=192.168.1.1 GATEWAY_PING_SRC=($IP1 $IP2) GATEWAY_LIST=($GTW1 $GTW2) GATEWAY_WEIGHT_LIST=(1 1) SLEEP=60 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