您的位置:首页 > 数据库 > Memcache

apache+多个tomcat+memcached共享session会话(windows篇)

2012-08-26 15:47 447 查看
参考:
http://lgdvsehome.blog.51cto.com/3360656/878164

Nginx+Tomcat+Memcached集群Session共享(windows)


基于mod_proxy+Apache 2.2.16+Tomcat 7的负载均衡与集群配置

1、环境

apache+2个tomcat+memcached服务器

2、具体配置

a)修改apache http server配置文件http.conf,首先load三个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

然后在此配置文件末端加入以下代码(该处配置与前文有些差异):


ProxyPass / balancer://tomcatcluster/


ProxyPassReverse / balancer://tomcatcluster/





<Proxy balancer://tomcatcluster>


BalancerMember ajp://localhost:8009 route=a


BalancerMember ajp://localhost:9009 route=b


</Proxy>

b)接下来修改Tomcat的server.xml文件,如下:


<!--Define
an AJP 1.3 Connector on port 8009 -->


<Connectorport="8009"


enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
其中的port为前面<Proxy>中设定的端口,还要配置其route,代码如下:


<!--Define the top level container in our container
hierarchy-->


<Enginename="Catalina"defaultHost="localhost"jvmRoute="a">

jvmRoute也须同前面的设置一样。
c)再修改Tomcat的context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 

memcachedNodes="n1:localhost:11211" 

requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$" 

sessionBackupAsync="false" 

sessionBackupTimeout="100"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" 

copyCollectionsForSerialization="false"/>


需要用到的jar包:
memcached-2.6.jar(https://code.google.com/p/spymemcached/downloads/detail?name=spymemcached-2.8.4.jar
javolution-5.4.3.1.jar
memcached-session-manager-1.5.1.jar
memcached-session-manager-tc7-1.5.1.jar
msm-javolution-serializer-1.5.1.jar
msm-kryo-serializer-1.5.1.jar
msm-xstream-serializer-1.5.1.jar
以上jar包在http://code.google.com/p/memcached-session-manager/downloads/list中都可以找到。

d)安装memcached服务器,参见

/article/2309042.html

3、编写测试代码

index.jsp

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster Test</title></head>  
<body>
<%
  //HttpSession session = request.getSession(true);
  System.out.println(session.getId());
  out.println("<br> SESSION ID:" + session.getId()+"<br>");  
  
  if(session.getAttribute("jhy") != null){
  	out.println("<br> SESSION attribute:" + session.getAttribute("jhy")+"<br>");
  	String str = "+";
  	session.setAttribute("jhy",session.getAttribute("jhy")+str);
  }else{
  	session.setAttribute("jhy","test");
  	out.println("<br> SESSION attribute set!" +"<br>");
  }
%>
</body>
</html>


4、测试。



第一次访问,返回显示session中属性为空,进行属性设置,同时n1表示session在memcached服务器上的节点,b为tomcat服务器节点。

紧接着关闭b服务器,就是默认的第二个自定义服务器myTomcat6.



继续访问如下图,sessionID前段没有发生变化,只是变成了来自tomat服务器a,但是从session属性中读出了初始设置test



再访问http://localhost/balance,如下图,已经开始累计了。



再开启b服务器,再访问http://localhost/balance,



好了,以上的测试结果表明,session已经实现了集群共享,当其中一个服务器宕机了以后,可以实现故障转移。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: