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

Skonfiguruj Tomcat z Apache za pomocą modułu proxy i Sticky Session

Konfiguracja Load Balancera Tomcata z serwerem Apache przy użyciu Mod Proxy jest dość prosta.

Jest to łatwe, gdy podążasz za sekwencją i wszystko idzie dobrze. Wymieniłem krok po kroku, jak skonfigurować Apache z Tomcatem, aby skonfigurować Load Balancer za pomocą Mod Proxy.

Zrównoważenie obciążenia jest zawsze zalecane w środowisku produkcyjnym w celu uzyskania lepszej dostępności.

Konfiguracja serwera WWW Apache

  • Włącz proxy_module, proxy_balancer_module i proxy_http_module w httpd.conf serwera WWW 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 przepustkę proxy wraz z nazwą balancera dla kontekstowego katalogu głównego aplikacji.

W tym przykładzie mam ścieżkę proxy jako przykłady i nazwę równoważnika jako mycluster.

Bardzo ważne jest uwzględnienie stickysession, ponieważ brak tej opcji spowoduje rozesłanie tego samego żądania do wielu serwerów Tomcat i wystąpią problemy z wygaśnięciem 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 trasę w BalancerMember, aby wartość trasy mogła być dołączona do identyfikatora sesji.

Teraz skonfigurujmy Apache, aby wyświetlał JSESSIONID w dziennikach dostępu.

  • Dodaj następujące w dyrektywie LogFormat
%{JSESSIONID}C

Były:

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

Konfiguracja Tomcat

Musisz skonfigurować instancje tomcat z tym samym identyfikatorem trasy, jak w przypadku BalancerMember powyżej.

  • Dodaj parametr jvmRoute w server.xml programu Tomcat. Należy to dodać w tagu nazwy silnika.

Instancja Tomcat skonfigurowana z portem 8080

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

Instancja Tomcat skonfigurowana z portem 8090

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

Weryfikacja

Wygeneruj trochę obciążenia aplikacji i sprawdź log dostępu serwera Apache, aby upewnić się, że Twoje żądanie jest kierowane tylko do jednej instancji tomcat.

Zauważysz również, że identyfikator sesji jest dołączony do trasy, jak pokazano w poniższym przykładzie.

Były:

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 pomoże to w konfiguracji modułu równoważenia obciążenia Tomcata za pomocą Apache Mod Proxy i Session Sticky.

Jeśli chcesz dowiedzieć się więcej o administracji Tomcat, sprawdź to kurs online.

Podobał Ci się artykuł? Co powiesz na dzielenie się ze światem?