2、环境:
host1:192.168.163.189/24 tomcat189
host2:192.168.163.190/24 tomcat190
host3:192.168.163.191/24 nginx
host3:192.168.163.191/24 memcached
参考文档;https://code.google.com/p/memcached-session-manager/
memcached-session-manager版本:1.8.1
1、安装及配置NGINX,其中NGINX配置如测试一
2、下载memcached-session-manager相关组件(选用 效率最高的msm-javolution-serializer序列算法)
对应软件包及下载地址;
javolution-5.4.3.1.jar
http://memcached-session-manager.googlecode.com/svn/maven/javolution/javolution/
memcached-session-manager-1.8.1.jar
http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/
memcached-session-manager-tc7-1.8.1.jar http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7/
msm-javolution-serializer-1.8.1.jar
http://repo1.maven.org/maven2/de/javakaffee/msm/msm-javolution-serializer/
spymemcached-2.10.2.jar
http://repo1.maven.org/maven2/net/spy/spymemcached/
3、将下载的软件包放到$TOMCAT_HOME/lib 下(TOMCAT所有集群节点都要放)
4、配置NGINX
此集群中NGINX的作用仅用于调度,无其它特殊要求。所以只需配个upstream,server即可,其它的保持默认即可。
upstream backend{
server 192.168.163.189:8080 weight=1 ;
server 192.168.163.190:8080 weight=1;
}
server {
listen 80;
server_name 192.168.163.191;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://backend;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
4、在$TOMCAT_HOME/conf/context.conf 的<Context>标签下添加如下
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.163.191:11211"
requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sticky="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false"/>
关于各参数的意思及用法参考:https://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration
章节Overview over memcached-session-manager configuration attributes
5、在工程的web.xml中如($TOMCAT_HOME/webapps/ROOT/WEB-INF/web.xml)web-app节点中添加如下信息:
<dependency>
<groupId>de.javakaffee.msm</groupId>
<artifactId>msm-javolution-serializer</artifactId>
<version>1.8.1</version>
<scope>runtime</scope>
</dependency>
6、修改$TOMCAT_HOME/conf/server.xml,启有ENGIN标签中的JVMROOT属性,启用的目的就是为了区分SESSION是在哪个节点上生成的,也可不启用。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
注意:不同的序列算法有不同artifactId,所用的version也不同,要注意修改
7、新建测试页,将放到工程目录中,如t.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ 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>");
// 如果有新的请求,则添加session属性
String name = request.getParameter("name");
if (name != null && name.length() > 0) {
String value = request.getParameter("value");
session.setAttribute(name, value);
}
out.print("<b>Session List:</b>");
Enumeration<String> names = session.getAttributeNames();
while (names.hasMoreElements()) {
String sname = names.nextElement();
String value = session.getAttribute(sname).toString();
out.println( sname + " = " + value+"<br>");
System.out.println( sname + " = " + value);
}
%>
</body>
</html>
8、开启所有TOMCAT,开启时留意其日志catalin.out是否正常;
9、测试步骤
A:测试直接各节点访问测试页,若能正常显示且显示出SESSIONID值,表示TOMCAT运行正常
B:关闭所有浏览器,并重新打开一个窗口,测试访问NGINX服务器http://192.168.163.191/t.jsp 显示出一个SESSION ID值。
C:按F5多刷新几次,看看SESSION ID是否会变化,若不变化,从某种程度认为SESSSION共享是成功 的(留意各节点的TOMCAT日志,每刷新一次,会在被调度到的节点打出日志)。若SESSION ID变化,表示SESSION 共享失败。
D:关闭 被调度到的节点的TOMCAT,再刷新测试页,若发现页面显示正常,且SESSION ID值不变化,说明SESSION也被调度到另一个节点,查看节点TOMCAT日志,也会打出与看到的SESSION ID一样的记录。此时,基本可以认为SESSION共享是成功的。