Java 阿帕奇&x2B;Tomcat-粘性会话和负载平衡问题
我在Apache mod_proxy_平衡器中遇到了一些关于粘性会话的问题 我们用Java开发了一个restful Web服务,运行在Tomcat上。实际后端使用的是Acegi安全性,带有Auth Basic身份验证 架构是(抱歉,我是新用户,无法发布图像): 我们有这个“Java反向代理”来执行各种业务。它还对Tomcat(Tomcat1、Tomcat2)执行基本的身份验证 最终用户调用URL的方式如下:http:///a/b?username=foo&password=bar&session=xxx 然后,反向代理将请求代理给Apache,并将凭据作为基本身份验证令牌一起发送 最终用户有三个不同的URL:Java 阿帕奇&x2B;Tomcat-粘性会话和负载平衡问题,java,apache,tomcat,load-balancing,mod-proxy-balancer,Java,Apache,Tomcat,Load Balancing,Mod Proxy Balancer,我在Apache mod_proxy_平衡器中遇到了一些关于粘性会话的问题 我们用Java开发了一个restful Web服务,运行在Tomcat上。实际后端使用的是Acegi安全性,带有Auth Basic身份验证 架构是(抱歉,我是新用户,无法发布图像): 我们有这个“Java反向代理”来执行各种业务。它还对Tomcat(Tomcat1、Tomcat2)执行基本的身份验证 最终用户调用URL的方式如下:http:///a/b?username=foo&password=bar&session
http://<java reverse proxy domain>/service1
http://<java reverse proxy domain>/service2
http://<java reverse proxy domain>/service3
这很好,因为请求的目标是tomcat2
但当我呼叫服务3时,我得到:
[Wed Feb 22 10:49:27 2012] [debug] mod_proxy_balancer.c(280): proxy: BALANCER: Found value "3FB8F8135173BBBE78E5E4BBD6F5C8FB" for stickysession JSESSIONID
[Wed Feb 22 10:49:27 2012] [debug] mod_proxy_balancer.c(1003): proxy: Entering byrequests for BALANCER (balancer://cluster)
[Wed Feb 22 10:49:27 2012] [debug] mod_proxy_balancer.c(1046): proxy: byrequests selected worker "http://xxx:9671" : busy 0 : lbstatus 0
如您所见,即使JSESSIONID cookie是相同的,Apache也会将请求发送到错误的tomcat(这里是tomcat1)
可能是因为service3的url不需要身份验证基本身份验证,而service1和service2需要身份验证基本身份验证吗
我很确定我做错了什么,但我已经四处寻找了很长时间,我无法让它发挥作用
非常感谢你的帮助
谢谢我在您的JSESSIONID上没有看到jvmRoute后缀。mod_代理使用jvmRoute将粘性会话正确路由到Tomcat实例。jvmRoute是在tomcat服务器配置中声明的(其中每个服务器实例都有自己唯一的jvmRoute标识符。也许这会有所帮助。这是我在web服务器上的配置:
<Proxy balancer://hybriscluster>
BalancerMember ajp://tomcatServer1:8009 route=tomcat1 keepalive=On ping=5 max=200 ttl=120
BalancerMember ajp://tomcatServer2:8009 route=tomcat2 keepalive=On ping=5 max=200 ttl=120
ProxySet stickysession=JSESSIONID|jsessionid lbmethod=byrequests timeout=60
</Proxy>
平衡员ajp://tomcatServer1:8009 路由=tomcat1 keepalive=开启ping=5最大值=200 ttl=120
平衡员ajp://tomcatServer2:8009 路由=tomcat2 keepalive=开启ping=5最大值=200 ttl=120
ProxySet stickysession=JSSessionID | JSSessionID lbmethod=byrequests timeout=60
tomcat服务器1的server.xml中的配置:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"}">
我也面临同样的问题,通过修改下面的行解决了它-
ProxyPass /test balancer://mycluster stickysession=JSESSIONID|jsessionid scolonpathdelim=On
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.2:80 route=node1
BalancerMember http://192.168.1.3:80 route=node2
</Proxy>
代理通过/测试balancer://mycluster stickysession=JSSessionId | JSSessionId scolonpathdelim=On
平衡员http://192.168.1.2:80 路由=节点1
平衡员http://192.168.1.3:80 路由=节点2
请注意配置scolonpathdelim=On
参考-没错,在我提供的示例中,我忘记了jvmRoute。但是即使在server.xml中设置它也不能解决这个问题。
<Proxy balancer://hybriscluster>
BalancerMember ajp://tomcatServer1:8009 route=tomcat1 keepalive=On ping=5 max=200 ttl=120
BalancerMember ajp://tomcatServer2:8009 route=tomcat2 keepalive=On ping=5 max=200 ttl=120
ProxySet stickysession=JSESSIONID|jsessionid lbmethod=byrequests timeout=60
</Proxy>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"}">
ProxyPass /test balancer://mycluster stickysession=JSESSIONID|jsessionid scolonpathdelim=On
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.2:80 route=node1
BalancerMember http://192.168.1.3:80 route=node2
</Proxy>