Frage AWS ELB Apache2 503-Dienst nicht verfügbar: Der Back-End-Server ist ausgelastet


Seit zwei Jahren betreiben wir ein paar Webseiten von Amazons AWS-Infrastruktur und seit ungefähr zwei Tagen fängt der Webserver an, ein- oder zweimal am Tag herunterzufahren, mit dem einzigen Fehler, den ich finden kann:

HTTP/1.1 503 Service Unavailable: Back-end server is at capacity

Es werden keine Alarme (CPU / Disk IO / DB Conn) von CloudWatch ausgelöst. Ich habe versucht, über die elastische IP auf die Seite zu gehen, um die ELB zu überspringen und bekam folgendes:

HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers. Retrying.

Ich sehe nichts Ungewöhnliches in den Apache-Logs und vergewissere mich, dass sie richtig gedreht wurden. Ich habe keine Probleme mit dem Zugriff auf die Maschine, wenn es per SSH "down" ist, und schaue auf die Prozessliste Ich sehe 151 apache2 Prozesse, die für mich normal erscheinen. Durch den Neustart des Apache wird das Problem vorübergehend behoben. Diese Maschine arbeitet nur als Webserver hinter einem ELB. Irgendwelche Vorschläge würden sehr geschätzt werden.

CPU-Auslastung       Durchschnitt: 7,45%, Minimum: 0,00%, Maximum: 25,82%

Speicherauslastung       Durchschnitt: 11.04%, Minimum: 8.76%, Maximum: 13.84%

Ausnutzung tauschen       Durchschnitt: N / A, Minimum: N / A, Maximum: N / A

Festplattenspeicherauslastung für / dev / xvda1 bereitgestellt am /       Durchschnitt: 62,18%, Minimum: 53,39%, Maximum: 65,49%

Lassen Sie mich klarstellen, dass das Problem bei der einzelnen EC2-Instanz und nicht bei der ELB liegt. Ich wollte das einfach nicht ausschließen, obwohl ich die elastische IP nicht erreichen konnte. Ich vermute, dass ELB nur die Ergebnisse der tatsächlichen EC2-Instanz zurückgibt.

Aktualisierung: 26.08.2014 Ich hätte das früher aktualisieren sollen, aber das "Fix" war, eine Momentaufnahme der "schlechten" Instanz zu machen und das resultierende AMI zu starten. Es ist seitdem nicht untergegangen. Ich habe mir den Gesundheitscheck angeschaut, als ich noch Probleme hatte, und konnte zur Gesundheitscheckseite gelangen (curl http://localhost/page.html) auch wenn ich Kapazitätsprobleme vom Load Balancer bekam. Ich bin nicht davon überzeugt, dass es ein Gesundheitscheck-Problem war, aber da niemand, einschließlich Amazon, eine bessere Antwort geben kann, markiere ich es als die Antwort. Vielen Dank.

Update: 06.05.2015 Ich dachte, ich würde hierher zurückkommen und sagen, dass der Teil des Problems, den ich jetzt fest glaube, die Einstellungen des Gesundheitschecks waren. Ich möchte nicht ausschließen, dass sie ein Problem mit dem AMI sind, weil es definitiv besser geworden ist, nachdem der Ersatz AMI gestartet wurde, aber ich fand heraus, dass unsere Gesundheitschecks für jeden Load Balancer und den, der am meisten Probleme hatte, unterschiedlich waren hatte einen wirklich aggressiven ungesunden Schwellenwert und eine Reaktionszeitüberschreitung. Unser Verkehr tendiert dazu, unvorhersehbar zu steigen und ich denke, zwischen den aggressiven Gesundheitschecks und den Verkehrsspitzen war es ein perfekter Sturm. Bei der Diagnose des Problems habe ich mich auf die Tatsache konzentriert, dass ich den Endpunkt des Gesundheitschecks im Moment erreichen könnte, aber es ist möglich, dass der Gesundheitscheck wegen Latenz fehlgeschlagen ist und wir dann einen hohen gesunden Schwellenwert (für diesen bestimmten ELB) hatten Nehmen Sie sich Zeit, um die Instanz wieder als gesund zu sehen.


36
2017-11-21 21:03


Ursprung


Ich habe mehr Informationen gefunden bei: meta.discourse.org/t/... - Andre Mesquita


Antworten:


Sie erhalten einen "Back-End-Server ist voll", wenn der ELB-Lastenausgleich seine Integritätsprüfungen durchführt und eine "Seite nicht gefunden" (oder einen anderen einfachen Fehler) aufgrund einer Fehlkonfiguration erhält (normalerweise mit dem NameVirtual-Host).

Versuchen Sie, den Protokolldateiordner mithilfe des Benutzeragenten "ELB-HealthChecker" zu bereinigen. z.B.

grep ELB-HealthChecker  /var/log/httpd/*

Dies gibt Ihnen normalerweise einen 4x oder 5x Fehler, der leicht behoben werden kann. z.B. Flooding, MaxClients etc. gibt dem Problem viel zu viel Kredit.

FYI Amazon: Warum nicht die Antwort von Anfrage angezeigt? Selbst ein Statuscode würde helfen.


37
2018-02-10 23:28





Ich bin gerade selbst auf dieses Problem gestoßen. Der Amazon ELB gibt diesen Fehler zurück, wenn keine fehlerfreien Instanzen vorhanden sind. Unsere Websites waren falsch konfiguriert, so dass der ELB-Healthcheck fehlgeschlagen war, was dazu führte, dass der ELB die beiden Server außer Betrieb nahm. Bei null fehlerfreien Websites gab der ELB 503-Dienst nicht verfügbar zurück: Der Back-End-Server ist ausgelastet.


17
2017-08-14 16:02





[EDIT nachdem ich die Frage besser verstanden habe] Da ich keinerlei Erfahrung mit dem ELB habe, denke ich immer noch, dass dies verdächtig nach dem 503-Fehler klingt, der ausgelöst wird, wenn Apache vor einem Tomcat steht und die Verbindung überflutet.

Wenn Apache mehr Verbindungsanforderungen liefert, als vom Backend verarbeitet werden können, füllen sich die Back-End-Eingangswarteschlangen so lange, bis keine Verbindungen mehr akzeptiert werden können. Wenn dies passiert, füllen sich die entsprechenden Ausgabewarteschlangen von Apache. Wenn die Warteschlangen voll sind, wirft Apache eine 503. Es würde folgen, dass das gleiche passieren könnte, wenn Apache das Backend ist, und das Frontend liefert mit einer solchen Geschwindigkeit, dass die Warteschlangen voll werden.

Die (hypothetische) Lösung besteht darin, die Eingangsanschlüsse des Backends und der Ausgangsanschlüsse des Frontends zu dimensionieren. Dies wird zu einem Balanceakt zwischen dem zu erwartenden Überflutungsniveau und dem verfügbaren RAM der beteiligten Rechner.

Überprüfen Sie in diesem Fall Ihre Einstellungen für Maxclients und überwachen Sie Ihre aktiven Mitarbeiter in Apache (mod_status.). Machen Sie dasselbe wenn möglich mit dem, was ELB hat, das Tomcat-Backlog, maxthreads usw. entspricht. Betrachten Sie kurz alles, was die Input Queues von Apache und die Output Queues von ELB betrifft.

Obwohl ich verstehe, dass es nicht direkt anwendbar ist, enthält dieser Link eine Anleitung zur Größenbestimmung für den Apache-Connector. Sie müssten die entsprechenden ELB-Warteschlangen-technischen Daten recherchieren und dann die mathematischen Berechnungen durchführen: http://www.cubrid.org/blog/dev-platform/maxclients-in-apache-und-its-effect-on-tomcat-during-full-gc/

Wie im folgenden Kommentar zu sehen ist, ist es nicht die einzige Möglichkeit, den Apache-Connector zu überlasten. Wenn einige Anforderungen langsamer bedient werden als andere, kann auch ein höherer Anteil dieser Anforderungen dazu führen, dass die Connector-Warteschlangen gefüllt werden. Dies war in meinem Fall der Fall.

Auch als mir das passierte, war ich verblüfft, dass ich den Apache-Dienst neu starten musste, um nicht wieder 503: s zu bekommen. Einfach auf die Steckerflutung zu warten war nicht genug. Ich habe das nie verstanden, aber man kann spekulieren, ob Apache vielleicht aus seinem Cache kommt?

Nachdem die Anzahl der Worker und die entsprechenden Pre-Fork-Maxclients-Einstellungen erhöht wurden (dies war Multithread-Apache unter Windows, der ein paar andere Direktiven für die Warteschlangen enthält, wenn ich mich richtig erinnere), verschwand das 503-Problem. Ich habe die Berechnungen nicht gemacht, sondern die Werte nur so lange optimiert, bis ich einen großen Abstand zum Spitzenverbrauch der Warteschlangen-Ressourcen beobachten konnte. Ich lasse es dabei gehen.

Hoffe, das war eine Hilfe.


5
2017-11-21 21:29



Ich habe gerade gemerkt, dass Sie den Apache schreiben, ist Ihr Backend. Dennoch würden die Arbeiter, Maxclients usw. spielen, denke ich, aber meine Antwort ist zu schwach und muss komplett neu geschrieben werden. Ich lösche es vielleicht stattdessen. Lektion gelernt: Lesen Sie die Frage richtig. - ErikE
Vielen Dank. Um dies zu erreichen, müsste der Verkehr stark ansteigen. Und wenn der Verkehr einmal nachgelassen hat, sollten sich die Apache nicht erholen können? - JSP
In der Theorie ja. Als dies jedoch passiert ist, musste ich den Dienst neu starten. Dies veranlasste mich zuerst an Stellen zu suchen, die nichts mit dem zu tun hatten, was tatsächlich passierte, aber selbst nach richtiger Diagnose und Heilung war ich immer noch nicht in der Lage, die Notwendigkeit eines Neustartes zu verstehen. Ich vermutete stillschweigend, dass Apache auf Windows ausgeführt wurde, da ich eine nicht verwandte Bugreferenz fand, die anscheinend nur mit dieser Kombination auftauchte. Sehr seltsam auf jeden Fall. - ErikE
Und ja, es gab Verkehr, der die Anschlüsse überwältigte - nicht spikes (für uns), aber zu viel. Es war ziemlich sicher, Anfragen, die langsamer zu bedienen waren, die zufällig zufällig zu oft kamen. Nach dem Überwachen eines Bits und nur dem Erhöhen verwandter Werte verschwanden die 503 zusammen mit der Notwendigkeit für nachfolgende Neustarts. - ErikE


Sie können die Werte des Gesundheitscheckers elb erhöhen, so dass eine einzige langsame Antwort keinen Server von elb zieht. besser, wenn ein paar Benutzer den Dienst nicht verfügbar haben, als wenn die Seite für alle nicht verfügbar ist.

Bearbeiten: Wir sind in der Lage zu entkommen, ohne Vorwärmen Cache, indem Sie Health Check Timeout auf 25 Sekunden ...... nach 1-2 Minuten ... Website reagiert als Hölle

EDIT :: starten Sie einfach eine Reihe von On-Demand, und wenn Ihre Überwachungstools Management zeigt, wie schnell Sie sind, dann nur RI amazon: P

BEARBEITEN: es ist möglich, eine einzige Back-End-elb registrierte Instanz ist nicht genug. Starten Sie einfach ein paar mehr, und registrieren Sie sie mit elb, und das wird Ihnen helfen, Ihr Problem einzugrenzen


4
2017-11-21 21:57





Es ist ein paar Jahre zu spät, aber hoffentlich hilft das jemandem aus.

Ich habe diesen Fehler angezeigt, als der Instanz hinter dem ELB keine ordnungsgemäße öffentliche IP zugewiesen wurde. Ich musste manuell eine Elastic IP erstellen und sie der Instanz zuordnen, nach der der ELB sie fast augenblicklich aufnahm.


0
2017-08-05 02:36