Elastic Load Balancer für mehrere Webapps

13

Ich habe NWebapps. Jede Webanwendung wird unter einem anderen Hostnamen in meiner Domain bereitgestellt und auf zwei Instanzen in AWS ausgeführt. Mit anderen Worten, ich habe 2NInstanzen, die in Paare unterteilt sind und Nunterschiedliche Webanwendungen ausführen.

Ich möchte einen einzelnen AWS Elastic Load Balancer einrichten, der eine Anfrage basierend auf dem HostHeader an eine der beiden Instanzen weiterleitet, die sie bedienen . Ist dies mit einer einzelnen ELB möglich oder muss eine ELB Nfür jedes Instanzenpaar bereitgestellt werden?

thesamet
quelle

Antworten:

19

Eine einzelne ELB leitet den Datenverkehr an genau einen Satz von Instanzen weiter und verteilt den eingehenden Datenverkehr auf alle Instanzen "dahinter". Es wird kein selektiver Datenverkehr auf der Grundlage einer Layer 7-Analyse des Datenverkehrs wie z. B. des Host:Headers weitergeleitet.

Sie benötigen eine ELB für jede Menge von Instanzen. Wie Sie es beschreiben, ist das eine ELB für jede Webanwendung.

Wenn Ihr primärer Zweck für die Ausführung von ELB darin besteht, SSL mit einem Platzhalterzertifikat zu entladen (ich habe ein System wie dieses entwickelt, mit Dutzenden von Apps, die unter many-different-domains.my-wildcard-cert-domain.com installiert sind), dann die Instanzen „hinter“ die ELB könnte einen Reverse - Proxy wie HAProxy (oder mehr anderen Alternativen, wie Varnish) ausgeführt werden , die können Layer-7 - Routing - Entscheidungen treffen und dann nach vorne um den Verkehr auf die entsprechende Teilmenge von Maschinen hinter ihnen, die auch anspruchsvollere erlaubt Lastenausgleich und bietet den Vorteil, dass Sie Statistiken und Verkehrszähler erhalten, aggregiert und getrennt.

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

Die Zwischeninstanzen von ^^^^ können Host:(unter anderem) die Header auswerten und sogar den Wert des Sitzungscookies in ihren Protokollen zur Analyse erfassen.

Mit diesem Setup kann ich auch mehrere Apps in überlappenden Teilmengen von Instanzen ausführen und viele andere Dinge tun, die von ELB selbst nicht direkt unterstützt werden. Es wird auch eine benutzerdefinierte "503" -Seite zurückgegeben, wenn eine Anwendung überlastet oder auf andere Weise nicht mehr verfügbar ist, was ELB nicht alleine tut. Ich habe hier 2 Proxy-Server dargestellt, und zwar aus keinem anderen Grund als der Erwähnung der Nummer 2 in der Frage. Mein Setup enthält 3, eine für jede Verfügbarkeitszone in der Region, in der diese bereitgestellt wird.

Michael - sqlbot
quelle
3
Im August 2016 startete Amazon AWS Application Load Balancer, mit dem basierend auf HTTP-Headern das Routing an verschiedene Zielgruppen ermöglicht wird.
Jens Bannmann
2
@JensBannmann das stimmt. Als sie es veröffentlichten, basierten die einzigen unterstützten Routing-Regeln auf dem Pfad. Im Jahr 2017 wurde die Möglichkeit hinzugefügt, Routen basierend auf dem Host:Header zu erstellen. Diese Antwort war richtig, als ich sie 2014 schrieb, aber es sieht so aus, als ob es Zeit für ein Update ist. Vielen Dank, dass Sie mich darauf aufmerksam gemacht haben.
Michael - sqlbot
3

Ab August 2016 bietet Amazon ELB zwei verschiedene Typen von Load Balancern an:

  • Classic Load Balancer leitet den gesamten Datenverkehr an eine Instanz weiter, ohne den Inhalt des Anwendungsprotokolls zu berücksichtigen. Bisher war dies der einzige verfügbare ELB-Typ.
  • Application Load Balancer kann Datenverkehr nach konfigurierbaren Regeln basierend auf URL-Pfaden an verschiedene Zielgruppen weiterleiten. Der Blogbeitrag Neu - AWS Application Load Balancer nennt Anwendungen, die aus mehreren Microservices bestehen, als Hauptanwendungsfall und enthält detaillierte Anweisungen zur Einrichtung.

Für Ihren Anwendungsfall scheint Application Load Balancer ideal zu sein. Es ist jedoch auf 10 Regeln beschränkt, sodass es nur dann problemlos funktioniert, wenn Sie Nnicht größer als 10 sind.

Jens Bannmann
quelle
0

Auf Ihrer Liste der ec2-Instanzen sehen Sie zwei Instanzen, richtig? Aber hast du auf jeder Instanz viele Webapps? Sie verwenden einen virtuellen Host, um jeden einzelnen bereitzustellen?

Sie benötigen nur eine ELB, um die Ladung auf Ihre Hosts aufzuteilen. Beispiel:

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

Ich denke das ist besser du gibst mir mehr von deinem Szenario und vielleicht kann ich dir helfen.

Grüße.

AKTUALISIEREN

Wenn Sie auf den EC2-Instanzen unterschiedliche Webanwendungen haben, benötigen Sie zwei Elastic Load Balancers (ELB). Jeder für ein Paar von Instanzen. Insgesamt vier Instanzen

Junior Rocha
quelle
Auf meiner Instanzliste werden 2NApps angezeigt. Es gibt N Webapps mit jeweils zwei Instanzen. Ich werde die Frage bearbeiten, um dies zu klären.
thesamet
Aktualisierte Antwort.
Junior Rocha