日期:2014-05-17  浏览次数:20888 次

Apache+Tomcat会话粘滞(Session Stick)集群配置
我前面一篇文章讲述过使用Apache+tomcat进行session复制的一个配置,但是实际中session复制需要消耗大量的资源,由于项目实际需要,此次选择的配置方式为Session Sticky(会话粘滞),这种方式将同一用户的请求转发到特定的Tomcat服务器上,避免了集群中Session的复制,缺点是用户只跟一台服务器通信,如果此服务器down掉,那就会造成系统无法访问。
软件配置:Apache2.2+tomcat5.5+xp
这次直接采用的model为mod_proxy_ajp.so,在2.2中已经集成。
首先安装Apache,然后修改配置文件http.conf,将以下三个model注释去掉:
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

然后在http.conf文件最后加入以下配置:
ProxyPass / balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3  
ProxyPassReverse / balancer://tomcatcluster/   
<Proxy balancer://tomcatcluster>  
BalancerMember ajp://localhost:8009 route=tomcat1
BalancerMember ajp://localhost:9009 route=tomcat2
</Proxy> 

以上代码配置了Proxy的相关参数,<Proxy>模块定义了均衡负载的配置,其中两个Tomcat Server都配置在同一台服务器上,端口分别为8009、9009,并配置各自的route,这样Apache Server就能根据route将请求转发给特定的Tomcat。
接下来修改第一个Tomcat的server.xml文件,如下:
<!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
其中的port为前面<Proxy>中设定的端口,还要配置其route,代码如下:
<!-- Define the top level container in our container hierarchy -->
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
第二个tomcat修改相同。
然后在两个tomcat拷贝ROOT改个名字,简单改下index.jsp文件,启动第一个和第二个tomcat,进行访问,在DOS终端打印输出,打开多个浏览器,不断刷新可以看出,用户请求只会第一次访问的tomcat上进行响应,配置成功。