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!