Налаштуйте 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.
Ви також помітите, що ваш ідентифікатор сеансу додається до маршруту, як показано в прикладі нижче.
Наприклад:
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, перегляньте це онлайн курс.
Вам сподобалось читати статтю? Як щодо того, щоб поділитися зі світом?