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!