1. 需求描述

现在需要配置一个LAMT(Linux+Apache+Mysql+Tomcat)webapp服务器

同时由于需要两台Tomcat,需要对会话Session进行处理,故在此采用memcached部署Session集群服务器,实验拓扑如下.

wpsE07F.tmp

由于条件有限,故可能多个服务可能部署在同一台服务器,敬请谅解

2. 首先安装Tomcat,并部署一个测试页面

首先安装Java,再安装Tomcat,并导出相应环境变量

Tomcatwebapps目录下新建一个test目录,test目录中分别建立一个index.jsp的文件,内容如下

Lab2

<%@ page language="java" %>
<html>
 <head><title>lab2</title></head>
 <body>
   <h1><font color="red">lab2.stu21.com</font></h1>
   <table align="centre" border="1">
     <tr>
       <td>Session ID</td>
   <% session.setAttribute("magedu.com","magedu.com"); %>
       <td><%= session.getId() %></td>
     </tr>
     <tr>
       <td>Created on</td>
       <td><%= session.getCreationTime() %></td>
    </tr>
   </table>
 </body>
</html>


lab3:

<%@ page language="java" %>
<html>
 <head><title>lab3</title></head>
 <body>
   <h1><font color="blue">lab3.stu21.com</font></h1>
   <table align="centre" border="1">
     <tr>
       <td>Session ID</td>
   <% session.setAttribute("magedu.com","magedu.com"); %>
       <td><%= session.getId() %></td>
     </tr>
     <tr>
       <td>Created on</td>
       <td><%= session.getCreationTime() %></td>
    </tr>
   </table>
 </body>
</html>

此时分别访问lab2lab38080端口,效果如下,并且Session ID一直在变动

wpsE080.tmp

wpsE081.tmp

3. msm(memcached-session-manager)配置

1.首先需要将如下jar包放入tomcat安装目录下的lib目录下

javolution-5.5.1.jar
memcached-session-manager-1.8.2.jar
memcached-session-manager-tc7-1.8.2.jar(此处的tc7为tomcat版本,要保证于tomcat版本的一致)
msm-javolution-serializer-1.8.2.jar
spymemcached-2.10.2.jar

2.配置tomcat配置文件server.xml,testcontext中加入如下内容

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
     memcachedNodes="n1:172.16.21.1:11211" #此处为memcached服务器地址
     requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" #不为图片等静态内容添加缓存
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" />



3.memcached服务器安装memcached服务器并启动,接着重启tomcat服务,此时访问tomcat,效果如下

wpsE092.tmp

在原来的Session ID后增加了一个-1的字符,证明msm配置已经成功\

4. httpd上配置负载均衡,配置如下

ProxyVia Off
ProxyRequests Off
ProxyPass /jcenter balancer://jcenter/
ProxyPass /test balancer://test/
ProxyPa***everse /test balancer://test/
ProxyPa***everse /jcenter balancer://jcenter/
<proxy balancer://test>
BalancerMember ajp://172.16.21.102:8009/test/ loadfactor=10
BalancerMember ajp://172.16.21.103:8009/test/ loadfactor=10
</proxy>
<proxy balancer://jcenter>
BalancerMember ajp://172.16.21.102:8009/jcenter/ loadfactor=10
BalancerMember ajp://172.16.21.103:8009/jcenter/ loadfactor=10
</proxy>

此时,我们可以通过172.16.21.1来访问后端的tomcat,并且session不会发生改变,效果如下

wpsE0A3.tmp

wpsE0A4.tmp



每次刷新响应的Tomcat不同,但是Session ID不会改变,此时,我们就可以部署JavaCenter

5. JavaCenter部署

访问Lab2,安装Mysql并授权jcenter用户从172.16.21网段及lab.stu21.com,lab3.stu21.com的完全访问jcenter数据库的权限,将安装包解压到webapps目录下,重命名为jcenter,便可以进行访问了,访问172.16.21.102:8080/jcenter/install便可以进行安装,按照提示安装完成.

jcenter目录通过nfs进行网络共享,允许172.16.21.103进行访问,lab3上将其挂在到于lab2相同的目录下,此时亦可以进行正常访问,但是要注意数据库的IP,一定要指向172.16.21.2,否则在lab3上可能无法正产访问.

先在我们需要将test下关于msm的配置复制到jcenter,效果如下

     

<Context path="/jcenter" docBase="jcenter" >
         <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
               memcachedNodes="n1:172.16.21.1:11211"
               requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
               transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" />
</Context>

  

现在我们重启服务器,便可以从172.16.21.1进行访问了.现在无论我们被定向到哪个服务器,都不会存在session丢失,也就不存在登录失效等问题了.


wpsE0B4.tmp