#apache #tomcat #load-balancing #reverse-proxy #sticky-session
#apache #tomcat #балансировка нагрузки #обратный прокси #sticky-сессия
Вопрос:
У меня есть два узла CentOS 8 (192.168.1.101 и 192.168.1.102) в кластере (с использованием кардиостимулятора), где я настроил VIP (192.168.1.100) и Apache в качестве ресурсов кластера. На всех узлах установлены Apache 2.4 и Tomcat 9
Конфигурация для Apache такова: vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ProxyPreserveHost On
<Proxy balancer://myClusterBalancer>
BalancerMember http://192.168.1.101:8080/ route=server01 keepalive=On ping=5 max=200 ttl=120
BalancerMember http://192.168.1.102:8080/ route=server02 keepalive=On ping=5 max=200 ttl=120
ProxySet stickysession=JSESSIONID|jsessionid lbmethod=byrequests timeout=60
</Proxy>
ProxyPass /server-status !
ProxyPass /MyWebApp/ balancer://myClusterBalancer/MyWebApp/ stickysession=JSESSIONID|jsessionid scolonpathdelim=On
ProxyPassReverse /MyWebApp/ balancer://myClusterBalancer/MyWebApp/
ProxyPass / balancer://myClusterBalancer/MikiFax/ stickysession=JSESSIONID|jsessionid scolonpathdelim=On
ProxyPassReverse / balancer://myClusterBalancer/MyWebApp/
</VirtualHost>
и мой Tomcat server.xml для Node1 и Node2
vim /opt/tomcat/conf/server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server01">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server02">
Моя система работает таким образом:
- HTTP-запрос к VIP наhttp://192.168.1.100/MyWebApp и я получаю ответ от Apace;
- Быстро перешлите запрос одному из двух Tomcat в качестве обратного прокси и балансировщика нагрузки
- Tomcat отправляет HTTP-ответ
Теперь на странице Tomcat у меня другая ссылка, и мне нужно, когда я нажимаю на эту ссылку (открываю новую вкладку) Я должен использовать тот же сервер Tomcat.
Ссылка в этом формате:
Первая ссылка:
<a target="_blank" href="http://192.168.1.100/MyWebApp/F?URL=1599825050056amp;amp;viewAttach=Y">CLICK FOR DETAILS</a>
Когда я нажимаю на него, я открываю новую вкладку с этим
Вторая ссылка:
<a href="attachmentsmyAttachment.pdf" target="_blank">myAttachment.pdf</a>
этот файл сохраняется на сервере при загрузке страницы (после того, как я нажимаю на первую ссылку), и если я нажимаю на ссылку, я открываю файл в новой вкладке, но иногда этот запрос обрабатывается другим сервером, и я получаю сообщение об ошибке, потому что на втором сервере этот файл не был загружен.
Как я могу решить эту проблему? Спасибо за обновление.
Ответ №1:
Я решил это.
Изменить Tomcat server.xml для Server1
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server01">
Изменить Tomcat server.xml для Server2
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server02">
Измените Apache conf
<VirtualHost *:80>
ProxyPreserveHost On
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://myClusterBalancer>
BalancerMember http://192.168.1.101:8080/ route=server01
BalancerMember http://192.168.1.102:8080/ route=server02
ProxySet stickysession=ROUTEID
</Proxy>
ProxyPass /MyWebApp/ balancer://myClusterBalancer/MyWebApp/
ProxyPassReverse /MyWebApp/ balancer://myClusterBalancer/MyWebApp/
ProxyPass / balancer://myClusterBalancer/MyWebApp/
ProxyPassReverse / balancer://myClusterBalancer/MyWebApp/
</VirtualHost>