martes, octubre 25, 2005

Teaming en tarjetas de red HP en Proliant

(gracias a Rubén, un compañero de trabajo por varias referencias). Administramos en el curro servidores HP Proliant. Llevamos un tiempo estudiando las posibilidades de duplicar tarjetas de red en Windows (en Linux, para más adelante), para ofrecer redundancia. En principio, los drivers de Compaq tienen de manera estándar una serie de funcionalidades incluidas: Network Fault Tolerance(NFT), 802.3ad Dynamic, Transmit Load Balancing (TLB) y Switch-assisted Load Balancing (SLB). Esto es lo que da el driver básico, puesto que hay una versión de pago donde por unos módicos $150 por licencia la versión Windows ($75 para Linux) se añade la posibilidad de usar 802.3ad Dynamic Dual Channel Load Balancing or Dynamic Dual Channel Teaming,Switch-assisted Dual Channel Load Balancing or Dual Channel Teaming, Fast Path Failover y Active Path Failover.
Este bonito lío de siglas tiene el siguiente significado:
  • Network fault tolerance (NFT): Es la manera más sencilla de proporcionar redundancia. Se utiliza de dos a ocho tarjetas de red, pudiendo estar conectadas a switches diferentes. En caso de que una de las tarjetas caiga, se pasa a usar la siguiente. No proporciona ninguna capacidad de de balanceo de carga.
  • 802.3ad Dynamic: Permite balanceo de carga en transmisión y recepción pero contra un unico switch. Gracias al protocolo 802.3ad se negocia contra el switch la creación de un trunk, sin necesidad de configuraciones adicionales.
  • Switch-assisted Load Balancing (SLB): Al igual que 802.3a pero con la salvedad que hay que configurar a mano en el switch la agregación de puertos, mientras que en el caso anterior se hace automáticamente.
  • Transmit Load Balancing (TLB): Balanceo de carga a la hora de transmitir. En este caso, se permite la transmisión por los diversos enlaces que forman el trunk. Pueden, al igual que el caso del NLB estar conectados a switches diferentes, sin requerir soporte especial por parte de los mismos. Lo único es que estén conectados al mismo dominio de nivel 2.
  • 802.3ad Dynamic Dual Channel Load Balancing: Permite el uso de varios switches que pertenezcan al mismo dominio de nivel 2 para efectuar la redundancia, negociándose la agregación de puertos a través de 803.3ad.
  • Switch-assisted Dual Channel Load Balancing: Permite el uso de varios switches que pertenezcan al mismo dominio de nivel 2 para efectuar la redundancia. No es necesario el uso de 802.3ad en este caso. Eso si los switches deben de soportar agragación de puertos.
  • Fast Path Failover: Detecta cual es el camino más rápido hacia la red de core para usarlo
  • Active Path Failover: Permite redirigir tráfico en función de la monitorización de otro dispositivo de red

A mi personalmente lo que siempre me interesó más fue el uso de 802.3ad. A fin de cuentas es un protocolo estándar del IEEE, pero al estar redundando contra dos switches por equipo, me encontré con el problema de añadir $150 por servidor a usar... así que al final, dado que no estamos saturando absolutamente nada y que el backbone de servers es de gigabit, estoy usando Network fault tolerance. Por cierto, para versiones concretas de distribuciones están disponibles (en especial las versiones de Redhat 2.x,3.x y 4.x y la Suse Enterprise Server 8 y 9, tanto para arquitecturas x86 como AMD64).
Tecnorati tags: Windows , Linux , Networking

5 comentarios:

Anónimo dijo...

Saludos,
He dado con su blog buscando información sobre el balanceo de carga.
Y lo primero, he estado mirandolo y sí pareces un profesional, no es el típico blog de 'copy & paste' que tienen muchos y que no saben de lo que hablan.
Es por ello por lo que te pregunto, pese a ser este un tema que hace mucho que comentaste y no es del todo igual.
Estoy montandome un servidor, tengo 2 lineas de ONO que entran por dos modems y 2 routers Vigor 2100G (http://www.alvaco.es/index.php?option=com_content&task=view&id=49&Itemid=156)
Y quiero usarlas juntas para el servidor, ya que la velocidad de subida de ONO no es mucha.
Me gusta '802.3ad Dynamic Dual Channel Load Balancing' pero no encuentro tarjetas de red o routers que admintan 802.3ad, pero y si otros 802.3. De tarjetas me gusta: http://www.umdonline.com/guest/showitem/SM-LG52TX
(no la necesito Gigabit pero bueno) pero no indica nada de 802.3ad.
El servidor está sobre un linux server en debian (un ubuntu server sin entorno gráfico)
He leido en http://www.linuxhorizon.ro/bonding.html que puedo hacer bounding 802.3ad pero no pone que sea sobre routers /switch diferentes.
Me das algún consejo? Lo monto a mano o hay algún programa que haga algo parecido.
En relaidad con balancear la salida por ambos me basta.
Por cierto, el server sería un servidor web; deberé apuntar los dominios a las 2 IPs, supongo, porque si un cliente solicita una IP (sitio web) y recibe datos de otra IP, su antivirus podría tomarlo como un ataque, o eso creo yo.
Muchísimas gracias por tu tiempo, de verdad.

Drizzt dijo...

Hola

Con el tipo de configuración que tienes vas a tener dos direcciones IP por cada línea ( a menos que consigas que ONO te mande el tráfico alternado por cada una de ellas y te dé una sóla dirección IP - me extraña - )

Hay varias soluciones relativamente más sencillas que usar un teaming - no creo que tengas los 100 MB que tiene cada tarjeta del compaq - y es usar balanceo de carga.

Por ejemplo, Linux lo puedes hacer con el rutado avanzado (mira por ejemplo aqui).

El "pero" que existe como bien comentas es que tienes dos direcciones IP. Si tienes control sobre el DNS siempre puedes hacer un simple roundrobing, es decir, que el server de una dirección IP de cada línea a cada petición. Es decir si llamas www.yo.com te devuelve las dos IP de manera alternada. De esta manera tienes un balanceo de carga.

El bonding yo lo uso más para tener redundancia de tarjeta, de hecho, cuando monté eso, la salida internet de la empresa era de 6 MB. Para llegar a saturar la ethernet con internet hay que tener mucho canuto :)

El soporte de Linux para 802.3ad lo tienes en el propio kernel (mira el fichero bonding.txt en la documentación del kernel).

Drizzt dijo...

Un pequeño gazapo:


on el tipo de configuración que tienes vas a tener dos direcciones IP por cada línea

Tienes una IP por línea es lo que quiero decir :)

Anónimo dijo...

Saludos,
Lo primero, gracias por tu temprana respuesta y perdona por mi tardanza, pero no guardé tu blog en mis marcadores y no lo encontraba.
Mi intención es aprovechar el ancho de banda de subida de las dos lineas, y balancear la subidad de datos a internet por una o por otra, ya que ONO sólo me ofrece 1Mb de subida en cada linea, y con 1+1 la cosa debería ir mejor.
Ya empezé a implementarlo antes de leer tu post, te cuento:
Relaize un interfaz de red, bonding, para 2 tarjetas (aun no he podrido comprar las que te comenté y he cogido dos de otro PC).
Además le dije a BIND9 que apuntase un dominio a 2 IPs.
He realizado pruebas, y el bonding en modo round-robin la página de pruebas carga a veces y cuando lo hace es muy lenta. En modo 3, broadcoast la página carga rápido, pero si descargo un paquete de prueba, al cabo de unos megas descargados, 2, 3, 4, la comunicación se corta, o mejor dicho se queda esperando respuesta; y si intento volver a cargar el sitio web de pruebas no responde.
No soy administrador de sistemas, soy programador, y mi intento por hacer 'pinitos' con esta red pueden convertirse en un rompecabezas. Pero no puedo romperme el bolsillo pagando a un administrador de sistemas de red.
Así que con mis conocimientos sólo se me ocurrren estos posibles fallos:
- Que al ser dos ethernet diferentes y distinto driver. (Fácil solución, comprar 2 NIC iguales con driver para linux)
- Que Bind9 asigne la IP en modo round-robin (esto lo supongo ya que si hago un ping al dominio manda un paquete a cada IP), y si esta IP a la que el dominio solicita los datos no es la mima que la IP de respuesta, ya que la IP de respuesta la decide el interfaz en bounding, la cosa no funciona.
Ya puesto, verás, he usado ISPConfig, pero tiene sus limitaciones, no me deja asignar más de una IP al dominio, así que he instalado Webmin, que sí me lo permite. Pero Webmin cre que trabajo
con BIND8. No si volver a empezar de cero con otro software, como VHCS. ¿Los conoces? ¿Que me recomiendas?
Gracias por tu ayuda, generalmente en los foros no he obtenido respuestas, y es que la gente no suele saber mucho de estos temás, y la gente que sabe no se pasa por los foros, por eso te pregunté en tu blog.
Gracias,
Alejandro

Drizzt dijo...

Hola

El bonding te puede funcionar sin problemas con dos tarjetas diferentes. En principio, no influye.
Lo que puede pasarte es lo siguiente: cada ADSL tiene asignada una IP. ONO puede tener filtros anti-spoof que hagan que si una IP de origen es distinta a la que tiene que llegar, tire el paquete.

Con el setup que tiene, lo más sencillo que veo es usar el round robbing del DNS. Entonces la conexión siempre irá por la misma IP que inicie el navegador - si pones un tiempo de caché adecuado, no tendría que resolver a la IP diferente -. Asegurándote de usar HTTP/1.1 consigues que se use la misma conexión para las diferentes peticiones hasta que se cierre.

- No he usado para DNS otro software aparte de bind o djbns. Tendría que mirar como se hace exactamente con este último. No he usado webmin, suelo toca a pelo los ficheros de configuración de ambos :)


Saludos