Tomcat Load Balancer s Apache pomocí Mod Proxy a Session Sticky

Nastavení serveru Tomcat s využitím Apache, modulu Proxy a mechanismu Sticky Session

Konfigurace vyrovnávání zátěže pro server Tomcat s využitím webového serveru Apache a modulu Mod Proxy je poměrně přímočará.

Je to jednoduché, pokud se držíte daného postupu a vše probíhá podle plánu. Níže uvádím podrobný návod, jak nakonfigurovat Apache se serverem Tomcat pro vyrovnávání zátěže pomocí Mod Proxy.

Pro zajištění maximální dostupnosti se v produkčním prostředí vždy doporučuje implementovat vyrovnávání zátěže.

Konfigurace webového serveru Apache

  • Aktivujte moduly proxy_module, proxy_balancer_module a proxy_http_module v konfiguračním souboru httpd.conf webového serveru Apache.
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

Přidejte definici proxy pass společně s názvem balanceru pro kořenový kontext aplikace.

V tomto příkladu používám „mycluster“ jako název balanceru a „/examples“ jako cestu proxy.

Je zásadní zahrnout nastavení stickysession, protože bez této možnosti by byly stejné požadavky distribuovány mezi různé servery Tomcat, což by způsobilo problémy s vypršením relací v aplikaci.

<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>

Jak je vidět ve výše uvedené konfiguraci, ke každému BalancerMember jsem přidal trasu. Díky tomu se hodnota trasy může připojovat k identifikátoru relace.

Dále nakonfigurujeme Apache tak, aby do logů přístupu zapisoval hodnotu JSESSIONID.

  • V direktivě LogFormat přidejte následující:
%{JSESSIONID}C

Příklad:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined
  • Restartujte webový server Apache

Konfigurace serveru Tomcat

Je nutné nakonfigurovat instance Tomcat tak, aby měly stejné ID trasy, jaké bylo použito v konfiguraci BalancerMember výše.

  • Do souboru server.xml služby Tomcat přidejte parametr jvmRoute. Tento parametr musí být přidán do elementu Engine.

Instance serveru Tomcat nakonfigurovaná na portu 8080:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="server1">

Instance serveru Tomcat nakonfigurovaná na portu 8090:

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="server2">

Ověření

Vygenerujte určité zatížení pro aplikaci a zkontrolujte log přístupu serveru Apache, abyste se ujistili, že vaše požadavky jsou směrovány pouze do jedné instance serveru Tomcat.

V logu byste také měli vidět, že se k ID relace připojuje trasa, jak je ukázáno v příkladu níže.

Příklad:

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"

Doufám, že vám tento návod pomůže při konfiguraci vyrovnávání zátěže pro server Tomcat s použitím Apache Mod Proxy a mechanismu Session Sticky.

Pokud máte zájem o další informace o správě serveru Tomcat, podívejte se na tento online kurz.

Líbil se vám tento článek? Podělte se o něj s ostatními!