
In den letzten Jahren haben wir Varnish als Cache und Load Balancer vor mehreren Apache-Servern ausgeführt, die mehrere tausend Websites bedienen.
Wir verwenden monit auch, um sicherzustellen, dass Varnish neu gestartet wird, wenn es einmal beendet wird. Der Varnish-Abschnitt in monitrc sieht folgendermaßen aus:
# Check varnish on port 80
check process varnish with pidfile /var/run/varnishd.pid
start program = "/etc/init.d/varnish start"
stop program = "/etc/init.d/varnish stop"
if failed host 127.0.0.1 port 80 protocol http
and request "/monit-check-url"
then restart
Das hat mindestens drei Jahre lang gut funktioniert. Gelegentlich kommt es bei der Port-80-Prüfung zu Fehlern, aber Monit startet Varnish entsprechend neu und dies ist für Benutzer im Allgemeinen unbemerkt.
In den letzten Wochen kam es jedoch immer wieder zu solchen Ausfällen, die normalerweise mehrere Stunden andauern, und Benutzer bemerken Verbindungsabbrüche. Heute war es besonders schlimm.
Es gibt keine Hinweise im Syslog (es ist übrigens eine Debian-Box), wie im Abschnitt „Varnish stürzt ab“ unter folgendem Link vorgeschlagen:https://www.varnish-cache.org/docs/3.0/tutorial/troubleshooting.htmlund alles, was wir dort sehen, ist, dass die Prüfung von Port 80 durch Monit fehlschlägt und Varnish dann gestoppt und neu gestartet wird.
Darüber hinaus sehen wir keine Bandbreitenspitzen oder Zugriffszahlenspitzen auf die Backend-Webserver, die auf einen Ausfall bei höherer als normaler Belastung schließen lassen würden.
Wir haben Varnish 3.0.3 verwendet, das ich auf 3.0.7 aktualisiert habe, aber das Problem besteht weiterhin. An dieser Box wurden keine weiteren Änderungen vorgenommen, die mit dem Beginn der Probleme zusammenhingen, und die Varnish-Konfiguration wurde schon seit geraumer Zeit nicht mehr geändert.
Hat jemand ähnliche Erfahrungen mit Varnish gemacht oder Vorschläge zur weiteren Fehlerbehebung? Könnte es sich um eine Art Angriff handeln?
Für jede Hilfe und jeden Ratschlag bin ich sehr dankbar!
Antwort1
Ihr Ansatz scheint hier etwas plump, da es viele Gründe dafür gibt, warum eine Anfrage fehlschlagen kann. Nicht alle davon sind Varnish-Probleme (z. B. Verbindungsprobleme, Fehler auf den Backends usw.). Ein Neustart von Varnish führt während des Neustarts zu einer Unterbrechung und sollte daher nur als letztes Mittel eingesetzt werden.
Bevor Sie irgendetwas neu starten, empfehle ich, varnishadm debug.health
die Varnish-Box auszuführen und zu prüfen, in welchem Zustand sich Varnish nach Einschätzung Ihres Backends befindet. Abhängig vom Ergebnis können Sie entscheiden, wo Sie weiter nachsehen möchten:
- Wenn das Backend als fehlerhaft gilt, liegt das Problem zwischen Varnish und dem Backend (oder im Backend selbst). Überprüfen Sie die Vernetzung zum Backend sowie die Überwachung des Backends.
- Wenn das Backend als intakt gilt, liegt das Problem zwischen Monit und Varnish. Überprüfen Sie die Vernetzung zum Varnish-Server und debuggen Sie die Überwachung selbst.
- Wenn der Varnishadm-Prozess keine Verbindung herstellen kann, liegt das Problem bei Varnish selbst. Überprüfen Sie, welche Varnish-Prozesse ausgeführt werden, und suchen Sie in Ihren Protokollen nach Fehlermeldungen von Varnish.