Tomcat 实现会话保持

Tomcat会话保持有三种方式 

1、session sticky:通过负载均衡器的负载均衡算法比如:源地址hash 和cookie

2、session cluster: session的共享存储  登陆信息存储在数据库

通过定义集群 Cluster 节点   DeltaManager会话管理器全节点复制同步所有会话
缺点:适合小规模 ,集群中 一台更新其他的也要更新session 组播复制给集群所有节点 

3、session serve: 通过内存级别非关系型数据库实现
基于服务器端实现session存储在memcache
msm memcache的session管理工具
memcached-session-manager项目地址,http://code.google.com/p/memcached-session-manager/, https://github.com/magro/memcached-session-manager


实现session会话保持之session服务器

一:前提:
两个tomcat节点:172.17.250.111(tomcatA.magedu.com),172.17.250.112(tomcatB.magedu.com)
一个memcached节点:172.17.250.113
一个负载均衡节点:172.17.250.114

Clients-->172.17.250.114-->(tomcatA, tomcatB)

二、下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}要换成你所需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。

比如我使用的是


    memcached-session-manager-${version}.jar
    memcached-session-manager-tc${6,7,8}-${version}.jar
    spymemcached-${version}.jar
    msm-javolution-serializer-${version}.jar
    javolution-${version}.jar


三、分别在两个tomcat上的某host上定义一个用于测试的context容器,并在其中创建一个会话管理器,如下所示:
           <Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true">
              <Manager lsclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                memcachedNodes="n1:172.17.250.113:11211"
                  failoverNodes="n1"
                  requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
                transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
              />
             </Context>

四、在172.17.250.113上安装memcache 并启动服务


五、分别为两个context提供测试页面:
tomcatA:
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
# vim /usr/local/tomcat/webapps/test/index.jsp
添加如下内容:
<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="red">TomcatA.baidu.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("baidu.com","baidu.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>


tomcatB:
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
# vim /usr/local/tomcat/webapps/test/index.jsp
添加如下内容:
<%@ page language="java" %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color="blue">TomcatB.baidu.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("baidu.com","baidu.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>


六、在172.17.250.114上配置反向代理的负载均衡内容,类似如下所示:

http段:

upstream tomcat_cluster {

  
server 172.16.100.7:8080  weight=2;
server 172.16.100.8:8080  weight=1;
}

server段:
location / {
  
proxy_pass http://tomcat_cluster;

}



测试结果,在浏览器中访问http://172.17.250.114/test,结果如下所示,其session ID在负载均衡环境中保持不变。

TomcatA.baidu.com



TomcatB.baidu.com






猜你喜欢

转载自blog.csdn.net/qq_36838191/article/details/80202354