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.
Respuestas:
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.
fuente
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 unaproxy_pass upstream_name
directiva 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 deBACKEND
todos 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
heartbeat
optar 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.
fuente
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
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
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.
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
fuente
Comience su búsqueda aquí: http://httpd.apache.org/docs/2.1/mod/mod_proxy_balancer.html y http://www.barneyb.com/barneyblog/2009/02/26/apache-httpds-mod_proxy_balancer/
fuente
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.
fuente
Nginx es increíble como proxy ascendente, lo he usado con gran éxito en una configuración que hace 1M + únicos diariamente
fuente
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:
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.
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.
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 .
fuente