Während eines “Redeploys” ist eine Applikation unerreichbar.
Hat man Apache HTTPD mit Tomcat verbunden, kann man diese Situationen und sogar den Ausfall des Apache Tomcat Dienstes elegant behandeln.
Die offizielle Dokumentation zu mod_jk definiert empfohlene Timeout-Werte. Bleibt eine Anfrage seitens Tomcat innerhalb der definierten Zeitfenster unbeantwortet, kann Apache HTTPD eine alternative Seite mit entsprechenden Hinweisen ausliefern.
Anstatt Besuchern kryptische und abschreckende Standard-Fehlermeldungen anzuzeigen, kann eine_ frei gestaltete Seite mit Hinweisen zum weiteren Vorgehen_ präsentiert werden. Dabei können alle Funktionalitäten der Apache HTTPD Installation (CSS, PHP, …) genutzt werden. Eine einfache (X)HTML Seite ist oft ausreichend.
Apache HTTPD: Die ErrorDocument Direktiven konfigurieren
Welche Seite in einem solchen Fehlerfall angezeigt wird, definiert man in der Apache HTTPD Konfigurationsdatei über die ErrorDocument-Direktive.
Im folgenden Beispiel wird in der Datei /etc/apache2/conf.d/localized-error-pages für einige der möglichen Statuscodes je eine HTML-Seite definiert.
Damit diese Seiten auch für Tomcat angezeigt werden, muss die Konfiguration des entsprechenden Workers angepasst werden. Nach Befolgen der Anleitung zum Verbinden von Tomcat & HTTPD, müsste der worker als “ajp13_worker” benannt sein.
Apache Tomcat: Die worker.properties konfigurieren
Demnach sind folgende Werte in /etc/libapache2-mod-jk/workers.properties einzutragen:
Die ersten beiden Zeilen definieren die Timeouts. Die dritte Zeile definiert bei welchen Statuscodes der Worker als “versagt” (failed) betrachtet wird. In der offiziellen Dokumentation können Details zu fail_on_status nachgelesen werden.
Die Konfiguration testen
Hat man beispielsweise die Datei 503.shtml entsprechend erstellt und abgelegt, kann man testen, ob sie korrekt angezeigt wird.
Dazu liest man die Apache HTTPD Konfiguration neu ein, stoppt Tomcat und versucht die entsprechende Applikation per Browser zu erreichen.
Hinweis: Um Server Single Points of Failure zu vermeiden bietet mod_jk sehr interessante Möglichkeiten um im Fehlerfall oder auch bei unterschiedlichen Zugriffen auf andere Server umzuleiten. Neben einer Redundanz welche die Verfügbarkeit der Dienste absichert kann damit eine effiziente Lastverteilung erreicht werden.