ethernet failover (parte 1 de 2)

21 de febrero de 2010

Supón que tienes un servidor con varias maquinas virtuales dando servicio y que quieres asegurar la conectividad con la red. Al igual que redundamos las fuentes de alimentación o los discos montando RAIDs, también podemos redundar las interfaces de red Ethernet para asegurar una conectividad de alta disponibilidad. El siguiente esquema de red es típico de un entorno de virtualización, pero puede ser extensible a cualquier tipo de servicio crítico como puede ser una maquina de correo.

La técnica que utilizaremos es el bonding (o vinculación) en la cual crearemos una interfaz virtual vinculada a dos (o más) interfaces Ethernets físicas.


Como veis en el siguiente esquema cada interfaz de red se conecta a un switch redundando y cada switch a su backbone.

Lo que haremos es crear una interfaz virtual llamada bond0 y vincularla con eth0 y eth1. Supondremos que estamos en un CentOS 4.5. Editaremos el /etc/modprobe.conf para que el kernel arranque el modulo de bonding:

alias bond0 bonding
options bond0 miimon=80 mode=5

Ahora crearemos la interfaz virtual bond0. Creamos el archivo /etc/sysconfig/network-scripts/ifcfg-bond0:
DEVICE=bond0
IPADDR=192.168.1.100
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
GATEWAY=192.168.1.1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

Una vez creada la interfaz virtual editamos nuestras dos interfaces físicas (eth0 y eth1) con este contenido:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

Ahora solo queda reiniciar y hacer pruebas de conectividad con los cables de red para comprobar que efectivamente no perdemos conexión si desconectamos eth0 o eth1.

Si hacemos un ifconfig, veremos como la interfaz virtual es la que coge la dirección IP:
bond0     Link encap:Ethernet  HWaddr 00:1E:C9:D6:DA:6E  
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::21e:c9ff:fed6:da6e/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:5157067 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3927169 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2601662632 (2.4 GiB)  TX bytes:2306432451 (2.1 GiB)

eth0      Link encap:Ethernet  HWaddr 00:1E:C9:D6:DA:6E  
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:3593230 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2807046 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2459234475 (2.2 GiB)  TX bytes:2154634747 (2.0 GiB)
          Interrupt:194 Memory:dc000000-dc012800 

eth2      Link encap:Ethernet  HWaddr 00:1E:C9:D6:DA:72  
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:1563837 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1120123 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:142428157 (135.8 MiB)  TX bytes:151797704 (144.7 MiB)
          Interrupt:170 Memory:d8000000-d8012800 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:6917 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6917 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:6525082 (6.2 MiB)  TX bytes:6525082 (6.2 MiB)

En el siguiente post veremos lo diferentes modos de funcionamiento del bonding y las precauciones que tenemos que tomar según el modo seleccionado.

Más información:
+ Linux Channel Bonding

2 comentarios:

Anónimo dijo...

cómo es que eth0 y eth1 tienen la misma MAC ?

saludos,
JM

amperis dijo...

es un error. Ya esta arreglado, gracias