Балансувальник навантаження Tomcat із Apache із використанням Mod Proxy і Session Sticky

Налаштування Tomcat з Apache для балансування навантаження та Sticky Session

Балансування навантаження Tomcat за допомогою веб-сервера Apache і модуля Mod Proxy – це відносно простий процес, особливо якщо чітко дотримуватись інструкцій.

У даній статті ми розглянемо покрокову інструкцію, яка допоможе вам налаштувати Apache для ефективного балансування навантаження Tomcat з використанням Mod Proxy.

Використання балансування навантаження є критично важливим для забезпечення високої доступності в виробничому середовищі.

Конфігурація Apache

  • Перш за все, необхідно активувати модулі proxy_module, proxy_balancer_module та proxy_http_module у файлі конфігурації Apache httpd.conf.
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

Далі, необхідно додати проксі-сервер, вказавши ім’я балансувальника для контексту вашої програми. У прикладі нижче проксі-шлях буде /examples, а назва балансувальника – mycluster.

Важливо звернути увагу на директиву stickysession. Її відсутність може призвести до того, що один і той самий запит буде оброблятися різними серверами Tomcat, що може спричинити проблеми із закінченням сесії в програмі.

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

Зверніть увагу, що в конфігурації BalancerMember додається параметр route. Це дозволяє додавати значення маршруту до ідентифікатора сеансу.

Тепер налаштуємо Apache так, щоб ідентифікатор JSESSIONID виводився в логах доступу.

  • Додайте наступний параметр до директиви LogFormat:
%{JSESSIONID}C

Наприклад:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C" combined
  • Перезавантажте веб-сервер Apache, щоб зміни вступили в силу.

Конфігурація Tomcat

Необхідно налаштувати екземпляри Tomcat, вказавши ідентифікатори маршрутів, що відповідають параметрам route у конфігурації BalancerMember.

  • Додайте параметр jvmRoute у файл server.xml Tomcat. Цей параметр потрібно додати до тегу <Engine>.

Приклад для екземпляра Tomcat, що працює на порту 8080:

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

Приклад для екземпляра Tomcat, що працює на порту 8090:

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

Перевірка налаштування

Створіть навантаження на вашу програму та перевірте журнали доступу Apache, щоб переконатися, що запити спрямовуються лише до одного конкретного екземпляра Tomcat.

Ви також помітите, що до ідентифікатора сесії додається маршрут, як показано в прикладі нижче.

Приклад:

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"

Сподіваємося, що ці інструкції стануть вам у нагоді для налаштування балансування навантаження Tomcat з використанням Apache Mod Proxy та Sticky Session.

Якщо ви зацікавлені в отриманні додаткової інформації про адміністрування Tomcat, зверніть увагу на онлайн курс.

Чи була ця стаття корисною для вас? Не соромтеся поділитися нею з іншими!