Elastic Load Balancer para múltiples aplicaciones web

13

Tengo Nwebapps Cada aplicación web tiene un nombre de host diferente en mi dominio y se implementa en 2 instancias que se ejecutan en AWS. En otras palabras, tengo 2Ninstancias, divididas en pares que ejecutan Ndistintas aplicaciones web.

Me gustaría configurar un solo AWS Elastic Load Balancer que enviará una solicitud a una de las dos instancias que la sirven según el Hostencabezado. ¿Es posible usar un solo ELB o tendré que implementar NELB, uno para cada par de instancias?

tesoro
fuente

Respuestas:

19

Un solo ELB enruta el tráfico exactamente a un conjunto de instancias y distribuye el tráfico entrante a todas las instancias "detrás" de él. No enruta selectivamente el tráfico en función de ningún análisis de capa 7 del tráfico, como el Host:encabezado.

Necesita un ELB para cada conjunto de instancias. Como lo describe, ese es un ELB para cada aplicación web.

Si su propósito principal para ejecutar ELB es descargar el SSL utilizando un certificado comodín (tengo un sistema diseñado así, con docenas de aplicaciones que viven en muchos-diferentes-dominios.my-wildcard-cert-domain.com), entonces las instancias "detrás" el ELB podría estar ejecutando un proxy inverso como HAProxy (u otras alternativas, como Varnish) que puede tomar decisiones de enrutamiento de capa 7 y luego reenviar el tráfico al subconjunto apropiado de máquinas detrás de ellos, lo que también permite equilibra la carga y tiene la ventaja de proporcionarle estadísticas y contadores de tráfico, agregados y separados.

       /-- HAProxy \  /----- instances hosting app #1  
ELB ---|            >> ----- instances hosting app #2 
       \-- HAProxy /  \----- instances hosting app #n 

Las instancias ^^^^ intermedias pueden evaluar los Host:encabezados (entre otras cosas) e incluso capturar el valor de la cookie de sesión en sus registros para su análisis.

Esta configuración también me permite ejecutar múltiples aplicaciones en subconjuntos de instancias superpuestas, cuando corresponda, y hacer muchas otras cosas que ELB por sí solo no admite directamente. También devuelve una página personalizada "503" en el caso de que una aplicación se sobrecargue o no esté disponible, lo que ELB no hace por sí solo. He representado 2 servidores proxy aquí, sin otra razón en particular que tu mención del número 2 en la pregunta. Mi configuración en realidad tiene 3, uno para cada zona de disponibilidad en la región donde se implementa.

Michael - sqlbot
fuente
3
En agosto de 2016, Amazon lanzó AWS Application Load Balancer, que permite el enrutamiento a diferentes grupos objetivo basados ​​en encabezados HTTP.
Jens Bannmann
2
@JensBannmann eso es cierto. Cuando lo lanzaron, las únicas reglas de enrutamiento que admitía se basaban en la ruta. En 2017, agregaron la capacidad de enrutar según el Host:encabezado. Esta respuesta fue correcta cuando la escribí en 2014, pero parece que es hora de una actualización. Gracias por llamar mi atención.
Michael - sqlbot
3

A partir de agosto de 2016, Amazon ELB ofrece dos tipos diferentes de equilibradores de carga:

  • Classic Load Balancer dirige todo el tráfico a un conjunto de instancias sin tener en cuenta el contenido del protocolo de la aplicación. Anteriormente, este era el único tipo ELB disponible.
  • Application Load Balancer puede enrutar el tráfico a diferentes grupos objetivo de acuerdo con reglas configurables basadas en rutas URL. La publicación de blog Nuevo: AWS Application Load Balancer menciona aplicaciones que consisten en varios microservicios como el caso de uso principal, y proporciona instrucciones de configuración detalladas.

Para su caso de uso, Application Load Balancer parece ideal. Sin embargo, está limitado a 10 reglas, por lo que solo funcionará fácilmente si su Ntamaño no es mayor a 10.

Jens Bannmann
fuente
0

En su lista de instancias ec2, ve dos instancias, ¿verdad? ¿Pero en cada caso tienes muchas aplicaciones web? ¿Utiliza host virtual para implementar cada uno?

Solo necesita un ELB para dividir la carga en sus hosts. Ejemplo:

External request > ELB (based on CNAME pointer)  > EC2 Instance. 

Creo que es mejor que me des más de tu escenario y tal vez pueda ayudarte.

Saludos.

ACTUALIZAR

Si tiene diferentes aplicaciones web en las instancias de EC2, debe tener dos equilibradores de carga elásticos (ELB). Cada uno para un par de instancias. Totalmente, cuatro instancias

Junior Rocha
fuente
En mi lista de instancias veo 2Naplicaciones. Hay N webapps, dos instancias para cada uno. Editaré la pregunta para aclarar esto.
thesamet
Respuesta actualizada
Junior Rocha