Apache-proxy-load-balancing-backend-server-Ausfall-Erkennung
Hier ist mein Szenario (von meinem Vorgänger):
Zwei Apache-Server, die reverse-proxy-Pflicht für eine Vielzahl von mixed-backend-Webserver (Apache, IIS, Tomcat, etc.). Es gibt einige Seiten, für die wir mehrere back-End-web-Server, und in den Fällen, dass wir etwas tun wie:
<Proxy balancer://www.example.com>
BalancerMember http://192.168.1.40:80
BalancerMember http://192.168.1.41:80
</Proxy>
<VirtualHost *:80>
ServerName www.example.com:80
CustomLog /var/log/apache2/www.example.com.log combined
<Location />
Order allow,deny
Allow from all
ProxyPass balancer://www.example.com/
ProxyPassReverse balancer://www.example.com/
</Location>
</VirtualHost>
So, in diesem Beispiel habe ich eine Website (www.example.com) in der proxy-Server-configs, und diese Website umgeleitet auf eine oder die andere der beiden backend-Server 192.168.1.40 und .41.
Ich bin der Bewertung, um sicherzustellen, dass wir sind fehlertolerant auf alle unsere web-services (ich habe bereits die zwei reverse-proxy-Server in eine gemeinsam genutzte IP-Adressen-cluster für diesem Grund), und ich möchte sicherstellen, dass der Lastenausgleich die backend-Server sind fehlertolerant, wie gut. Aber ich habe Schwierigkeiten, herauszufinden, wenn backend-Fehler-Erkennung (und der Logik zu vermeiden, die ausgefallene back-End-server) ist in der mod_proxy_balancer Modul...
Also, wenn 192.168.202.40 nach unten geht, wird der Apache erkennt (ich werde verstehen, wenn es ein Fehler bei der Anforderung den ersten) und automatisch leiten Sie alle Anfragen auf die anderen backend, 192.168.202.41? Oder wird er weiterhin die balance von Anforderungen zwischen den failed backend und die operativen backend?
Habe ich einige Hinweise gefunden, die in der Apache-Dokumentation für mod_proxy und mod_proxy_balancer, die scheinen zu zeigen, dass Fehler erkannt werden können ("maxattempts = Maximale Anzahl von failover versucht, bevor aufgegeben wird.", "failonstatus = Ein Einzel-oder Komma-getrennte Liste von HTTP-status-codes. Wenn gesetzt, wird diese Kraft der Arbeiter in den Fehler-Zustand, wenn das backend gibt alle status-code in der Liste."), aber nach ein paar Tagen der Suche habe ich nichts gefunden schlüssig sagen, für sicher, dass es wird (oder zumindest "sollte") erkennen backend-Fehler und Wiederherstellung.
Will ich sagen, dass die meisten Suchergebnisse verweisen über das AJP-Protokoll übergeben werden, die den Verkehr an die back-End-Servern, und offensichtlich keine Unterstützung der Fehlererkennung-aber mein backends sind eine Mischung aus Apache, IIS, Tomcat und andere, und ich bin mir ziemlich sicher, dass viele von Ihnen nicht unterstützen AJP. Sie sind auch eine Mischung aus Windows 2k3/2k8 und Linux (meist Ubuntu Lucid) Boxen laufen in verschiedenen Anwendungen mit unterschiedlichen Anforderungen, also in der add-on-Module wie Rückhand und LVS sind nicht eine option für mich.
Habe ich auch versucht, empirisch zu testen Sie diese Funktion, indem Sie eine neue test-Seite wie diese:
<Proxy balancer://test.example.com>
BalancerMember http://192.168.1.40:80
BalancerMember http://192.168.1.200:80
</Proxy>
<VirtualHost *:80>
ServerName test.example.com:80
CustomLog /var/log/apache2/test.example.com.log combined
LogLevel debug
<Location />
Order allow,deny
Allow from all
ProxyPass balancer://test.example.com/
ProxyPassReverse balancer://test.example.com/
</Location>
</VirtualHost>
Wo 192.168.1.200 ist eine falsche Adresse, die nicht mit einer beliebigen web-server zu simulieren, eine backend-Fehler. Die test-Website wurde serviert, ohne ein problem für eine Reihe von verschiedenen client-Rechnern, aber auch mit den LogLevel set debug, ich wollte nicht sehen, nichts protokolliert, um zu signalisieren, dass Sie erkannt, dass einer der backend-Server war down... Und ich möchte zu 100% sicher, dass ich unsere mit Lastenausgleich backends für Wartungsarbeiten heruntergefahren (nacheinander natürlich) ohne Beeinträchtigung von Produktionsstätten.
InformationsquelleAutor Jon Heese | 2012-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://httpd.apache.org/docs/2.4/mod/mod_proxy.html Abschnitt "BalancerMember Parameter", property= " wiederholen:
Aber es gibt auch andere Fehler Bedingungen, die nicht gefangen mit mod_whatever, zum Beispiel, IIS backend eine Anwendung ausführen, die unten ist. IIS ist so eine Verbindung hergestellt werden kann und eine Seite gelesen werden kann, es ist nur so, dass die Seite immer 500 internal server error. Hier müssen Sie failonerror, es zu fangen und zwingen den Arbeiter in einen Fehlerstatus.
In allen Fällen, sobald die Arbeiter in einem Fehlerzustand wird der Verkehr nicht umgeleitet werden. Ich habe versucht, verschiedene Wege zu konsumieren, die ersten Fehler und wiederholt es, aber es scheint immer Fälle geben, wo ein Fehler-Seite macht es an den client zurück.
Newcomb Die einzige Lösung, die ich gefunden habe, die tatsächlich funktioniert (obwohl es hässlich ist), ist die Verwendung
maxattempts
(siehe serverfault.com/questions/503531/...).InformationsquelleAutor David Newcomb
Es ist eine Eigenschaft, die 'ping' in die 'BalancerMember Parameter'
Die Dokumentation Lesen, es klingt wie 'ping' auf 500 MS wird eine Anfrage zu senden, bevor mod_proxy leitet Sie an einen BalancerMember. mod_proxy wird, warten für 500 MS für eine Antwort von einem BalancerMember, und wenn mod_proxy doen nicht, eine Antwort zu bekommen, es wird aber die BalancerMember in einem Fehlerzustand.
Ich müde die Umsetzung dieser, aber es schien nicht zu helfen, mit der Regie zu einer live-BalancerMember.
http://httpd.apache.org/docs/2.4/mod/mod_proxy.html
InformationsquelleAutor DanFredell