viernes, 4 de mayo de 2012

Bridges, bonding y LACP

Vamos a ver como configurar las interfaces de red en modo bridge, utilizando interfaces conectadas a dos switches distintos para aumentar la disponibilidad del sistema y en modo bonding LACP para aumentar el ancho de banda total de esa conexión.
Además veremos la configuración específica de los switches.

Primer servidor con Ubuntu 12.04, vamos a configurar dos bondings y un bridge con 6 interfaces en total (eth0 hasta eth5).
El esquema de conexión es el siguiente:


Necesitamos tener instalados algunos paquetes:
# aptitude install bridge-utils ifenslave-2.6

Modificamos el fichero /etc/network/interfaces:
auto br0
iface br0 inet static

address 192.168.164.21
netmask 255.255.255.0
network 192.168.164.0
broadcast 192.168.164.255
gateway 192.168.164.1
# # dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.100.182 192.168.100.189 192.168.100.183
dns-search rubensalazar.net

bridge_ports eth0 eth1
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp on

Reiniciamos el servicio de red:
# /etc/init.d/networking restart

Podemos comprobar si ha funcionado :
# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.001b78976e50       yes             eth0
                                                                             eth1
La configuración en los switches es idéntica en los dos, con un show run vemos la configuración de esa interfaz:
interface GigabitEthernet0/6
 switchport access vlan 7
 switchport mode access
 spanning-tree portfast

Pasamos a configurar los bondings, añadimos en el fichero /etc/network/interfaces:

auto bond0
iface bond0 inet static
slaves eth2 eth3
bond_mode 4
bond_miimon 100
bond_updelay 200
bond_downdelay 200
address 10.0.1.21
netmask 255.255.255.0
auto bond1
iface bond1 inet static
slaves eth4 eth5
bond_mode 4
bond_miimon 100
bond_updelay 200
bond_downdelay 200
address 10.0.2.21
netmask 255.255.255.0
auto eth2
iface eth2 inet manual
          bond-master bond0
auto eth3
iface eth3 inet manual
           bond-master bond0

auto eth4
iface eth4 inet manual
           bond-master bond1

auto eth5
iface eth5 inet manual
          bond-master bond1

El modo 4 indica el tipo de bonding que configuramos, podéis encontrar más información en:
http://en.wikipedia.org/wiki/Link_Aggregation_Control_Protocol#Link_Aggregation_Control_Protocol
http://systemadmin.es/2009/04/los-modos-de-bonding

Volvemos a reiniciar el servicio de red y comprobamos que funcionan:
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)


Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200


802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 2
Actor Key: 17
Partner Key: 2
Partner Mac Address: 00:19:e8:e8:02:00


Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:26:55:d8:b5:99
Aggregator ID: 1
Slave queue ID: 0


Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:26:55:d8:b5:9b
Aggregator ID: 1
Slave queue ID: 0

# cat /proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)


Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200


802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 2
Actor Key: 17
Partner Key: 2
Partner Mac Address: 00:1e:14:db:05:80


Slave Interface: eth4
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:26:55:d8:b5:98
Aggregator ID: 1
Slave queue ID: 0


Slave Interface: eth5
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:26:55:d8:b5:9a
Aggregator ID: 1
Slave queue ID: 0

La configuración de los switches es más compleja, definimos dos port channels, uno por cada red:
interface Port-channel1
 switchport access vlan 8
 switchport mode access
 spanning-tree portfast
!
interface Port-channel2
 switchport access vlan 9
 switchport mode access
 spanning-tree portfast
interface GigabitEthernet0/7
 switchport access vlan 8
 switchport mode access
 channel-group 1 mode active
 spanning-tree portfast
!
interface GigabitEthernet0/8
 switchport access vlan 8
 switchport mode access
 channel-group 1 mode active
 spanning-tree portfast
!
interface GigabitEthernet0/9
 switchport access vlan 9
 switchport mode access
 channel-group 2 mode active
 spanning-tree portfast
!
interface GigabitEthernet0/10
 switchport access vlan 9
 switchport mode access
 channel-group 2 mode active
 spanning-tree portfast

10 comentarios:

  1. Hola Rubén!
    Estoy mirando el tema del bonding, pero no consiguo que termine de arrancar el bond master. Me aparece el mensaje "Waiting for bond master bond0 to be ready"

    y si miro el fichero de /proc/net/bonding/bond0 veo que dice "Mii Status: down"

    Tienes alguna idea de qué puede estar mal?

    Gracias!

    ResponderEliminar
  2. Hola.

    Saca el resultado de: ifconfig -a
    Las interfaces que forman parte de bond0 aparecen en la salida del comando.
    Si tienes diferencias entra la salida con la opción -a y sin ella es que hay interfaces que no están configuradas o activas.
    ¿La configuración de los switches la has comprobado?.

    Saludos.

    ResponderEliminar
  3. Hola Rubén, al final lo he solucionado reiniciando :)
    He comprovado que el:

    sudo /etc/init.d/networking restart

    No arrancaba correctamente el bounding... he dejado un post con mi configuración:

    http://www.poveravoce.net/blog/?p=184

    Muchas gracias!

    ResponderEliminar
  4. Hola Bro, Saludos y gracias por la info, yo solo tengo 2 eth y una wlan y quisiera hacer un bounding entre las 3 o por lo menos las 2 eth, Grax de nuevo man.

    ResponderEliminar
  5. Hola.

    Para bonding con LACP no podrás hacerlo con las dos eth y la wlan, fíjate en la configuración necesaria en los switches.
    Sino quieres LACP puedes hacer un bridge de todas las interfaces. De todos modos no te lo recomiendo, mejor las eth por un lado y la wifi por otro.
    La configuración es como describe el artículo.

    Saludos.

    ResponderEliminar
  6. Hola espero me puedas ayudar por favor he estado queriendo configurar el bonding en ubuntu 12.04 pero por alguna razon no funciona del todo, lo que busco es sumar 2 anchos de banda (1 de 4 megas y otro de 15), por alguna razon no lo logro hacer ya intente algunas configuraciones pero sin exito, esta es la unica que ha servido pero solo veo que un eth trabaja y el de bond0 me podrias orientar en que estoy haciendo mal? un router tiene la ip 192.168.8.254 y el otro 192.168.7.254 ojala me pudieras ayudar que ya no encuentro forma, muchas gracias de antemano

    este es el archivo /etc/network/interfaces

    #auto lo
    #iface lo inet loopback

    auto eth1
    iface eth1 inet manual
    bond-master bond0

    auto eth0
    iface eth0 inet manual
    bond-master bond0

    auto bond0
    iface bond0 inet static
    address 192.168.8.177
    netmask 255.255.255.0
    gateway 192.168.8.254
    dns-nameservers 192.168.8.254
    bond-mode 802.3ad
    bond-miimon 100
    bond-lacp_rate 1
    bond-slaves none


    y el archivo gedit /etc/resolvconf/resolv.conf.d/head


    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)

    # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

    nameserver 192.168.8.254

    nameserver 192.168.7.254

    ResponderEliminar
    Respuestas
    1. Hola.

      ¿Qué resultado te da?:
      cat /proc/net/bonding/bond0
      ifconfig -a

      También puede probar a hacer ping desde una interfaz en concreto con el parámetro -I, prueba con las dos interfaces y pon el resultado de estos comandos.


      Saludos.

      Eliminar
  7. hola Ru, constantemente estoy revisando tu blog, ya que tienes mucha informacion de excelente calidad, referente a virtualizacion, xen y similares.
    tengo muchas dudas,actualmente soy novata con esto de la virtualizacion, que modo de bonding consideras el mas efectivo para balancear 6 tarjetas de red?
    quiero balancear las 6 tarjetas y conectarlas a un bridge, sera eso posible, o necesito mas bridges?

    ResponderEliminar
    Respuestas
    1. Hola.

      Si es posible tener un bridge con seis interfaces pero me parece que no es lo que necesitas exactamente.
      ¿Buscas agregar sus anchos de banda o buscas redundancia?, ¿Todas las tarjetas se conectan al mismo switch o a más de uno?, ¿el switch esta correctamente configurado?.

      Una aproximación:
      Primero crear un bonding con las seis interfaces, los tipos de bonding disponibles son (aunque no se que rendimiento buscas, me parece excesivo poner las seis interfaces en el mismo bonding):
      0 - balance-rr
      1 - active-backup
      2 - balance-xor
      3 - broadcast
      4 - 802.3ad (LACP)
      5 - balance-tlb
      6 - balance-alb

      Segundo crear un bridge, la primera interfaz que formará parte del bridge será el bonding, después las máquinas virtuales de xen agregarán sus interfaces a este bridge.

      Espero haberte dado algunas pistas útiles.

      Saludos.

      Eliminar
  8. Hola Ruben

    Espero estes bien , te queria consultar es posible crear un bonding (activo-pasivo) , sobre un un bonding lacp , te comento tengo un lacp de 2 Gbps configurado en mi servidor , pero ambas interfaces estan en el mismo switch y quiero tener otro bonding lacp 2 Gbps conectado al switch 2 de respaldo , pero que el servidor sea quien determine por que bonding enviar la información.( por ejemplo si es que se cae un switch)

    ResponderEliminar