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

Налаштуйте Tomcat з Apache за допомогою модуля проксі та Sticky Session

Налаштувати Tomcat Load Balancer із веб-сервером Apache за допомогою Mod Proxy досить просто.

Це легко, коли ви дотримуєтеся послідовності, і все йде добре. Я перерахував наступні покрокові інструкції щодо налаштування Apache з Tomcat для налаштування Load Balancer за допомогою Mod Proxy.

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

Конфігурація веб-сервера Apache

  • Увімкніть proxy_module, proxy_balancer_module і proxy_http_module у httpd.conf веб-сервера 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

Додайте проксі-сервер разом із назвою балансувальника для кореневого контексту програми.

У цьому прикладі я маю проксі-шлях як приклади та назву балансера як 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, щоб значення маршруту можна було додати до ідентифікатора сеансу.

  Помилка відносин довіри між цією робочою станцією та основним доменом

Тепер давайте налаштуємо Apache на друк JSESSIONID у журналах доступу.

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

Наприклад:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined
  • Перезапустіть веб-сервер Apache

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

Ви повинні налаштувати екземпляри tomcat з тим самим ідентифікатором маршруту, що й у BalancerMember вище.

  • Додайте параметр jvmRoute у server.xml Tomcat. Це потрібно додати в тег назви двигуна.

Екземпляр Tomcat налаштовано з портом 8080

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

Екземпляр Tomcat налаштовано з портом 8090

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

Перевірка

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

  Найкраща оперативна пам’ять для процесорів Ryzen (Посібник із покупки) у 2021 році

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

Наприклад:

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 Load Balancer із Apache Mod Proxy і Session Sticky.

  Як зробити цеглу в майнкрафт

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

Вам сподобалось читати статтю? Як щодо того, щоб поділитися зі світом?