NIC Bonding/Teaming – Ubuntu Server (ACTUALIZADO A 9.10). Agrupando NICs para balanceo de ISP.

Posted on enero 14, 2008. Filed under: Servicios de sistema, Solucion de problemas y rendimiento |

Esta es una traducción del trabajo realizado por la gente de Howtoforge, este manual es parte de un Howto de “como hacer un servidor de internet” que iré compartiendo aquí en Unix – Linux Tips & Tricks.

Sumario:

Podrán encontrar la versión en Ingles de este Howto aqui: 5dollarwhitebox.org

El concepto de NIC Bonding (o algunas veces llamado NIC Teaming) es lograr que nosotros tengamos dos NICs agrupadas conjuntamente entre si para que estas aparezcan como si fueran el mismo dispositivo físico. Ellas presentaran la misma dirección MAC. Esto es complementado con la utilidad ifenslave, que habilita al kernel para ver/usar solo un dispositivo, mientras se envian paquetes por medio de dos dispositivos esclavos usando un round-robbin scheduler.

Sistema: Ubuntu Server 7.4, Linux 2.6.20-15-server
Modulos Envueltos: bonding, mii, nic_module (e100 en este ejemplo)
Utilidades: ifenslave, mii-tool

Preparacion:

Antes de intentar agrupar dos NICs, es altamente recomendado que verifiques la integridad y funcionalidad de cada una en si misma. Este documento asume que tu haz hecho esto. Usando “mii-tool” podrás ver algo como lo siguiente:

mercurio:/# mii-tool
eth0: negotiated 100baseTx-FD, link ok
eth1: negotiated 100baseTx-FD, link ok

Para que esto funcione, el kernel deberá tener soporte para dispositivos en bonding. Un breve camino para revizar esto puede ser:

mercurio:/#
modprobe –list | grep bonding /lib/modules/2.6.20-15-server/kernel/drivers/net/bonding/bonding.ko

Binary file /lib/modules/2.6.20-15-server/kernel/drivers/net/bonding/bonding.ko
matches

mercurio:/# cat /boot/config-2.6.12.4-vs2.0 | grep -i bonding
CONFIG_BONDING=m

Nosotros usaremos la herramienta mii-tool (modulo mii.o) para monitorear la interfaz por fallas… Sin embargo como la mayoria de los adaptadores de red usan un MII (Media Independant Interface) para autonegociar velocidad de enlace, es buen standard tener esto.

mercurio:/# cat /boot/config-2.6.12.4-vs2.0 | grep -i mii

# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
CONFIG_MII=y

(Si aparece CONFIG_MII=m quiere decir que esta como modulo “esta soportado”, para aquellos que no han compilado kernel antes)

mercurio:/# modprobe –list | grep -i mii
/lib/modules/2.6.20-15-server/kernel/drivers/net/mii.ko

Segundo, necesitaremos instalar la utilidad ifenslave.

mercurio:/# apt-get update && apt-get install ifenslave
………. removida la salida standard (nada interesante)

En esta parte no hay configuración alguna, entonces esto es todo. Ahora estamos listos para los archivos de configuración.

Archivos de Configuracion:

Hay muchas diferentes variaciones de esto, pero por ahora… de esta forma es que lo estoy trabajando.

mercurio:/# vi /etc/modutils/aliases

Agregamos/editamos lo siguiente:

alias bond0 bonding
alias eth0 e100
alias eth1 e100
options bonding mode=0 miimon=100

mercurio:/# vi /etc/modutils/actions

Agregamos/editamos lo siguiente:

probeall bond0 eth0 eth1 bonding

Despues de editar los archivos de configuracion de modprobe necesitaremos correr el comando:

mercurio:/# update-modules

mercurio:/# vi /etc/network/interfaces

Agregamos / editamos lo siguiente:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Bonding interface
auto bond0
 iface bond0 inet static
 address 10.1.100.63 (ip por la que se reconocera el bonding)
 netmask 255.255.255.0 (mascara del bonding)
 hwaddress ether 00:02:B3:48:50:2C (mac que le daremos)
 gateway 10.1.100.1 (gateway)
 up ifenslave bond0 eth0 eth1
 down ifenslave -d bond0 eth0 eth1

Y si vamos a recibir direcciones IP desde un Server DHCP a las interfaces eth0 y eth1, lo hacemos asi:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Bonding interface
auto bond0
iface bond0 inet manual
  post-up ifenslave bond0 eth0 eth1
  post-up dhclient3 -e IF_METRIC=100 -pf /var/run/dhclient.bond0.pid -lf /var/lib/dhcp3/dhclient.bond0.leases bond0
  pre-down ifenslave -d bond0 eth0 eth1

Tu NO configuraras entradas sobre ‘eth0’ o ‘eth1’  fuera de los que estan listados en la entrada del ‘bond0’ (Si hay alguna información de las interfaces las borramos, y dejaremos solo la de lo y la del bond0). Bond0 ahora sera la interfaz con la que el kernel trabajara. Corriendo un ‘ifconfig’ se mostraran las tres interfaces (bond0,eth0,eth1), todas obedeciendo a la misma dirección MAC y dirección IP.
Y esto es básicamente. Ahora, todo lo que nosotros necesitaremos hacer es cargar el modulo del “bonding” y detener/iniciar la red… y los modulos apropiados deberan cargarse automaticamente:
mercurio:/# modprobe bonding

mercurio:/# /etc/init.d/networking stop

mercurio:/# /etc/init.d/networking start
Puede que tengamos que jugar un poco con esta parte. Probaremos configurar manualmente con ifconfig el dispositivo bond0:
mercurio:/# ifconfig bond0 10.1.15.63 netmask 255.255.255.0 up
Asumiendo que no tengamos errores, probaremos la respuesta del Servidor. Haremos un ping para la dirección ip del bond0 desde una maquina. Notaremos que ambos NICs responden al ping solicitado de atrás hacia adelante (round robin). Si desconectamos eth0, tendremos un error de consola “eth0 a fallado, eth1 pasa a ser primaria” o algo como eso (y viceversa si desconectamos eth1).
En un ambiente de alta disponibilidad, podemos conectar cada NIC dentro de un switch separado (manteniendolo en la misma VLAN) Y mejorar aún más su alta disponibilidad config … Y así sucesivamente.
Para mas información visiten Linux-Foundation

Actualización para Ubuntu Server 8.10 a 9.10.

La cosa cambia ya en Ubuntu Server 8.10 a 9.10, les comento, tuve que hacer esto en Pto Rico y me vi en problemas, porque no encontraba una serie de ficheros, me toco de nuevo realizar un trabajo de investigación el cual anexo a continuación, de la pagina de How to forge.

Tipos de Ethernet Bonding

El modulo de bonding en el kernel Linux kernel soporta un numero de tipos de bondings distintos como a continuación se explica:

mode=0 (balance-rr)
Round-robin policy: Transmit packets in sequential order from the first available slave through the last. This mode provides load balancing and fault tolerance.

mode=1 (active-backup)

One slave interface is active at any time. If one interface fails, another interface takes over the MAC address and becomes the active interface. Provides fault tolerance only. Doesn’t require special switch support

mode=2 (balance-xor)

Tranmissions are balanced across the slave interfaces based on ((source MAC) XOR (dest MAC)) modula slave count. The same slave is selected for each destination MAC. Provides load balancing and fault tolerance.

mode=3 (broadcast)

Transmits everything on all slave interfaces. Provides fault tolerance.

mode=4 (802.3ad)

This is classic IEEE 802.3ad Dynamic link aggregation. This requires 802.3ad support in the switch and driver support for retrieving the speed and duplex of each slave.

mode=5 (balance-tlb)

Adaptive Transmit Load Balancing. Incoming traffic is received on the active slave only, outgoing traffic is distributed according to the current load on each slave. Doesn’t require special switch support

mode=6 (balance-alb)

Adaptive Load Balancing – provides both transmit load balancing (TLB) and receive load balancing for IPv4 via ARP negotiation. Doesn’t require special switch support, but does require the ability to change the MAC address of a device while it is open.

Set Up Bonding Ethernet on Ubuntu / Debian

To use Bonding Ethernet for High-Availability (fail-over) on Ubuntu you need to:

Install package ifenslave-2.6. To install this package follow this command:

#apt-get install ifenslave-2.6

Make sure the real NICs kernel modules are loaded automatically.

Edit /etc/network/interfaces to look like this:

iface bond0 inet static
	address 10.0.1.5
	netmask 255.255.255.0
	network 10.0.1.0
	gateway 10.0.1.254
	up /sbin/ifenslave bond0 eth0 eth1
  	down /sbin/ifenslave -d bond0 eth0 eth1

Comment or borrow the lines referring to your real NICs in the same file.

Add the following lines to your /etc/modprobe.d/arch/i386:

alias bond0 bonding
options bonding mode=5 miimon=100 downdelay=200 updelay=200

Make sure you change your mode!

Then restart your networking:

#/etc/init.d/networking restart

Mas nada!

Make a Comment

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

6 comentarios to “NIC Bonding/Teaming – Ubuntu Server (ACTUALIZADO A 9.10). Agrupando NICs para balanceo de ISP.”

RSS Feed for Unix – Linux Tips & Tricks Comments RSS Feed

Excelente información, corta y precisa.

Felicitaciones

Gracias Marianella, me alegra de verdad te sirva la informacion, cualquier cosa estoy por estos lados.

Que estes bien!!!

en el
modprobe –list | grep bonding /lib/modules/2.6.20-15-server/kernel/drivers/net/bonding/bonding.ko

me sale

Coincidencia en el fichero binario /lib/modules/2.6.27-11-generic/kernel/drivers/net/bonding/bonding.ko
FATAL: Module –list not found.

Que tengo que hacer

El problema se te presenta porque list, debe ser con dos guiones – – uno seguido del otro, lo que pasa es que el blog me pone un guion largo, por eso te aparece que no encuentra list.

Suerte!

Saludos…. Excelente la información… sin embargo he buscado y poco he encontrado para poder realizar un bonding con dos interfaz que reciben por dhcp. Alguien pudiere ayudarme….

Actualizado con dos interfaz solicitando DHCP.

Salud!


Where's The Comment Form?

Liked it here?
Why not try sites on the blogroll...

A %d blogueros les gusta esto: