基于memcache处理tomcat的session

如果单台tomcat就不存在session的问题,如果是多台就需要考虑session共享的问题,或者nginx配置ip_hash可以解决session的问题,但是ip_hash的弊端是客户只能访问一台机器,那台机挂了就报错了不实用。因此这里我们采用memcache+tomcat+nginx来实现。

案例:

安装memache

yum -y install memcached

systemctl start memcached

安装nginx和tomcat

nginx配置成负载均衡

  1. [root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
  2. .. ..
  3. upstream tomcatgrp {
  4. server 192.168.2.100:8080;
  5. server 192.168.2.200:8080;
  6. }
  7. server {
  8. listen 80;
  9. server_name localhost;
  10. location {
  11.              proxy_pass http://tomcatgrp;
  12. root html;
  13. index index.html index.htm;
  14. }
  15. }

/usr/local/nginx/sbin/nginx -s reload

修改tomcat的配置

  1. [root@svr100 ~]# ~]# vim /usr/local/tomcat/conf/context.xml
  2. <Context>
  3. <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  4.     memcachedNodes="mem1:192.168.2.5:11211"
  5.     requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
  6.     transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"/>  

    ####固定格式:transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>  

  7. </Context>

下载需要的jar包拷贝到/usr/local/tomcat/lib下

下载地址:https://www.mvnjar.com 

  1. asm-5.1.jar minlog-1.3.0.jar
  2. kryo-3.0.3.jar msm-kryo-serializer-1.9.2.jar
  3. kryo-serializers-0.34.jar reflectasm-1.11.1.jar
  4. memcached-session-manager-1.9.2.jar spymemcached-2.11.1.jar
  5. memcached-session-manager-tc8-1.9.2.jar  #要是tomcat7就用 tc7     

    分别在两台机器上添加测试页
    webapp/ROOT/session.jsp
    <%@ page language="java" %>
    <html>
    <head><title>TomcatA</title></head>
    <body>
    <h1><font color="red">TomcatA.test</font></h1>
    <table align="centre" border="1">
    <tr>
    <td>Session ID</td>
    <% session.setAttribute("test","test"); %>
    <td><%= session.getId() %></td>
    </tr>
    <tr>
    <td>Created on</td>
    <td><%= session.getCreationTime() %></td>
    </tr>
    </table>
    </body>
    </html>

  6. 测试http://ip/session.jsp
  7.              


    测试可以先将浏览器缓存清理后进行,也可以反向验证(停掉memcache对比测试)

                                                
posted @ 2019-08-09 10:27  Drutor  阅读(532)  评论(0编辑  收藏  举报