2022-09-15 13:45 Czas czytania: 7 min

Tomcat Load Balancer z Apache przy użyciu Mod Proxy i Session Sticky

Ustawienie serwera Tomcat z Apache przy wykorzystaniu modułu proxy oraz mechanizmu Sticky Session

Konfiguracja rozkładania obciążenia dla serwera Tomcat przy użyciu serwera Apache i modułu Mod Proxy jest stosunkowo prosta.

Proces ten jest nieskomplikowany, jeśli postępuje się zgodnie z instrukcjami. Poniżej przedstawiam szczegółowy opis, jak skonfigurować Apache z Tomcatem w celu implementacji Load Balancera za pomocą Mod Proxy.

Zastosowanie mechanizmu równoważenia obciążenia jest zawsze rekomendowane w środowisku produkcyjnym, aby zagwarantować lepszą dostępność usług.

Konfiguracja serwera WWW Apache

  • Aktywuj moduły: proxy_module, proxy_balancer_module oraz proxy_http_module w pliku konfiguracyjnym httpd.conf serwera 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

Dodaj definicję przekierowania proxy wraz z nazwą grupy balancerów dla katalogu głównego aplikacji.

W tym przykładzie, ścieżka przekierowania proxy to "examples", a nazwą grupy balancerów jest "mycluster".

Kluczowe jest uwzględnienie opcji stickysession, ponieważ jej brak spowoduje kierowanie tych samych żądań do różnych serwerów Tomcat i w konsekwencji problemy z wygasaniem sesji w aplikacji.

<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 widać, w powyższej konfiguracji dodałem parametr "route" w definicji BalancerMember, dzięki czemu wartość trasy zostanie dołączona do identyfikatora sesji.

Teraz skonfigurujemy Apache, aby wyświetlał identyfikator JSESSIONID w logach dostępu.

  • Dodaj poniższy parametr do dyrektywy LogFormat
%{JSESSIONID}C

Przykładowo:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined
  • Zrestartuj serwer WWW Apache.

Konfiguracja serwera Tomcat

Należy skonfigurować instancje serwera Tomcat, przypisując im te same identyfikatory trasy, które zostały zdefiniowane w BalancerMember.

  • Dodaj parametr jvmRoute w pliku server.xml serwera Tomcat. Parametr ten powinien zostać umieszczony w tagu definiującym silnik (Engine).

Instancja Tomcata skonfigurowana na porcie 8080:

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

Instancja Tomcata skonfigurowana na porcie 8090:

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

Weryfikacja poprawności

Wygeneruj obciążenie dla aplikacji, a następnie przeanalizuj logi dostępu serwera Apache, aby upewnić się, że żądania są kierowane tylko do jednej instancji serwera Tomcat.

Zauważysz również, że identyfikator sesji zawiera informację o trasie, jak przedstawiono w poniższym przykładzie.

Przykładowe logi:

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"

Mam nadzieję, że ten przewodnik okaże się pomocny w konfiguracji rozkładania obciążenia dla serwera Tomcat za pomocą Apache Mod Proxy i mechanizmu Session Sticky.

Jeśli jesteś zainteresowany pogłębieniem wiedzy na temat administracji serwerem Tomcat, warto rozważyć ten kurs online.

Czy artykuł okazał się przydatny? Podziel się nim ze znajomymi!

Piotr Zieliński
Autor
Polska

Opisuje trendy i dane, dbając o kontekst i jasny przekaz.

Poprzedni artykuł
6 najlepszych menedżerów proxy do zarządzania proxy na dużą skalę
Następny artykuł
Co się stanie, jeśli wyrejestrujesz swój Firestick?