SDB:Bonding
¡Este artículo puede reciclarse! Este artículo no cumple los estándares esperados en la wiki de openSUSE. |
BONDING CON DOS TARJETAS DE RED: Redundancia en las interfaces de red
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 base 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.
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:
- 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.
- 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
-
mode=modo
debe corresponderse con los modos aceptados por el bonding:-
mode=0
omode=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
omode=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
omode=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
omode=broadcast
: Configura una política de difusión para la tolerancia de fallas. Las transmisiones son enviadas en todas las interfaces esclavas. -
mode=4
omode=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
omode=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
omode=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.
- 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 eth0bus-pci-0000:02:01.0
y para la eth1bus-pci-0000:03:01.0
; en mi caso). - En el directorio
/etc/sysconfig/network
, creamos un directorio (por ejemplo "copia") y copiamos los dos ficherosifcfg-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). - Copiamos el fichero
ifcfg-eth-id-xx:xx:xx:xx:xx:xx
(que se corresponde con la tarjetaeth0
, que es la IBM 82547GI) con el comandocp ifcfg-eth-id-xx:xx:xx:xx:xx:xx ifcfg-bond0
, que es el que usaremos para crear la interfaz del bonding. Posteriormente borramos ambosifcfg-eth-id-.....
. - 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'
- 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 cursiva las líneas añadidas a mano. Las opciones de
BONDING_MODULE_OPTS
deben corresponderse con las líneas añadidas almodprobe.conf.local
del punto 2 de este artículo, tanto paramode
como paramiimon
. - Las líneas
BROADCAST
,IPADDR
yNETWORK
debes adaptarla a las IP de tu red en caso de que no coincidan con las aquí mostradas. El contenido deBONDING_SLAVE...
no se debe copiar literalmente de éste artículo, sino conservar el que genere tu sistema.
- 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. - 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 administrador (root) y ejecutamos el comandoifconfig
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