webentwicklung-frage-antwort-db.com.de

Warum meldet der elastische Lastausgleich "Außer Betrieb"?

Ich versuche, Elastic Load Balancing (ELB) in AWS einzurichten, um die Anforderungen auf mehrere Instanzen aufzuteilen. Ich habe mehrere Images meines Webservers erstellt, die auf demselben AMI basieren, und ich bin in der Lage, in jedes einzeln zu wechseln und auf die Site über jeden öffentlichen DNS zuzugreifen.

Ich habe jede meiner Instanzen zum Load Balancer hinzugefügt, aber alle kommen mit dem Status: Out of Service zurück, weil sie die Integritätsprüfung nicht bestanden haben. Ich bin meistens verwirrt, weil ich von jedem öffentlichen DNS auf jede Instanz zugreifen kann, aber ich bekomme eine Zeitüberschreitung, wenn ich den DNS-Namen des Load Balancer besuche.

Ich habe versucht, alle Dokumente durchzulesen und zu googeln, aber ich stecke fest. Jegliche Hinweise oder Links in die richtige Richtung wären sehr dankbar.

39
jkeesh

Ich habe den AWS-Support zu demselben Problem kontaktiert. Anscheinend weiß ihr System nicht, wie mit Fällen umzugehen ist, bei denen alle Instanzen hinter der ELB für längere Zeit angehalten wurden. Die AWS-Unterstützung kann die Status manuell aktualisieren, wenn Sie sie sofort benötigen. 

Es wurde vorgeschlagen, die ec2-Instanzen von der ELB abzumelden, anstatt sie einfach anzuhalten und erneut zu registrieren, wenn Sie erneut beginnen. 

20
batman 74

Die Zustandsprüfung wird (standardmäßig) durch Zugriff auf index.html für jede in Load Balancer integrierte Instanz durchgeführt. Wenn Sie keine index.html im Dokumentstammverzeichnis der Instanz haben, schlägt die Standardzustandsprüfung fehl. Sie können beim Erstellen eines elastischen Lastenausgleichs ein benutzerdefiniertes Protokoll, einen Port und einen Pfad für die Funktionsprüfung festlegen.

16
ivankoni

Endlich habe ich das funktioniert. Das Problem war mit den Amazon-Sicherheitsgruppen , da ich den Zugriff auf Port 80 auf wenige Computer in meinem Entwicklungsbereich beschränkt habe und der Load Balancer nicht auf den Apache-Server in der Instanz zugreifen konnte. Sobald der Lastverteiler Zugriff auf meine Instanz erhalten hat, erhält er In Service .

Ich habe es in meiner Instanz mit tail -f /var/log/Apache2/access.log überprüft, um zu überprüfen, ob der Load Balancer versucht hat, auf meinen Server zuzugreifen, und um zu sehen, welche Antwort der Server dem Load Balancer gibt.

Hoffe das hilft.

8
Parmaia

Wenn Ihr Webserver einwandfrei läuft, bedeutet dies, dass für die Integritätsprüfung eine URL verwendet wird, die nicht 200 zurückgibt. 

Ein Trick, der für mich funktioniert: Gehen Sie auf die Instanz, geben Sie curl localhost ein: 80/pathofyourhealthcheckurl

Nachdem Sie Ihre Health-Check-URL angepasst haben, um immer eine Antwort von 200 zu erhalten.

2
user1384132

In meinem Fall erlaubten die Regeln für Sicherheitsgruppen, die der Instanz und dem Lastenausgleich zugewiesen wurden, keinen Verkehr zwischen den beiden. Dies führte dazu, dass die Integritätsprüfung fehlschlug.

1
bitstream

Ich hatte das gleiche Problem. Ich habe das Ping-Protokoll von https in ssl geändert. es funktionierte !

Gehen Sie zu Health Check -> klicken Sie auf Edit Health Check -> Ändern Sie das Ping-Protokoll von HTTPS zu SSL 
 Ping-Ziel-SSL: 443 
 Timeout 5 Sekunden 
 Intervall 30 Sekunden 
 Ungesunder Schwellenwert 5 
 Gesunder Schwellenwert 10 
1
Giri

Ich füge das hinzu, weil ich Stunden damit verbracht habe, es herauszufinden ...

Wenn Sie den Endpoint für die Integritätsprüfung konfiguriert haben, aber weiterhin Out of Service lautet, kann dies daran liegen, dass Ihr Server die Anforderung umleitet (d. H. Eine 301- oder 302-Antwort zurückgibt).

Wenn Ihr Endpunkt beispielsweise /app/health/ sein soll, Sie jedoch nur /app/health (kein nachstehender Schrägstrich) in das Feld für den Endpunkt der Integritätsprüfung Ihrer ELB eingeben, erhalten Sie keine 200-Antwort, sodass die Integritätsprüfung fehlschlägt.

0
Nick Yap

Ich habe den gleichen Fehler erhalten, in meinem Fall musste die bestimmte html-Datei aus dem s3-Bucket nach "/ var/www/html" kopiert werden. Dieselbe HTML-Datei, auf die im Pfad für den Lastenausgleich verwiesen wird.

Das Problem wurde nach dem Kopieren der HTML-Datei behoben. 

0
SuperSA

Ich hatte ein ähnliches Problem. Das Problem scheint darauf zurückzuführen zu sein, dass ich eine HTTP-Integritätsprüfung und auch .htaccess zum Kennwortschutz der Site verwendet habe. 

0

Für alle anderen, die diesen Thread sehen, da dieser nicht aufgelistet ist:

Überprüfen Sie, ob die Integritätsprüfung den Port überprüft, den der antwortende Server überwacht.

Z.B. node.js läuft auf Port 3000 -> Healthcheck auf Port 3000 richten;

Nicht Port 80 oder 443. Diese werden von Ihrem ALB verwendet.

Ich habe einen Morgen damit verbracht. Ja.

0
user1429671

Ich habe an dem AWS-Tutorial zum Hosten einer Web-App gearbeitet und bin auf dieses Problem gestoßen. Schritt 7b besagt Folgendes:

Msgstr "Ping - Pfad auf/setzen. Dadurch werden Abfragen an Ihre Standardseite gesendet, unabhängig davon, ob.

Sie hätten in Zitate wie "/" den Schrägstrich einfügen können. Stellen Sie sicher, dass Sie dies in Ihren Gesundheitschecks haben und nicht dieses "/". .

0
Scott123180

Ich möchte Ihnen einen allgemeinen Weg zur Lösung dieses Problems bieten. Wenn Sie Ihren Webserver wie Apache oder Nginx eingerichtet haben, versuchen Sie, die Zugriffsprotokolldatei zu lesen, um zu sehen, was passiert ist. In meiner Gelegenheit meldet es 401 error, weil ich die grundlegende Auth in nginx hinzugefügt habe. Genau wie @ivankoni kann es natürlich vorkommen, dass das von Ihnen überprüfte Dokument nicht vorhanden ist.

0
JackXu