Balanceig de càrrega entre 2 ADSL
De Wiki Linkat
Línia 1: | Línia 1: | ||
- | '''Balanceig de càrrega entre 2 (o més) routers:''' | + | '''Balanceig de càrrega entre 2 (o més) routers:''' |
- | [[ | + | [[Image:Load balance.jpg|91x104px]] |
- | |||
- | + | 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'''): | |
- | L'script | + | 1- L'script '''load-balance''': |
- | <pre> | + | L'script que es mostra a continuació cal copiar-lo al directori '''/etc/init.d''' |
- | cp load-balance /etc/init.d/load-balance | + | <pre>cp load-balance /etc/init.d/load-balance |
- | </pre> | + | </pre> |
+ | i s'habilita per tal que s'iniciï en el moment de posar en marxa la màquina: | ||
+ | <pre>insserv /etc/init.d/load-balance | ||
+ | </pre> | ||
+ | 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. | ||
- | + | <br> '''SCRIPT load-balance:''' | |
- | + | <pre>#!/bin/bash | |
- | < | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | '''SCRIPT load-balance:''' | + | |
- | <pre> | + | |
- | #!/bin/bash | + | |
# Autor: Victor Carceler | # Autor: Victor Carceler | ||
# | # | ||
Línia 63: | Línia 56: | ||
NUM_ADSL=`cat $RT_TABLES | grep -e XTEC -e EXT | wc -l` | NUM_ADSL=`cat $RT_TABLES | grep -e XTEC -e EXT | wc -l` | ||
- | if [ ! $NUM_ADSL -ge 2 ]; then | + | if [ ! $NUM_ADSL -ge 2 ]; then |
- | echo "1 XTEC" | + | echo "1 XTEC" >> $RT_TABLES |
- | echo "2 EXT1" | + | echo "2 EXT1" >> $RT_TABLES |
- | echo "3 EXT2" | + | echo "3 EXT2" >> $RT_TABLES |
- | echo "4 EXT3" | + | echo "4 EXT3" >> $RT_TABLES |
- | echo "5 EXT4" | + | echo "5 EXT4" >> $RT_TABLES |
# Per protegir duplicats | # Per protegir duplicats | ||
- | cat $RT_TABLES | uniq | + | cat $RT_TABLES | uniq > $RT_TABLES.tmp |
mv $RT_TABLES.tmp $RT_TABLES | mv $RT_TABLES.tmp $RT_TABLES | ||
fi | fi | ||
Línia 109: | Línia 102: | ||
sleep 2 | sleep 2 | ||
- | nohup /etc/sysconfig/network/load-balance.control.sh & | + | nohup /etc/sysconfig/network/load-balance.control.sh & > /dev/null 2>&1 |
- | </pre> | + | </pre> |
- | + | 2- L'script '''load-balance.control.sh''': | |
- | 2- L'script '''load-balance.control.sh''': | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ''' | + | Aquest script es copia al directori '''/etc/sysconfig/network''' |
+ | <pre>cp load-balance.control.sh /etc/sysconfig/network/load-balance.control.sh | ||
+ | </pre> | ||
+ | i els seus permisos han de ser 700: | ||
+ | <pre>chmod 700 load-balance.control.sh | ||
+ | </pre> | ||
+ | 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. | ||
- | < | + | <br> '''SCRIPT load-balance.control.sh:''' |
- | #!/bin/bash | + | <pre>#!/bin/bash |
# | # | ||
# Autor: Victor Carceler | # Autor: Victor Carceler | ||
Línia 175: | Línia 158: | ||
for x in `seq 0 1 $N_GATEWAYS` | for x in `seq 0 1 $N_GATEWAYS` | ||
do | do | ||
- | ping -W $PINGTIMEOUT -I ${GATEWAY_PING_SRC[$x]} -c 1 $TESTIP | + | ping -W $PINGTIMEOUT -I ${GATEWAY_PING_SRC[$x]} -c 1 $TESTIP >/dev/null 2>/dev/null |
RETVAL=$? | RETVAL=$? | ||
Línia 186: | Línia 169: | ||
done | done | ||
- | if [ "$last_hopes" != "$hopes" ] | + | if [ "$last_hopes" != "$hopes" ] |
then | then | ||
logger "$PROGNAME: Cambiamos la ruta por defecto a: $hopes" | logger "$PROGNAME: Cambiamos la ruta por defecto a: $hopes" |
Revisió de 23:00, 15 jul 2009
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=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