Solaris: dladm, agregando interfaces de red

Como podemos leer en el man, el comando dladm nos permite configurar los data-link de una máquina y entre las cosas que podemos hacer está la creación de interfaces virtuales los cuales se configuran con varios interfaces físicos agragados. Las especificaciones de la agregación de enlaces (Link aggregation) están definidas en la IEEE 802.3ad.Tener varios interfaces en una agregado tiene una serie de ventajas importantes, de las que podemos destacar:

  • Aumento del ancho de banda, nos permite unir dos enlaces de 1Gb, para disponer de un único enlace de 2Gb.
  • Reparto de carga, se puede repartir la carga entre distintos interfaces físicos.
  • Failover, si alguno de los interfaces físicos falla, los clientes no se enteran del fallo, el resto de los interfaces asumen la carga.

Creo que las dos carácteristicas principales y por lo que casi todo el mundo implementa un Link aggregation son la de aumentar el ancho de banda de una forma sencilla y poder implementar un método de failover sobre las interfaces de red.

Link aggregation vs IPMP

En Solaris disponemos de otro método para implementar failover de los interfaces de red y es implementando IPMP ( IP Network Multipathing ). Existen una serie de diferencias entre estos dos métodos de implementación del failover que están perfectamente explicadas en el blog de Nicolas Droux, podemos destacar:

  • Link aggregation trabaja a nivel MAC
  • IPMP trabaja a nivel IP
  • Link aggregation, en principio no debe funcionar si conectamos una aggragación a varios switches, pero mas adelante veremos que esto se puede solucionar
  • IPMP al trabajar a nivel IP, si permite que conectemos las intefaces a distintos switches y disponer de varios caminos
  • Link aggregation se configura con el comando dladm
  • PMP se configura con lsa opciones de agrupación del comando ifconfig

Crear un agregado en 4 pasos

Vamos a ver de forma rápida como crear un link aggregation en 4 pasos, antes de comenzar es recomendable leer el manual de dladm(1M), porque existen algunas posiblidades más de las que vamos a ver en los ejemplos.

Paso 1: Ver las interfaces disponibles

el primer paso para configurar un nuevo agregado en nuestra máquina es comprobar cuales son las interfaces disponibles, con el parámetro show-dev del comando dladm se listan todos lo interfaces disponibles y su estado

root@host # dladm show-dev
nxge0           link: down      speed: 0     Mbps       duplex: unknown
nxge1           link: down      speed: 0     Mbps       duplex: unknown
nxge2           link: up        speed: 1000  Mbps       duplex: full
nxge3           link: up        speed: 1000  Mbps       duplex: full
nxge4           link: down      speed: 0     Mbps       duplex: unknown
nxge5           link: up        speed: 1000  Mbps       duplex: full
nxge6           link: up        speed: 1000  Mbps       duplex: full
nxge7           link: up        speed: 1000  Mbps       duplex: full
root@host #

En nuestro caso, vamos a crear un agregado con las interfaces nxge2 y nxge3, las cuales están cableadas y están pinchadas a la misma VLAN.

Paso 2: Unplumb de todas las interfaces del agregado

Como el Link aggregation, trabaja a nivel MAC, un requisito es que todas las interfaces que van a pertenecer al agregado no estén configuradas, por lo que hacemos un unplumb

root@host # ifconfig nxge2 unplumb
root@host # ifconfig nxge3 unplumb

Si no realiazamod el unplumb de todas las interfaces, al intentar crear el nuevo agregado obtendremos un error parecido a este.

root@host #
root@host #  dladm create-aggr -l passive -d nxge2 -d nxge3 1
dladm: create operation failed: Device busy (invalid interface name)
root@host #

Paso 3: Crear el agregado

Para crear el nuevo agregado con las interfaces nxge2 y nxge3, solo tenemos que ejecutar la siguiente línea:

root@host #
root@host #  dladm create-aggr -d nxge2 -d nxge3 1

Pasamos el parámetro create-aggr, seguido de la lista de interfaces que deseamos añadir al agregado, cada interfaz irá con su propio parámetro -d. Por último indicamos una key que identifique al nuevo agregado.

Con el parámetro show-aggr podemos ver la lista de agregados disponibles.

root@host # dladm show-aggr
key: 1 (0x0001) policy: L4      address: 0:21:28:1f:5d:72 (auto)
           device       address                 speed           duplex  link    state
           nxge2        0:21:28:1f:5d:72          1000  Mbps    full    up      standby
           nxge3        0:21:28:1f:5d:73          1000  Mbps    full    up      standby

Con el comando ifconfig comprobamos que se ha creado la interfaz virtual aggr1

root@host # ifconfig -a
lo0: flags=2001000849 up,loopback,running,multicast,ipv4,virtual mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
...
aggr1: flags=201000842 broadcast,running,multicast,ipv4,cos  mtu 1500 index 8
         inet 0.0.0.0 netmask 0
        ether 0:21:28:1f:5d:72
root@host #

Paso 4: Configurar el nuevo interfaz

Ahora solo tenemos que configurar la nueva interfaz virtual aggr1

root@host # ifconfig aggr1 192.168.10.15 netmask 0xffffff00 broadcast 192.168.10.255 up
root@host # ifconfig -a
lo0: flags=2001000849 UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
...
aggr1: flags=201000843 UP,BROADCAST,RUNNING,MULTICAST,IPv4,CoS mtu 1500 index 10
        inet 192.168.10.15 netmask ffffff00 broadcast 192.168.10.255
        ether 0:21:28:1f:5d:73

Con el parámetro show-aggr del comando dladm podemos ver estádisticas de los distintos agregados.

root@host # dladm show-aggr -s
key: 1  ipackets  rbytes      opackets   obytes          %ipkts %opkts
           Total        3394460   648232232   2337640   397669081
           nxge2        3325766   641555687   2297641   391568991       98.0    98.3
           nxge3        68694     6676545     39999     6100090         2.0     1.7

Eliminar una interfaz de un agregado

Para eliminar una interfaz de un agregado podemos utilizar el parámetro remove-aggr, indicando la interfaz y la key que identifica al agregado.

root@host # dladm remove-aggr -d nxge3 1
root@host # dladm show-aggr
key: 1 (0x0001) policy: L4      address: 0:21:28:1f:5d:72 (auto)
           device       address                 speed           duplex  link    state
           nxge2        0:21:28:1f:5d:72          1000  Mbps    full    up      attached
root@tcapp05 #

Añadir una interfaz a un agregado

Podemos añadir nuevas interfaces a un agregado mediante el parámetro add-aggr del comando dladm.

root@host # dladm add-aggr -d nxge3 1
root@host #
root@host # dladm show-aggr
key: 1 (0x0001) policy: L4      address: 0:21:28:1f:5d:72 (auto)
           device       address                 speed           duplex  link    state
           nxge2        0:21:28:1f:5d:72          1000  Mbps    full    up      attached
           nxge3        0:21:28:1f:5d:73          1000  Mbps    full    up      attached
boot@host #

Todas las modificación que se realicen entre los distintos agregados del sistema quedarán reflejados en el fichero /etc/aggregation.conf

root@host # cat /etc/aggregation.conf
1       L4      2       nxge2,nxge3     auto    off     short
root@host #

Link Aggregation Control Protocol

El protocolo LACP está definido en la IEEE 802.3ad y define la forma en la que el agregado en la máquina se comunica con el switch. Esta comunicación son sencillamente tramas de control que definen al propio agregado y como, bien el switch o bien el agregado que hemos creado en la máquina, deben comportarse dinámicamente a las necesidades que se planteen. Existen 3 posibilidades para configurar el LACP.

  • off, es decir que el agregado trabaje sin LACP.
  • activo, nuestro agregado es el encargado de comenzar la negociación del protocolo.
  • Pasivo, los interfaces de nuestro agregado son el elemento pasivo en la negociación.

Nota – Si configuramos un agregado, tanto activo como pasivo, debemos comprobar que el otro lado está configurado a la inversa.

Link aggregation sobre varios switches

Uno de los entornos en los que la agregación de enlaces tiene utilidad es en el failover de un agregado, el cual está conectado a varios switches. En principio y según las especificaciones IEEE 802.3ad , un agregado no puede trabajar sobre 2 switches distintos. La afirmación anterior no es exactamente cierta, ya que podemos configurar un agregado para que trabaje con 2 switches siempre y cuando los switches lo permitan.

El único requeremiento para que un agregado trabaje sobre 2 switches es que ambos switches deben trabajar como uno solo, esta característica depende de cada fabricante, por ejemplo CISCO le llama Multichassis Etherchannel, 3Com lo denomina XRN Fabric.

Links

http://blogs.sun.com/droux/entry/link_aggregation_vs_ip_multipathing

http://en.wikipedia.org/wiki/Link_aggregation

http://unixfoo.blogspot.com/2009/01/solaris-link-aggregation-dladm.html

http://www.firstalt.co.uk/help/aggr.html

http://www.sun.com/bigadmin/features/articles/solaris_networking.jsp#gldv3link

2 Responses

  1. Victor M. Fernandez August 20, 2009 / 3:17 pm

    El post esta bastante bien.

    Unicamente destacar que el subsistema IPMP (IP MultiPathing) a nivel III es una funcionalidad ya conocida y heredada de Sun Solaris 8, de hecho se incluyo en el componente NAFO (Network Address FailOver) del Sun Cluster 3.X, a diferencia del obsoleto Sun Cluster 2.X.

    En cuanto al proyecto CROSSBOW, acotar que Sun Solaris 10 update 6/7 unicamente incorpora la funcionalidad citada de “link agregation” a nivel II. Sin embargo en la distribucion Indiana (en concreto la release 2009.06) dentro del proyecto OpenSolaris incorpora un abanico mucho mayor de funcionalidades tanto desde el punto de vista de la virtualizacion como del accounting y del billing.

    Un saludo.

  2. David August 20, 2009 / 5:03 pm

    Gracias, siempre hay algo nuevo que aprender ;-).

Comments are closed.