论坛首页 Java企业应用论坛

请教apache跟tomcat做集群session不同步问题

浏览 14879 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-07-22  
一台apache服务器为apache2.2使用了反向代理和均衡负载模块
在httpd.conf 文件最后加
ProxyPass / balancer://myWebapp/
ProxyPassReverse / balancer://myWebapp/
<Proxy balancer://myWebapp>
        BalancerMember ajp://192.168.2.13:8009 route=8080
        BalancerMember ajp://192.168.2.14:8009 smax=10 route=8080
</Proxy>
功能已实现。
两台tomcat服务器为tomcat5.5.17在server.xml中把<Cluster >......</Cluster>部分去掉注释修改了<Engine...../>为<Engine name="Catalina" defaultHost="APP02" jvmRoute="web1">
同时在conf目录加入了jk2.properties文件内容为channelSocket.port=8009
另一台则改为<Engine name="Catalina" defaultHost="APP01" jvmRoute="web">
也同时在conf目录加入了jk2.properties文件内容为channelSocket.port=8009

在应用程序的web.xml里加入了<distributable/>
在启动三台服务器后,在两台tomcat日志文件头部都出现如下信息:


Jul 22, 2006 11:44:58 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /opt/jdk1.5/jre/lib/i386/server:/opt/jdk1.5/jre/lib/i386:/opt/jdk1.5/jre/../lib/i386
Jul 22, 2006 11:44:58 AM org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8098
Jul 22, 2006 11:44:58 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 901 ms
Jul 22, 2006 11:44:58 AM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Jul 22, 2006 11:44:58 AM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.17
Jul 22, 2006 11:44:58 AM org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
Jul 22, 2006 11:44:58 AM org.apache.catalina.cluster.tcp.SimpleTcpCluster start
INFO: Cluster is about to start
Jul 22, 2006 11:44:58 AM org.apache.catalina.cluster.tcp.ReplicationTransmitter start
INFO: Start ClusterSender at cluster Catalina:type=Cluster,host=app02 with name Catalina:type=ClusterSender,host=app02
Jul 22, 2006 11:44:58 AM org.apache.catalina.cluster.mcast.McastService start
INFO: Sleeping for 2000 milliseconds to establish cluster membership
Jul 22, 2006 11:45:00 AM org.apache.catalina.cluster.mcast.McastService registerMBean
INFO: membership mbean registered (Catalina:type=ClusterMembership,host=app02)
Jul 22, 2006 11:45:00 AM org.apache.catalina.cluster.deploy.FarmWarDeployer start
INFO: Cluster FarmWarDeployer started.
log4j:WARN No appenders could be found for logger (org.apache.catalina.startup.TldConfig).
log4j:WARN Please initialize the log4j system properly.
07-22 11:45:01.747 INFO  [ContextLoader.java:174] Root WebApplicationContext: initialization started
07-22 11:45:01.753 INFO  [ApplicationContext.java:646] Loading Spring root WebApplicationContext
07-22 11:45:01.843 INFO  [XmlBeanDefinitionReader.java:163] Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext.xml]


再往下也都是正常的起动信息,没有错误。
不知道这里面没有错误信息是否表明Cluster已经起作用了。但是在访问网站时登陆时就是验证码不正确,如果你把记住密码 勾上 当重新打开IE后就可以进入网站的个人主页,这时当你再点击任何连接提交,就会转到你还没有登陆要求你登陆的页面。这说明session没有同步呀!

多多帮助小弟,给点帮助吧!
我弄了好长时间都没有弄好,谢谢各位了~~先!!
不知道,是服务器问题,还是tomcat问题,或是程序问题!
   发表时间:2006-07-22  
不客气一点阿,从你的描述来看,你的配置可以说是乱七八糟。说明你对apache2.2和tomcat如何做session sticky的load balance可以说是一知半解。

建议你好好阅读一下apache2.2的load balance文档,还有tomcat cluster的相关文档。

我这里不详细给你讲解了,简单提一下要点:

要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,这样才能无限扩展。
0 请登录后投票
   发表时间:2006-07-22  
谢谢你的回复,你的简单提点让我收获很大。我会努力学习的。嘿嘿,以后有问题再请时还请多批评并指教!
谢谢
0 请登录后投票
   发表时间:2006-07-23  
mod_jk这个早就该淘汰了, 用modajp



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>

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics