Bei AWS möchten wir ELBs verwenden, um EC2-Instanzen, die mehrere Anwendungen hosten, auszugleichen. Idealerweise möchten wir einen Gesundheitscheck für die Anwendung haben.
Mit AWS Elastic Load Balancers können Sie derzeit jedoch nur einen Ort für eine Integritätsprüfung anpingen.
Was wäre der beste Weg, um eine Integritätsprüfung mit ELB zu implementieren, die den Status mehrerer Anwendungen berücksichtigt, die auf jeder EC2-Instanz bereitgestellt werden?
amazon-web-services
amazon-elb
healthcheck
Andrei Fierbinteanu
quelle
quelle
Antworten:
Hier sind zwei Möglichkeiten, dies zu lösen.
Die erste Option besteht darin, dem Host eine weitere Integritätsprüfung hinzuzufügen, die die Integrität überprüft und HTTP 200 an die ELB zurückgibt, wenn die Logik besagt, dass Sie den Host online halten möchten. Die Logik dort liegt natürlich bei Ihnen. Der Nachteil hierbei wäre, dass bei erfolgreicher Bereitstellung von App 2 auf einigen Hosts alle Hosts weiterhin "fehlerfrei" sind und Datenverkehr empfangen.
Eine andere Möglichkeit besteht darin, für jede Anwendung eine zusätzliche ELB zu verwenden. Sie können mehrere ELBs auf dieselben Backend-EC2-Instanzen verweisen, und die Kosten dafür sind recht gering. Auf diese Weise können Sie die Integritätsprüfung pro Anwendung durchführen und Hosts mit Problemen auf Anwendungsebene löschen, anstatt alles oder nichts zu tun.
Bearbeiten: Bitte beachten Sie, dass dies eine ältere Antwort ist und spezifisch für ELB und nicht für ALB ist. ALB unterstützt nativ separate Ziele auf einem Host.
quelle
Die Verwendung einer ELB pro App ist der richtige Weg.
Erstens benötigen Sie sie möglicherweise trotzdem, wenn sich jede Anwendung in einer eigenen Domäne befindet und Sie SSL unterstützen müssen. Amazon ELBs erlauben derzeit nur ein SSL-Zertifikat für jede Domain und erfordern separate ELBs für jede SSL-fähige Domain. (Wildcard-SSL-Zertifizierungen sind eine Ausnahme).
Die Herausforderung hierbei besteht darin, dass ELB-Integritätsprüfungen derzeit nicht an eine bestimmte virtuelle Domäne gerichtet werden können, die auf einer EC2-Instanz gehostet wird. (Es wird kein "Host:" - Header gesendet). ELB-Integritäts-Pings werden immer in die Standarddomäne verschoben, als hätten Sie die IP-Adresse für die EC2-Instanz in Ihren Browser geladen. Daher ist etwas Klebstoff erforderlich, um die Integritätsprüfungen für die Standarddomäne zu erhalten und dann mit dem Integritätsstatus einer bestimmten Anwendung zu antworten.
Hier ist eine funktionierende Beispielkonfiguration, die einer Nginx-
server
Direktive hinzugefügt werden könnte . Es würde auf jeder der EC2-Instanzen installiert, deren Lastausgleich erfolgt.In der Einstellung "Health Check" der ELB für "first-application.com" wählen Sie "HTTP" und Port 80 aus und geben einen Pfad wie folgt ein:
/health-check/first-application.com
Wenn die obige Nginx-Konfiguration auf dem Host ausgeführt wird, wird die Anforderung in der Standarddomäne empfangen und die Antwort von der Nginx-Konfiguration auf demselben Host für https://first-application.com/api/v1/status übertragen
Bei diesem Ansatz gibt es in Nginx keine Konfiguration pro App. Solange jede App einen eindeutigen Domainnamen hat, müssen Sie nur sicherstellen, dass Sie für jede App eine entsprechende ELB einrichten.
quelle
Am 11. August 2016 führte Amazon Application Load Balancers ein . Mit diesen können Sie mehrere Zielgruppen angeben, von denen jede ihre eigene Art der Integritätsprüfung hat. Dies ist jetzt mit einem einzigen Load Balancer möglich!
quelle