¿Cómo puedo equilibrar el tráfico web entrante entre servidores N apache?

12

Estoy buscando usar algo como Heartbeat / Squid / Varnish / etc para equilibrar la cantidad de tráfico entrante entre las instancias internas de apache. Esto tendría que ser software y no hardware, ya que todas mis cosas se ejecutan en VPS. No tengo mucha experiencia en esta área, así que lo siento si estoy haciendo un mal uso de la terminología y seleccionando los paquetes incorrectos.

He elaborado algo para ilustrar lo que busco. El lado verde es el aspecto que tendría la configuración inicial y el lado azul es el aspecto que tendría después de agregar más instancias de apache debido al aumento del tráfico. Puede que no sea así como funcionan estas cosas, pero lo ideal sería agregar la IP de los equilibradores al DNS del dominio. Luego, los equilibradores verán cuántas conexiones hay en cada instancia de Apache (a través de una lista de configuración de IP internas o IP eternas) y distribuirán las conexiones por igual. En el azul hay un segundo equilibrador, ya que estoy seguro de que en algún momento el equilibrador también necesitará ayuda.

Tal vez estoy haciendo esto mal, pero estoy buscando ayuda sobre cuáles deberían ser los "equilibradores" y las mejores prácticas sobre cómo configurarlos.

Cualquier ayuda sería genial. texto alternativo


fuente
1
perdóname, pero ¿qué programa usaste para tus dibujos?
Premio
1
@Prix - Parece que Visio ( office.microsoft.com/en-us/visio )
malonso

Respuestas:

4

Casi cualquier "proxy inverso" hará lo que le pidas.

Por ejemplo, Varnish, Pound y HAProxy son buenos en lo que hacen, pero también tienen sus diferencias; sin embargo, por lo que estás preguntando, cualquiera de ellos servirá. Personalmente, creo que sería mejor con HAProxy, pero eso es solo una suposición.

Es mejor que lea un artículo sobre equilibradores de carga para ayudarlo a decidir qué tipo necesita: http://1wt.eu/articles/2006_lb/

Además, podría considerar usar un servicio preconstruido para esto, como ejecutar su software en Elastic Compute Cloud de Amazon y usar su Elastic Load Balancing.

Desnudo
fuente
2

Al principio, hay una pregunta importante que debe responderse:
¿necesita que las sesiones de usuario sean manejadas por los equilibradores de carga y siempre conducidas al mismo servidor web (si está vivo)?

  • sesiones no requeridas : en este caso, debe usar el eficiente programa nginx como equilibrador de carga. La configuración es fácil de configurar, donde básicamente solo tiene que indicar la lista de servidores web en una upstream upstream_name { server1, ..., serverN }declaración, luego, para un dominio dado, necesita una proxy_pass upstream_namedirectiva simple .
    Ver wiki de Nginx .

  • sesión requerida hay una configuración similar para libra donde usted indica el nombre de la cookie que albergará la ID de sesión ( ID MYCOOKIENAME), luego una lista de BACKENDtodos sus servidores.
    Vea, por ejemplo, el ejemplo de configuración de Pound .

Cuando surja la necesidad de varios equilibradores de carga, es posible que desee heartbeatoptar por una configuración que garantice que solo un equilibrador monte la IP virtual para un dominio determinado (si se requieren sesiones, o monte ambos y alimente DNS con dos direcciones IP para ejemplo). Tal vez esto debería detallarse en otra pregunta en el momento en que sea necesario (a medida que las herramientas evolucionan rápidamente).
Vea también este enlace, por ejemplo.

Ø de anillo
fuente
1

Debería necesitar una muy buena razón para introducir una complejidad adicional y un único punto de falla en su arquitectura.

Balanceo de carga Round-Robin

  • no cuesta nada
  • es simple de implementar y administrar
  • implementa la conmutación por error en el cliente: el único lugar donde se puede detectar de manera confiable la falla
  • admite implícitamente la afinidad con el servidor, pero aún permite la conmutación por error sin los problemas de gestión de sesión asociados con sesiones fijas
  • no requiere software / hardware / configuración adicional en los nodos del clúster

Me sorprende la cantidad de información errónea que se genera sobre el round-robin. Si yo fuera una persona cínica, me preguntaría si existe alguna conexión con los proveedores que producen hardware costoso y grande para equilibrar la carga.

Los únicos puntos que concederé es que

  1. Las direcciones IPV4 se están volviendo escasas y, por lo tanto, caras, pero aún así son muchas. mucho más barato que decir un Cisco CSS.

  2. Cada vez más Internet se ejecuta en servicios web, y no todos los desarrolladores implementan el soporte de DNS de acuerdo con las especificaciones . Pero cada navegador que he usado funciona como debería

symcbean
fuente
"no requiere software adicional": bueno, requiere que la aplicación web haya compartido el estado de la sesión (inicio de sesión, contenido de una cesta de la compra, etc.). Y DNS RR puede tener un equilibrio de carga desigual durante largos períodos de tiempo. Sí, DNS RR es un método viable, pero no es claramente superior a las alternativas ...
Jesper M
0

Para los equilibradores, puede consultar LVS en http://www.linuxvirtualserver.org/ , tal vez ejecutando ldirectord y heartbeat para dirigir el tráfico y realizar la conmutación por error.

jaq
fuente
0

Nginx es increíble como proxy ascendente, lo he usado con gran éxito en una configuración que hace 1M + únicos diariamente

Robert Swisher
fuente
0

Bien, esto fue preguntado hace un tiempo, y llego tarde a la fiesta. Aún así, hay algo que agregar aquí.

Jackie, casi lo has clavado. Su ilustración muestra cómo se maneja el equilibrio de carga en la mayoría de las instalaciones pequeñas y medianas.

Debería leer la introducción de equilibrio de carga de Willy Tarreau con la que Nakedible se vinculó. Todavía es válido, y es una buena introducción.

Debe considerar cómo se ajustan a sus necesidades:

  • Equilibradores de carga de nivel TCP / IP (Linux Virtual Server y otros). Más bajo por sobrecarga de conexión, velocidad más alta, no puede "ver" HTTP.
  • Balanceadores de carga de nivel HTTP (HAProxy, nginx, Apache 2.2, Pound, Microsoft ARR y más). Mayor sobrecarga, puede ver HTTP, puede gzip HTTP, puede hacer SSL, puede hacer un equilibrio de carga de sesión fijo.
  • Proxys inversos HTTP (Apache Traffic Server, Varnish, Squid). Puede almacenar objetos aptos para caché (algunas páginas web, css, js, imágenes) en RAM y reenviarlos a clientes posteriores sin involucrar al servidor web de fondo. A menudo puede hacer algunas de las mismas cosas que hacen los equilibradores de carga HTTP L7.

hay un segundo equilibrador ya que estoy seguro de que en algún momento el equilibrador también necesitará ayuda.

Pues claro. Pero el equilibrio de carga es simple y, a menudo, un solo equilibrador de carga puede ir rápido . Enlace a este artículo, que llamó la atención en la web, como solo un ejemplo del rendimiento que puede proporcionar un único servidor moderno . No use múltiples LB antes de que lo necesite. Cuando necesita un enfoque común es equilibradores de carga de nivel IP en el frente (o DNS Round Robin), yendo a equilibradores de carga de nivel HTTP, yendo a servidores proxy y servidores web.

ayuda sobre cuáles deberían ser los "equilibradores" y las mejores prácticas sobre cómo configurarlos.

El punto problemático es el manejo del estado de la sesión y, en cierta medida, el comportamiento del estado de falla. Configurar los equilibradores de carga en sí es relativamente sencillo.

Si solo está utilizando 2-4 servidores de aplicaciones web de back-end, el hash estático basado en la dirección IP de origen puede ser viable. Esto evita la necesidad de un estado de sesión compartido entre los servidores de aplicaciones web. Cada nodo de la aplicación web ve 1 / N del tráfico general, y la asignación de cliente a servidor es estática en el funcionamiento normal. Sin embargo, no es una buena opción para una instalación más grande.

Los dos mejores algoritmos de equilibrio de carga, en el sentido de que tienen un comportamiento benigno bajo una carga alta e incluso una distribución de carga, son round robin y verdadero equilibrio de carga aleatorio. Ambos requieren que su aplicación web tenga un estado de sesión global disponible en los nodos de aplicaciones web. Cómo se hace esto depende de la pila tecnológica de la aplicación web; pero generalmente hay soluciones estándar disponibles para esto.

Si ni el hashing estático ni el estado de sesión compartida son adecuados para usted, entonces la opción es generalmente el equilibrio de carga de ' sesión fija ' y el estado de sesión por servidor. En la mayoría de los casos, esto funciona bien y es una opción totalmente viable.

los equilibradores verían cuántas conexiones hay en cada instancia de apache (a través de alguna lista de configuración de IP internas o IP eternas) y distribuye las conexiones por igual

Sí, algunos sitios usan esto. Hay muchos nombres para los diferentes algoritmos de equilibrio de carga que existen. Si puede elegir round robin o aleatorio (o round robin ponderado, aleatorio ponderado), le recomendaría que lo haga, por las razones indicadas anteriormente.

Lo último: no olvide que muchos proveedores (F5, Cisco y otros de gama alta, tecnologías Coxote Point y Kemp a precios más razonables) ofrecen dispositivos de equilibrio de carga maduros .

Jesper M
fuente