Konfigurasjon av Tomcat med Apache ved hjelp av Proxy Module og Sticky Sessions
Å sette opp en lastbalanser for Tomcat med Apache webserver via Mod Proxy er en overkommelig oppgave.
Prosessen er enkel så lenge man følger trinnene riktig. Nedenfor har jeg listet opp en detaljert veiledning for hvordan du kan konfigurere Apache med Tomcat for å realisere en lastbalanser ved hjelp av Mod Proxy.
Bruk av lastbalansering er sterkt anbefalt i produksjonsmiljøer for å oppnå bedre tilgjengelighet og redundans.
Konfigurering av Apache Webserver
- I `httpd.conf` på Apache-webserveren, må du aktivere `proxy_module`, `proxy_balancer_module` og `proxy_http_module`.
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
Du må legge til en `ProxyPass` sammen med balanseringsnavnet for applikasjonens kontekstrot.
I dette eksemplet, har jeg valgt `examples` som proxybane og `mycluster` som balansernavn.
Det er avgjørende å inkludere `stickysession`. Hvis ikke dette alternativet brukes, kan den samme forespørselen bli sendt til flere Tomcat-servere. Dette kan resultere i problemer med sesjonsutløp i applikasjonen.
<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 konfigurasjonen over, har jeg lagt til en `route` i `BalancerMember`. Dette gjør at ruteverdien kan legges til i økt-IDen.
La oss nå konfigurere Apache til å skrive ut `JSESSIONID` i tilgangsloggene.
- Legg følgende til i `LogFormat`-direktivet:
%{JSESSIONID}C
For eksempel:
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined
- Start Apache-webserveren på nytt.
Tomcat-konfigurasjon
Hver Tomcat-instans må konfigureres med samme rute-ID som du spesifiserte i `BalancerMember` tidligere.
- Legg til parameteren `jvmRoute` i `server.xml` til Tomcat, i `Engine` navnet.
Tomcat-instans konfigurert med port 8080:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server1">
Tomcat-instans konfigurert med port 8090:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server2">
Verifikasjon
Generer noe belastning på applikasjonen din, og sjekk tilgangsloggen til Apache-serveren. Dette sikrer at forespørslene dine blir rutet til kun én Tomcat-instans.
Du vil også se at økt-IDen din har blitt utvidet med ruten, som vist i eksemplet nedenfor.
For eksempel:
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"
Jeg håper denne veiledningen hjelper deg med å sette opp en Tomcat-lastbalanser med Apache Mod Proxy og sticky sessions.
Dersom du er interessert i å lære mer om Tomcat-administrasjon, kan du sjekke ut dette nettbaserte kurset.
Likte du denne artikkelen? Del den gjerne med andre!