Konfigurera lastbalansering för Tomcat med Apache och sticky sessions
Att sätta upp en lastbalanserare för Tomcat med Apache webbserver och Mod Proxy är en relativt okomplicerad process, förutsatt att stegen följs noggrant. Den här guiden ger en detaljerad genomgång av hur du konfigurerar Apache för att fungera med Tomcat, med fokus på lastbalansering via Mod Proxy.
I produktionsmiljöer rekommenderas starkt lastbalansering för att säkerställa hög tillgänglighet och prestanda.
Apache Web Server Konfiguration
För att börja behöver du aktivera följande moduler i din Apache-konfigurationsfil (vanligtvis httpd.conf):
proxy_module
proxy_balancer_module
proxy_http_module
Detta kan göras genom att lägga till eller avkommentera följande rader i din httpd.conf:
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
Därefter måste du konfigurera en proxy pass med ett balansernamn för din applikations kontextrot. I det här exemplet används `/examples` som proxysökväg och `mycluster` som balansernamn.
För att hantera sessioner korrekt är det viktigt att aktivera `stickysession` . Utan detta riskerar du att samma användarförfrågan distribueras till flera Tomcat-servrar, vilket kan leda till problem med sessionens utgång.
<IfModule proxy_module>
ProxyRequests Off
ProxyPass /examples balancer://mycluster stickysession=JSESSIONID
ProxyPassReverse /examples balancer://mycluster stickysession=JSESSIONID
<Proxy balancer://mycluster>
BalancerMember http://localhost:8080/examples route=server1
BalancerMember http://localhost:8090/examples route=server2
</Proxy>
</IfModule>
Som du ser i ovanstående konfiguration definieras en `route` för varje `BalancerMember`. Detta ruttvärde kommer sedan att användas för att lägga till sessions-ID.
För att spåra sessionerna i Apache’s åtkomstloggar behöver du justera `LogFormat` direktivet.
- Lägg till följande till ditt `LogFormat`-direktiv:
%{JSESSIONID}C
Exempelvis:
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined
- Starta om Apache för att tillämpa ändringarna.
Tomcat Konfiguration
I Tomcat-instanserna måste du ställa in samma rutt-id som du definierat i `BalancerMember` i Apache-konfigurationen. Detta görs genom att lägga till `jvmRoute`-parametern i `server.xml`-filen.
För en Tomcat-instans som körs på port 8080:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server1">
Och för en Tomcat-instans som körs på port 8090:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server2">
Verifiering
För att kontrollera att din konfiguration fungerar som den ska, generera lite trafik till din applikation. Analysera sedan Apache’s åtkomstloggar. Du bör se att varje begäran dirigeras till endast en Tomcat-instans per session.
Du kommer att märka att sessions-ID inkluderas med den valda routern i åtkomstloggarna.
Exempel loggutdrag:
127.0.0.1 - - [18/Sep/2013:10:02:02 +0800] "POST /examples/servlets/servlet/RequestParamExample HTTP/1.1" 200 662 "http://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 "http://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 "http://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 "http://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 "http://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 "http://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 "http://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 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
Förhoppningsvis hjälper den här guiden dig att framgångsrikt konfigurera lastbalansering för Tomcat med Apache Mod Proxy och Sticky Sessions.
Om du är intresserad av att fördjupa dina kunskaper om Tomcat-administration, kan du kolla in den här onlinekursen.
Hittade du den här artikeln värdefull? Dela den gärna med andra!