问题描述
我在群集中有两个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://192.168.1.100/MyWebApp上向VIP发送HTTP请求,我收到了Apace的回复;
- 将请求转发到两个Tomcat中的一个作为反向代理和负载平衡器
- Tomcat发送http响应
现在在Tomcat的页面上,我具有不同的链接,当我单击此链接(打开一个新标签)时,我需要使用同一台Tomcat服务器。
链接的格式如下:
<a target="_blank" href="http://192.168.1.100/MyWebApp/F?URL=1599825050056&viewAttach=Y">CLICK FOR DETAILS</a>
<a href="attachments\myAttachment.pdf" target="_blank">myAttachment.pdf</a>
加载页面时(单击第一个链接后),此文件保存在服务器上;如果单击链接,则在新选项卡中打开文件,但有时此请求由另一台服务器处理并且收到错误消息,因为未在第二台服务器上下载此文件。
如何解决此问题? 感谢您的更新。
解决方法
我解决了。
为Server1修改Tomcat server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server01">
为Server2修改Tomcat server.xml
<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>