Introducción.
El controlador bonding, originalmente creado por Donald Becker, está incluido en prácticamente todas las distribuciones de GNU/Linux y permite sumar las capacidades de varias interfaces físicas de red con objeto de crear una interfaz lógica. Esto se lleva a cabo con el objeto de contar con redundancia o bien balanceo de carga.
Procedimientos.
Archivo de configuración.
En CentOS 5 y Red Hat Enterprise Linux 5 se debe editar el archivo /etc/modprobe.conf:
vi /etc/modprobe.conf |
En ALDOS 1.4, CentOS 6 y Red Hat Enterprise Linux 6 se debe crear un archivo que puede denominarse arbitrariamente como/etc/modprobe.d/bonding.conf:
vi /etc/modprobe.d/bonding.conf |
En cualquiera de los dos casos mencionados, se debe añadirse lo siguiente para asociar el controlador bonding a la interfaz bond0 del siguiente modo:
alias bonding bond0 |
El controlador puede llevar además opciones que permiten modificar su funcionamiento, de entre los cuales los más importantes sonmode y miimon. A fin de obtener un buen funcionamiento, es importante configurar al menos estas dos opciones.
Para fines generales, se puede puede utilizar lo siguiente:
alias bond0 bonding
options bonding mode=0 miimon=0
|
El valor de la opción mode establece la política de balanceo de carga y tolerancia a fallos y el valor de la opción miimon establece al tipo de supervisión de MII, donde 0 corresponde la configuración más común.
Al terminar con el archivo /etc/modprobe.conf, es importante utilizar el mandato depmod con la opción -a para regenerar el archivomodules.dep, el cual es utilizado como el mapa de dependencias de los controladores utilizados por el núcleo del sistema.
depmod -a |
Lo anterior solo debe devolver el símbolo de sistemas después de unos segundos.
Opción mode.
Se utiliza para establecer la política baja la cual se hará trabajar las tarjetas en conjunto. Los posibles valores son:
0 (cero): Establece una política de Round-Robin, que es un algoritmo que asigna una carga equitativa y ordenada a cada proceso, para proporcionar tolerancia a fallos y balanceo de carga entre los miembros del arreglo de dispositivos. Todas las transmisiones de datos son enviadas y recibidas de forma secuencial en cada interfaz esclava del arreglo empezando con la primera que esté disponible. Es la política predeterminada del controlador y la que funciona para la mayoría de los casos.
1 (uno): Establece una política de respaldo activo que proporciona tolerancia a fallos. Todo el tráfico se transmite a través de una tarjeta y solo se utilizará la otra en caso de que falle la primera.
2 (dos): Establece una política XOR (exclusive-or, exclusiva-o) para proporcionar tolerancia a fallos y balanceo de carga. Este algoritmo compara las solicitudes entrantes de las direcciones MAC hasta que coinciden para la dirección MAC (Media Access Control) de una de las tarjetas esclavas. Una vez que se establece el enlace, las transmisiones de datos de datos son enviadas en forma secuencial empezando con la primera interfaz disponible.
3 (tres): Establece una política de Round-Robin, para proporcionar tolerancia a fallos y balanceo de carga. Todas las transmisiones de datos son enviadas de forma secuencial en cada interfaz esclava del arreglo empezando con la primera que esté disponible.
En el siguiente ejemplo se establece la política 0 (cero):
options bonding mode=0
|
Opción miimon.
Se utiliza para especificar cada cuantos milisegundos se debe supervisar el enlace MII (Media Independent Interface). Se utiliza cuando se necesita alta disponibilidad para verificar si la interfaz está activa y verificar si hay un cable de red conectado. En el siguiente ejemplo se establecen 100 milisegundos:
options bonding mode=0 miimon=100
|
Se requiere que todos los controladores del arreglo de tarjetas tengan soporte para MII. Para verificar si el controlador de la tarjeta tiene soporte para MII, se utiliza el mandato ethtool, donde la salida debe devolver Link Detected con el valor yes. Ejemplo:
ethtool eth0 |
Lo anterior debe devolver algo similar a lo siguiente:
Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Half Port: MII PHYAD: 32 Transceiver: internal Auto-negotiation: on Supports Wake-on: pumbg Wake-on: d Current message level: 0x00000007 (7) Link detected: yes |
Para desactivar esta función, se utiliza el valor 0 (cero). Ejemplo:
options bonding mode=0 miimon=0
|
Archivo de configuración /etc/sysconfig/network-scripts/bond0.
Este se configura con las mismas variables de un dispositivo de red regular. Requiere las variables ONBOOT, BOOTPROTO, DEVICE,IPADDR, PREFIX (o bien NETMASK en CentOS 5 y Red Hat™ Enterprise Linux 5) y GATEWAY.
En el siguiente ejemplo se configura la interfaz bond0 con la dirección IP estática 192.168.0.1, máscara de subred de 24 bits (255.255.255.0), puerta de enlace 192.168.0.254 y la interfaz inicia junto con el sistema creando el archivo /etc/sysconfig/network-scripts/ifcfg-bond0 con el siguiente contenido:
DEVICE=bond0 ONBOOT=yes BOOTPROTO=static IPADDR=192-168.0.1 PREFIX=24 GATEWAY=192.168.0.254 |
Las interfaces de red a utilizar como esclavas se configuran de la siguiente forma, considerando que se tiene eth0 y eth1, el contenido del archivo /etc/sysconfig/network-scripts/ifcfg-eth0 sería:
DEVICE=eth0 BOOTPROTO=none ONBOOT=no SLAVE=yes MASTER=bond0 |
Y el contenido del archivo /etc/sysconfig/network-scripts/ifcfg-eth1 sería:
DEVICE=eth1 BOOTPROTO=none ONBOOT=no SLAVE=yes MASTER=bond0 |
Iniciar, detener y reiniciar el servicio network.
Para ejecutar por primera vez el servicio network tras configurar el acoplamiento de tarjetas, utilice:
service network start |
Para hacer que los cambios hechos tras modificar la configuración surtan efecto, utilice:
service network restart |
Para detener el servicio network utilice:
service network stop |
Comprobaciones.
Para verificar que la interfaz lógica quedó configurada, en el caso de haber utilizado las interfaces eth0 y eth1, utilice:
ip addr list |
Lo anterior debe devolver algo similar a lo siguiente:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000
link/ether 00:06:4f:80:0d:92 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000
link/ether 00:06:4f:80:0d:92 brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
5: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue
link/ether 00:06:4f:80:0d:92 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 brd 192.168.1.255 scope global bond0
inet6 fe80::206:4fff:fe80:d92/64 scope link tentative
valid_lft forever preferred_lft forever
|
Para verificar que las interfaces de red están funcionando correctamente y que hay un cable de red conectado a éstas, se utiliza el mandato ethtool del siguiente modo:
ethtool eth0 |grep "Link detected" ethtool eth1 |grep "Link detected" |
Si ambas tarjetas tiene soporte para MII, lo anterior debe devolver lo siguiente:
Link detected: yes Link detected: yes Autor: Joel Barrios