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
Algunos derechos reservados. Licencia Creative Commons
20 August 2009 a las 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.
20 August 2009 a las 5:03 pm
Gracias, siempre hay algo nuevo que aprender ;-).