Bonding
Os habeis encontrado muchas veces con maquinas con varias tarjetas de red en una maquina Linux? Y os gustaria que si se cae el switch al que estais conectados podais seguir trabajando automaticamente y que sea el SOp el que se encargue de enrutar el trafico a traves de otra ethernet? Bueno a lo de seguir currando quizas hayais respondido que no. Pero si fuera un server y os ahorrarais una llamada, ¿verdad que entonces si que interesaria que el server siguiera currando?
O quizas os gustaria aprovechar las 4 tarjetas que tienes ese nuevo servidor para subir de 1G hasta 4G la velocidad?
Todo esto y mucho mas lo puedes conseguir con el modulo de Bonding que ya esta dentro de tu distribucion favorita. Casi seguro que esta vaya. Las mas importantes ya lo traen de serie, solo tienes que configurar un par de ficheritos y escoger como van a funcionar tus eth’s.
A continuacion os pongo un pequeño tutorial de como configurar esto para una SLES10SP1. Aunque con algunos detalles menores se puede montar en cualquier Linux. … A disfrutar de todas tus eth’s.
Requisitos previos
Si trabajamos con SLES10 SP1 el soporte de bonding viene incluido en el kernel de serie. Con lo que para activarlo solo es necesario el configurar correctamente las tarjetas para tener funcionando la tolerancia a fallos por caída de alguna tarjeta de red. Podemos pasar al punto 3 del documento directamente.
De todas maneras no estaría mal hacer alguna comprobación previa para asegurarnos que no tendremos problemas a nivel de kernel.
Modulo compilado y compatible para el kernel actual.
La versión actual del modulo se encuentra en el directorio ./drivers/net/bonding/ del kernel que estemos usando en la maquina.
Si se ha recompilado el kernel o se ha instalado una versión diferente de la que viene con SLES10SP1 se debera comprobar que esta activado el soporte de bonding en ese kernel.
NOTA: El parche de Proliant Support Pack de HP para linux no modifica el soporte de bonding de la SLES10SP1. Por lo que no es necesaria ninguna accion despues de instalarlo.
Si el soporte de bonding no estuviera incluido en el kernel se deberia seguir el proceso estandar de recompilacion del kernel incluyendo el soporte para “Bonding driver support” en la seccion “Network device support” como modulo para poder modificar las opciones que se le pasan al cargarlo poder cargar mas de un dispositivo bonding.
Instalación de ifenslave
ifenslave es la utilidad de control del modulo bonding. Al igual que el modulo debemos usar la versión correspondiente al kernel que estemos usando en este momento.
El fuente de la correcta actual se encuentra en ./Documentation/networking/ifenslave.c Y el binario en /sbin/ifenslave
Si necesitamos compilar el fuente para asegurar que la version se corresponde con el núcleo debemos lanzar:
# gcc -Wall -O -I/usr/src/linux/include ifenslave.c -o ifenslave
Y despues copiar el binario en /sbin/
# cp ifenslave /sbin/ifenslave
Comprobación final
Si todo lo anterior es correcto, deberíamos comprobar también que en el procedimiento de ifup tenemos soporte para ifenslave.
#grep ifenslave /sbin/ifup
Lo que nos devolverá alguna linea conteniendo “ifenslave”, como comprobación de que ya tenemos preparados los script de red también.
Opciones del driver
Se puede configurar el driver de diversas maneras para adaptarlo a nuestras necesidades particulares.
arp_interval
arp_ip_target
downdelay
lacp_rate
max_bonds
miimon
mode
Specifies one of the bonding policies. The default is
balance-rr (round robin). Possible values are:
balance-rr or 0
active-backup or 1
balance-xor or 2
broadcast or 3
802.3ad or 4
balance-tlb or 5
balance-alb or 6
…
Para conocer todas las opciones y sus detalles mejor mirad la doc de vuestras distro. ;)
Configuración de los interfaces de red
SLES10 SP1 utiliza el paquete sysconfig para configurar los interfaces de red, según podemos comprobar con
#rpm -qf /sbin/ifup
sysconfig-0.50.9-13.25
por lo que las opciones de configuración de las tarjetas de red se especificarán para este paquete.
En la carpeta de configuracion de la red deberiamos tener algo parecido a lo siguiente:
#cd /etc/sysconfig/network
#ls -la
drwxr-xr-x 7 root root 4096 Dec 5 18:06 ./
drwxr-xr-x 6 root root 4096 Dec 9 08:35 ../
-rw-r–r– 1 root root 9254 Dec 5 17:37 config
-rw-r–r– 1 root root 6736 Dec 5 18:04 dhcp
drwxr-xr-x 2 root root 4096 Dec 5 17:41 if-down.d/
drwxr-xr-x 2 root root 4096 Dec 5 17:41 if-up.d/
-rw-r–r– 1 root root 293 Dec 5 18:06 ifcfg-eth-id-00:17:a4:a7:18:6a
-rw-r–r– 1 root root 141 May 4 2007 ifcfg-lo
-rw-r–r– 1 root root 27470 May 4 2007 ifcfg.template
-rw-r–r– 1 root root 239 May 4 2007 ifroute-lo
drwxr-xr-x 2 root root 4096 Dec 5 17:37 ifservices.template/
drwx—— 2 root root 4096 May 3 2007 providers/
-rw-r–r– 1 root root 28 Dec 5 18:06 routes
drwxr-xr-x 2 root root 4096 Dec 5 17:41 scripts/
El fichero ifcfg-eth-id-00:17:a4:a7:18:6a es el que contiene la configuración actual de la red. Correspondiendo el nombre con la MAC de la tarjeta, 00:17:a4:a7:18:6a.
La configuración estandar para una maquina con IP fija es algo como lo siguiente (con una sola tarjeta configurada):
#cat ifcfg-eth-id-00:17:a4:a7:18:6a
BOOTPROTO=’static’
BROADCAST=”
ETHTOOL_OPTIONS=”
IPADDR=’10.10.10.46′
MTU=”
NAME=’Compaq NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T)’
NETMASK=’255.255.255.0′
NETWORK=”
REMOTE_IPADDR=”
STARTMODE=’auto’
UNIQUE=’rBUF.5dU8kR7eh2C’
USERCONTROL=’no’
_nm_name=’bus-pci-0000:00:11.0′
IMPORTANTE: Para poder configurar correctamente el bonding debemos asegurarnos que las tarjetas fisicas tengan el nombre eth-id-<MAC> No es recomendable el ethN, asi como tampoco la denominacion bus-pci-xxxxxxx.
Para configurar el bonding debemos tener una tarjeta virtual bond0 en /etc/sysconfig/network
Las tarjetas fisicas ifcfg-eth-id-xx:xx:xx:xx:xx:xx quedan por ‘debajo’ a nivel logico y es bond0 quien las controla y quien tiene los parametros de configuracion de la red que queramos. Las tarjetas fisicas quedan como slaves de la bond0.
La tarjeta fisica ifcfg-eth-id-00:50:56:ac:18:9d queda configurada solamente con las opciones siguientes:
BOOTPROTO=’none’
STARTMODE=’off’
UNIQUE=’rBUF.5dU8kR7eh2C’
_nm_name=’bus-pci-0000:00:11.0′
Donde “UNIQUE” y “_nm_name” conservan los valores antiguos. Y el resto de opciones desaparecen de la configuración.
Una segunda tarjeta física ifcfg-eth-id-00:50:56:ac:3c:ed queda con la siguiente configuración:
BOOTPROTO=’none’
STARTMODE=’off’
UNIQUE=’JNkJ.5dU8kR7eh2C’
_nm_name=’bus-pci-0000:00:12.0′
Y la tarjeta virtual de bonding queda configurada con IP fija, las dos tarjetas físicas como esclavas, enviando el trafico por solo una tarjeta física de todas las disponibles y con tolerancia a fallos ante caídas de una de ellas, … de la siguiente forma:
#vi ifcfg-bond0
BOOTPROTO=’static’
BROADCAST=”
IPADDR=’10.10.10.46′
NETMASK=’255.255.255.0′
NETWORK=”
REMOTE_IPADDR=”
STARTMODE=’auto’
BONDING_master=’yes’
BONDING_MODULE_OPTS=’mode=active-backup miimon=100′
BONDING_SLAVE0=’eth-id-00:50:56:ac:18:9d’
BONDING_MASTER=’yes’
ETHTOOL_OPTIONS=”
MTU=”
NAME=”
USERCONTROL=’no’
BONDING_SLAVE1=’eth-id-00:50:56:ac:3c:ed’
En BONDING_MODULE_OPTS le decimos como queremos configurar el modo de funcionamiento de las tarjetas “mode=active-backup” y cada cuanto debe comprobar que tarjeta esta activa y realizar el switch si fuera necesario “miimon=100”.
NOTA: Para tener mas opciones de configuración revisar el punto 2 del documento.
Para comprobar que la configuracion actual funciona deberiamos cargar el modulo de bonding en el nucleo
#modprobe bonding
y reiniciar el servicio de red para activar la nueva configuración
#/etc/init.d/network restart
Con esta configuración al realizar el reinicio de la maquina, el modulo de bonding y la configuración de bond0 se carga desde el inicio. No siendo necesaria ninguna acción por nuestra parte.
Documentación de referencia
La documentación para la configuración del BONDING se ha extraído de:
-
http://www.linuxfoundation.org para las opciones generales.
-
y del directorio /usr/src/linux-2.6.16.46-0.12/Documentation/networking/bonding.txt de una SLES10SP1 para las particularidades de la distribución.
If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.

Fantástico!!!!