Konfiguration von Tomcat mit Apache unter Verwendung des Proxy-Moduls und Sticky Sessions
Die Einrichtung eines Tomcat Load Balancers mit dem Apache Webserver und dem Mod Proxy ist relativ unkompliziert.
Wenn die Schritte sorgfältig befolgt werden, sollte alles reibungslos ablaufen. Im Folgenden habe ich eine detaillierte Anleitung zur Konfiguration von Apache mit Tomcat zusammengestellt, um einen Load Balancer mithilfe des Mod Proxy zu implementieren.
Für eine verbesserte Verfügbarkeit in Produktionsumgebungen wird der Einsatz eines Load Balancers stets empfohlen.
Konfiguration des Apache Webservers
- Aktivieren Sie die Module
proxy_module
,proxy_balancer_module
undproxy_http_module
in der Dateihttpd.conf
des Apache Webservers.
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_http_module modules/mod_proxy_http.so
Fügen Sie die Proxy-Pass-Direktiven zusammen mit dem Balancer-Namen für das Root des Anwendungskontexts hinzu.
In diesem Beispiel verwende ich /examples
als Proxy-Pfad und mycluster
als Balancer-Namen.
Die Einbeziehung von stickysession
ist entscheidend, da Anfragen sonst an mehrere Tomcat-Server verteilt würden, was zu Problemen mit der Session-Verwaltung in der Anwendung führen kann.
<IfModule proxy_module> ProxyRequests Off ProxyPass /examples balancer://mycluster stickysession=JSESSIONID ProxyPassReverse /examples balancer://mycluster stickysession=JSESSIONID <Proxy balancer://mycluster> BalancerMember https://localhost:8080/examples route=server1 BalancerMember https://localhost:8090/examples route=server2 </Proxy> </IfModule>
Wie in der obigen Konfiguration zu sehen ist, habe ich eine Route innerhalb der BalancerMember
-Direktive hinzugefügt, damit der Routenwert an die Session-ID angehängt werden kann.
Lassen Sie uns nun Apache so konfigurieren, dass die JSESSIONID
in den Zugriffsprotokollen erscheint.
- Fügen Sie Folgendes zur
LogFormat
-Direktive hinzu:
%{JSESSIONID}C
Beispiel:
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" "%{JSESSIONID}C" combined
- Starten Sie den Apache Webserver neu.
Tomcat Konfiguration
Sie müssen die Tomcat-Instanzen mit den gleichen Routen-IDs konfigurieren, die Sie zuvor in der BalancerMember
-Direktive verwendet haben.
- Fügen Sie den Parameter
jvmRoute
in der Dateiserver.xml
von Tomcat hinzu. Dieser muss innerhalb desEngine
-Tags hinzugefügt werden.
Tomcat-Instanz konfiguriert mit Port 8080:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server1">
Tomcat-Instanz konfiguriert mit Port 8090:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server2">
Verifikation
Generieren Sie etwas Last für die Anwendung und überprüfen Sie die Zugriffsprotokolle des Apache-Servers, um sicherzustellen, dass Ihre Anfragen nur an eine einzelne Tomcat-Instanz geleitet werden.
Sie werden auch feststellen, dass Ihre Session-ID an die Route angehängt wird, wie im folgenden Beispiel gezeigt.
Beispiel:
127.0.0.1 - - [18/Sep/2013:10:02:02 +0800] "POST /examples/servlets/servlet/RequestParamExample HTTP/1.1" 200 662 "https://localhost/examples/servlets/servlet/RequestParamExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2" 127.0.0.1 - - [18/Sep/2013:10:02:06 +0800] "GET /examples/servlets/servlet/RequestInfoExample HTTP/1.1" 200 693 "https://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2" 127.0.0.1 - - [18/Sep/2013:10:02:17 +0800] "GET /examples/servlets/reqinfo.html HTTP/1.1" 200 3607 "https://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2" 127.0.0.1 - - [18/Sep/2013:10:02:20 +0800] "GET /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1124 "https://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2" 127.0.0.1 - - [18/Sep/2013:10:02:26 +0800] "POST /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1142 "https://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2" 127.0.0.1 - - [18/Sep/2013:10:02:28 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf HTTP/1.1" 200 1159 "https://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B4EC1D73CF8C7482B7D46.server2" 127.0.0.1 - - [18/Sep/2013:10:02:32 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=foo&datavalue=bar HTTP/1.1" 200 1174 "https://localhost/examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2" 127.0.0.1 - - [18/Sep/2013:10:02:36 +0800] "GET /examples/servlets/servlet/RequestHeaderExample HTTP/1.1" 200 1423 "https://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
Ich hoffe, diese Anleitung hilft Ihnen bei der Konfiguration eines Tomcat Load Balancers mit Apache Mod Proxy und Sticky Sessions.
Wenn Sie mehr über die Tomcat-Verwaltung erfahren möchten, schauen Sie sich diesen Online-Kurs an.
Hat Ihnen dieser Artikel gefallen? Dann teilen Sie ihn gerne mit anderen!