Bonding: multiplicando la velocidad del Ethernet

[Visto: 17144 veces]

En ésta oportunidad les contaré acerca de la técnica llamada Bonding. En ambientes LAN donde se necesita un servidor que deba soportar transferencias de grandes volumenes de datos (por ejemplo un servidor de archivos desde donde se descargan instaladores o donde todos hacen backups diarios o servidores de video streaming) muchas veces nos queda corta la velocidad de la tarjeta de red, asi conectemos nuestro servidor a un switch.

Lo más común es el uso de las tarjetas Fast Ethernet (100 Mbps). Una opción entonces es pasar a una tarjeta Gigabit Ethernet, aunque eso implica por supuesto que nuestro switch también lo soporte y ya hablamos de precios mayores. Otra opción más económica es ponerle entonces dos (o más) tarjetas Fast Ethernet, sin embargo esto no sirve si tenemos todas las tarjetas en la misma red, es decir, con IP’s de la misma red pues normalmente el sistema operativo (sea Window$ o Linux) escoge una tarjeta por defecto, no existe un balance de tráfico y casi la totalidad del mismo pasará por sólo una tarjeta. Una posible mejora sería entonces que cada tarjeta esté en una red distinta, pero esto no siempre está disponible además de complicarse innecesariamente la estructura de ruteo de la organización con resultados finales tampoco óptimos.

Es aquí cuando hace su aparición entonces la técnica de Bonding, ¿en que consiste?, pues en hacer trabajar varias tarjetas de red como si fueran una sola, esto significa que incluso todas comparten la misma dirección MAC, dirección MAC que se extrae de una de las tarjetas. El resultado final es un aumento de la velocidad bastante considerable, y si usamos IP’s públicos pues basta sólo uno. En el caso de dos tarjetas de red la velocidad final no puedo decir que crece a un 200%, pero fácilmente llegamos a un 180%. He tenido la oportunidad de poder configurar éste tipo de driver en Linux con resultados realmente sorprendentes, los tiempos de transmisión se reducen a valores cercanos a la mitad y la cantidad de datos transmitidos en cada tarjeta de red están perfectamente balanceados operando alternadamente. En particular he usado el Bonding en el modo 0, llamado Round-Robin, que permite balanceo de tráfico y redundancia (si falla una tarjeta de red el sistema sigue trabajando), pero existen hasta 6 modos distintos de operar el Bonding. Si vamos a usar el equipo con un switch es tambien necesario que los puertos implicados soporten el protocolo 802.3ad (Dynamic Link Aggregation) que en el caso de switches Cisco equivale a la configuracion llamada EtherChannel, caso contrario el switch puede tener fallas al recibir tramas con la misma direccion MAC origen en diversos puertos ocasionando que se bloqueen algunos de ellos.

Información más completa de como configurar el Bonding está entre los docs del kernel 2.4, sin embargo lo pueden ver en éste link:

Les envio mi “micro-how-to” de como activarlo en una distro del tipo Red Hat con 2 tarjetas de red. Previamente el kernel debe haber sido compilado para trabajar con el driver de bonding, si no lo está ejecutar “make menuconfig/xconfig/config” y seleccionar “Bonding driver support” (como módulo) en la sección “Network driver support”. Adicionalmente debemos haber instalado correctamente todas las tarjetas de red (en este caso la eth0 y la eth1) para asegurarnos de su correcto funcionamiento. Una vez configurado el kernel, comprobado el funcionamiento de eth0 y eth1 y, preparado el switch, pasamos a la configuracion:

1. Añadir en /etc/modules.conf (para kernel 2.4) o /etc/modprobe.conf (para kernel 2.6) :

alias bond0 bonding
options bond0 miimon=100 mode=0

2. Crear el archivo ifcfg-bond0 en /etc/sysconfig/network-scripts, asumiendo que nuestro servidor tendrá el IP 192.168.0.1 y máscara 255.255.255.0 :

DEVICE=bond0
IPADDR=192.168.0.1
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

3. Modificar el archivo ifcfg-eth0 en /etc/sysconfig/network-scripts

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

4. Modificar ifcfg-eth1 en /etc/sysconfig/network-scripts

DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

5. Reiniciar la red: “service network restart” o reiniciar la PC si prefieren.

6. Verificar el estado de las tarjetas de red con el comando ifconfig, debe aparecer algo similar a lo siguiente:

bond0 Link encap:Ethernet HWaddr 00:09:6B:89:28:28
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::209:6bff:fe89:2828/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:75698444 errors:0 dropped:0 overruns:0 frame:0
TX packets:71137605 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2329750937 (2.1 GiB) TX bytes:3737122066 (3.4 GiB)

eth0 Link encap:Ethernet HWaddr 00:09:6B:89:28:28
inet6 addr: fe80::209:6bff:fe89:2828/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:37802769 errors:0 dropped:0 overruns:0 frame:0
TX packets:35568803 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1118695876 (1.0 GiB) TX bytes:1868633917 (1.7 GiB)
Base address:0x2500 Memory:f8fe0000-f9000000

eth1 Link encap:Ethernet HWaddr 00:09:6B:89:28:28
inet6 addr: fe80::209:6bff:fe89:2828/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:37895675 errors:0 dropped:0 overruns:0 frame:0
TX packets:35568802 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1211055061 (1.1 GiB) TX bytes:1868488149 (1.7 GiB)
Base address:0x2540 Memory:f8fc0000-f8fe0000

Observar como se define el dispositivo bond0 que agrupa a eth0 y eth1 en una sola MAC 00:09:6B:89:28:28, y como está balanceada la carga, con 1.7GBytes transmitidos en cada tarjeta y casi 1GByte recibidos en cada tarjeta también.

Espero les pueda ser de utilidad la información.

Puntuación: 5.00 / Votos: 6

5 pensamientos en “Bonding: multiplicando la velocidad del Ethernet

  1. rodolfo

    Muchas gracias amigo, voya ver si sirve para conectarme al router de mi casa y a la antena wireless del mcdonals XD, al mismo tiempo

    Muchas, pero mucha gracias 😀

    Responder
  2. Juan

    Una pregunta, tengo un caso dos conexiones ADSL, puedo hacer Bonding entre las dos ethernet y poder tener en mi LAN el doble de la velocidad?

    Muy bueno tu articulo, gracias por tu contribucion a la comunidad de Internet.

    Saludos Cordiales

    Rpta: Gracias por tus comentarios. El bonding lo que hace es que las dos tarjetas de red se vean como una sola, y eso significa con una sola mac y un solo IP. Si ambos enlaces ADSL son del mismo proveedor podría ensayarse un bonding asumiendo que ambas conexiones usan la misma red lo que te da opción a usar un mismo IP por cada enlace.

    Responder
  3. Jose Rodriguez

    Saludos, tengo dos conexiones DSL, mi pregunta es, si tengo dos modem-router y en el articulo solo se especifica una ip fija para el bond0 (192.168.0.1), que sucede si cada modem-router DSL tiene un rango de red diferente:

    1 – 2Wire –> 192.168.1.0
    2 – 2Wire –> 192.168.3.0

    Debo dejar esa configuracion o debo hacer modificaciones. De antemano muchisimas gracias por la ayuda!

    Responder
  4. delfin

    hola. tengo dos preguntas: ¿hay mas estandares implicados en el bonding ademas del 802.31ad? ¿cual es el estandar actual?

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *