El Bonding es una técnica que consiste, básicamente, en configurar dos tarjetas de red con la misma IP. Al hacer esto, conseguimos que ambas tarjetas trabajen como una sola produciendo redundancia con balanceo de carga y tolerancia a fallos en la interface. Es posible hacerlo con más tarjetas, pero yo personalmente no lo he probado.
Este documento lo he desarrollado conforme a una instalación de openSUSE Linux 10.2 sobre un servidor IBM Netfinity 5100 type 8658-21Y, con dos tarjetas de red: la primera es la que trae el equipo de fábrica integrada en la placa madre y la segunda es una Intel PRO/1000 MT Server Adapter.
También lo probé, anteriormente, con openSUSE Linux 10.0 sobre servidor un IBM eServer xSeries 206 type 8482-3MG, con dos tarjetas de red: la primera es la que trae el equipo de fábrica integrada en la placa madre (IBM 82547GI Gigabit Ethernet Controller) y la segunda es una Intel PRO/1000 MT Server Adapter (módulo e1000 del kernel, la misma que usé en la instalación referenciada en el párrafo anterior).
En ambas instalaciones ha funcionado perfectamente, tanto al iniciarse los equipos como en tiempo de ejecución (no han dado ningún tipo de problema).
Para hacer bonding con dichas tarjetas y que se active durante el arranque, al ser un kernel que usa “sysconfig” hay que hacer los siguientes pasos:
1.- El kernel debe soportar “bonding” (compilar el kernel o mediante módulos del kernel). En la instalación no tuve que hacer nada especial y el kernel se instaló con soporte para bonding por defecto. Partí de una instalación con “sistema gráfico mínimo sin KDE” añadiéndole “Herramientas de Desarrollo y Compilación” y algunos paquetes que no vienen al caso.
2.- Editamos el fichero “/etc/modprobe.conf.local” y añadimos las siguientes líneas:
- alias bond0 bonding
- options bond0 mode=modo miimon=100
- install bond0 /sbin/modprobe bonding –o bond0 mode=modo miimon=100
Nota: mode=modo debe corresponderse con los modos aceptados por el “bonding”:
- mode=0 o mode=balance-rr: Configura una política de round-robin para la tolerancia de fallas y balanceo de cargas. Las transmisiones son recibidas y enviadas secuencialmente en cada interfaz esclava vinculada comenzando con la primera disponible.
- mode=1 o mode=balance-xor : Configura una política de respaldo activa para la tolerancia de fallas. Las transmisiones son recibidas y enviadas a través de la primera interfaz esclava vinculada disponible. Sólo se utiliza otra interfaz esclava vinculada si la interfaz esclava activa falla.
- mode=2 o mode=balance-xor: Configura una política XOR (o-exclusivo) para la tolerancia de fallas y el balanceo de cargas. Usando este método la interfaz coincide la dirección MAC de las peticiones entrantes con la dirección MAC de una de las NICs esclava. Una vez que se establece el enlace, las transmisiones son enviadas secuencialmente comenzando con la primera interfaz disponible.
- mode=3 o mode=broadcast: Configura una política de difusión para la tolerancia de fallas. Las transmisiones son enviadas en todas las interfaces esclavas.
- mode=4 o mode=802.3ad: Configura una política de agregación de enlace dinámico IEEE 802.3ad. Crea grupos de agregación que comparten las mismas especificaciones de velocidad y duplex. Transmite y recibe en todos los esclavos en el agregador activo. Requiere de un switch que sea conforme con 802.3ad.
- mode=5 o mode=balace-tbl: Configura una política de balanceo de carga de transmisión (Transmit Load Balancing, TLB) para la tolerancia de fallas y el balanceo de cargas. El tráfico saliente es distribuido de acuerdo a la carga actual en cada interfaz esclava. El esclavo actual recibe el tráfico entrante. Si el eslavo receptor falla, otro esclavo toma la dirección MAC del esclavo fallido.
- mode=6 o mode=balance-alb: Configura una política de balanceo de cargas activa (Active Load Balancing, ALB) para la tolerancia de fallas y el balanceo de cargas. Incluye el balanceo de cargas de transmisión y recepción para el tráfico IPV4. Se logra el balanceo de las cargas recibidas a través de la negociación ARP.
miimon= — Especifica (en milisegundos) la frecuencia en que ocurre la supervisión MII. Esto es útil si se requiere gran disponibilidad porque MII es utilizado para verificar que la NIC está activa.
Para verificar que el controlador para un NIC particular es compatible con la herramienta MII, escriba el comando siguiente como root:
ethtool <interfaz_red> | grep “Link detected:”
Si se soporta MII, el comando devuelve:
Link detected: yes
Grabamos los cambios.
3.- Se configuran ambas tarjetas, mediante “yast”, con “DHCP” para que genere los ficheros “ifcgf-eth-id-xx:xx:xx:xx:xx:xx” (uno por cada tarjeta de red). Anotamos las líneas _nm_name=’bus-pci-xxxx:xx:xx.x” de cada fichero (por ejemplo: para la eth0 “bus-pci-0000:02:01.0” y para la eth1 “bus-pci-0000:03:01.0”; en mi caso).
4.- En el directorio “/etc/sysconfig/network”, creamos un directorio (por ejemplo “copia”) y copiamos los dos ficheros “ifcfg-eth-id-xx:xx:xx:xx:xx:xx” que se han generado en el paso anterior. Esto es sólo como copia de respaldo y si se quiere hacer, puesto que se pueden volver a generar borrándolos y entrando de nuevo en el yast (paso 3).
5.- Copiamos el fichero “ifcfg-eth-id-xx:xx:xx:xx:xx:xx” (que se corresponde con la tarjeta “eth0”, que es la IBM 82547GI) con el comando “cp ifcfg-eth-id-xx:xx:xx:xx:xx:xx ifcfg-bond0”, que es el que usaremos para crear la interfaz del bonding. Posteriormente borramos ambos "ifcfg-eth-id-.....".
6.- Editamos el fichero “ifcfg-bond0” y vemos que el contenido es similar al siguiente:
BOOTPROTO=’dhcp’
BROADCAST=’’
IPADDR=’’
MTU=’’
NETMASK=’’
NETWORK=’’
REMOTE_IPADDR=’’
STARTMODE=’auto’
UNIQUE=’rBUF.qW72CX+fPoA’
_nm_name=’bus-pci-0000:02:01.1’
USERCONTROL=’no’
7.- Hacemos los siguientes cambios:
BOOTPROTO=’static’
BROADCAST=’192.168.1.255’
IPADDR=’192.168.1.40’
MTU=’’
NETMASK=’255.255.255.0’
NETWORK=’192.168.1.0’
REMOTE_IPADDR=’’
START_MODE=’onboot’
BONDING_MASTER=’yes’
UNIQUE=’rBUF.qW72CX+fPoA’
_nm_name=’bus-pci-0000:02:01.1’
BONDING_SLAVE0=’bus-pci-0000:02:01.1’
BONDING_SLAVE1=’bus-pci-0000:03:01.1’
BONDING_MODULE_OPTS=’mode=modo miimon=100 use_carrier=0’
NOTA: En negrita están marcados los cambios y en itálica las líneas añadidas a mano. Las opciones de BONDING_MODULE_OPTS deben corresponderse con las líneas añadidas al "modprobe.conf.local" del punto 2 de este artículo, tanto para "mode" como para "miimon".
Las líneas BROADCAST, IPADDR y NETWORK debes adaptarla a las IP’s de tu red en caso de que no coincidan con las aquí mostradas. El contenido de BONDING_SLAVE... no se debe copiar literalmente de éste artículo, sino conservar el que genere tu sistema.
8.- Una vez hechos los cambios, los grabamos y copiamos el fichero en el directorio “copia” y borramos los ficheros “ifcfg-eth-id-xx:xx:xx:xx:xx:xx” que se generaron por el “yast” para ambas tarjetas de red.
9.- Reiniciamos el equipo para que active los cambios y observamos que se ejecuta todo correctamente; hay veces que en el arranque se ve que falla el servicio “network”, pero si entramos como “root” y ejecutamos el comando “ifconfig” y sale aproximadamente lo siguiente:
bond0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
       inet addr:192.168.1.40 Bcast:192.168.1.255 Mask:255.255.255.0
       inet6 addr: xx::xxx:xxxx:xxxx:xxx/xx Scope:Link
       UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
       RX packets:xxxx errors:0 dropped:0 overruns:0 frame:0
       TX packets:xxxx errors:0 dropped:0 overruns:0 carrier:0
       collisions:xx txqueuelen:0
       RX bytes:xxxxxxxx (xxx.x Kb) TX bytes:xxxxxx (xxx.x Kb)
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
       inet6 addr: xx::xxx:xxxx:xxxx:xxx/xx Scope:Link
       UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
       RX packets:xxxx errors:0 dropped:0 overruns:0 frame:0
       TX packets:xxxx errors:0 dropped:0 overruns:0 carrier:0
       collisions:xx txqueuelen:0
       RX bytes:xxxxxxxx (xxx.x Kb) TX bytes:xxxxxx (xxx.x Kb)
       Base address:XxXXXX Memory:xxxxxxxx-xxxxxxxx
eth1 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
       inet6 addr: xx::xxx:xxxx:xxxx:xxx/xx Scope:Link
       UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
       RX packets:xxxx errors:0 dropped:0 overruns:0 frame:0
       TX packets:xxxx errors:0 dropped:0 overruns:0 carrier:0
       collisions:xx txqueuelen:0
       RX bytes:xxxxxxxx (xxx.x Kb) TX bytes:xxxxxx (xxx.x Kb)
       Base address:XxXXXX Memory:xxxxxxxx-xxxxxxxx
lo    Link encap:Local Loopback
       inet addr:127.0.0.1 Mask:255.0.0.0
       inet6 addr: ::x/xx Scope:Host
       UP LOOPBACK RUNNING MTU:16436 Metric:1
       RX packets:xxxx errors:0 dropped:0 overruns:0 frame:0
       TX packets:xxxx errors:0 dropped:0 overruns:0 carrier:0
       collisions:xx txqueuelen:0
       RX bytes:xxxxxxxx (xxx.x Kb) TX bytes:xxxxxx (xxx.x Kb)
quiere decir que todo está correcto y se ha levantado el “bonding” sin problema.
Si el enrutamiento está bien configurado y ejecutamos el comando “route –n” nos debe salir aproximadamente lo siguiente (192.168.1.X se corresponde con la IP de nuestra puerta de enlace de salida al exterior, como por ejemplo Internet; o con el router que nos comunica con el resto de las subredes de la WAN):
Kernel IP routing table
Destination     Gateway       Genmask         Flags     Metric     Ref     Use     Iface
192.168.1.0     0.0.0.0         255.255.255.0  U           0             0        0        bond0
127.0.0.0        0.0.0.0         255.0.0.0         U           0             0        0         lo
0.0.0.0           192.168.1.X    0.0.0.0           UG         0            0         0         bond0

No hay comentarios:

Publicar un comentario