现在的位置: 首页 > 综合 > 正文

apache tomcat session 复制 问题

2013年12月02日 ⁄ 综合 ⁄ 共 1249字 ⁄ 字号 评论关闭

要session sticky,其原理是tomcat实例response的时候,在session id后面附上了一个自己实例的标示(route),那么客户端浏览器再后续请求的时候,会把sessionid送过来,同时也带上了这个标示(route),apache会从sessionid这个HTTP HEAD里面拿到这个标示,决定将请求转发给后面哪个tomcat实例。因此要点就是:

1、tomcat实例要在response的时候标示自己,通过server.xml里面的jvmRoute参数

2、apache要从request里面拿出来route信息,从哪个HEAD里面拿?通过stickysession参数来指定

3、apache怎么转发?通过route参数来指定。

例如:

ProxyPass / balancer://mycluster stickysession=JSESSIONID
BalancerMember http://1.2.3.4:8009 route=clone1
BalancerMember http://1.2.3.5:8009 route=clone2

在相应的tomcat实例clone1里面jvmRoute参数配置“clone1”,在clone2;里面配置clone2。

最后想提醒一点:apache2.2的load balance的session sticky性能并不好,因为他这是在七层协议级别进行请求的分发。我测试的结果表明,并不很稳定。

对于tomcat群集来说,最好就是SNA(Share Nothing Architecture),应用程序压根就不用session,这样才能无限扩展。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

ProxyPass /admin balancer://tomcatcluster/admin lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3

ProxyPassReverse /admin balancer://tomcatcluster/admin

<Proxy balancer://tomcatcluster>
BalancerMember ajp://localhost:8009 route=web1
BalancerMember ajp://localhost:10009 smax=10 route=web2
BalancerMember ajp://localhost:11009 route=web3
BalancerMember ajp://localhost:12009 smax=10 route=web4
</Proxy>

抱歉!评论已关闭.