【电商】nginx+tomcat+memcached实现session共享集群

在分布式多tomcat web集群环境下,首先要解决的是session的共享问题,一般的实现思路有:

(1) session复制:多tomcat之间进行session的同步,集群中的tomcat存储相同的session信息

(2) 共享session存储:将session集中存储在同一个地方,如redis/memcached,甚至DB。tomcat本身的内存中并不存储session

(3) session粘性:其实session粘性并不是session共享的方案,而是多tomcat的集群方案,配合nginx/apache实现,将同一用户请求转向到相同的tomcat结点,多结点之间并不共享sesison。优点是实现简单,缺点就是结点故障时,会丢失部分session。一般会配合前两种方式使用。

本文记录使用memcached-session-manager组件搭建nginx+tomcat+memcached实现集群和session共享存储环境的全部过程。

nginx:1.8.0

tomcat两个:6.0.44

memcached集群:1.4.4

memcached-session-manager提供了多种session数据序列化策略:

(1) java序列化:要求待存储的信息实现java.io.Serializable接口;

(2) kryo序列化

(3) javolution

(4) xstream

(5) flexjson

参见:http://code.google.com/p/memcached-session-manager/wiki/SerializationStrategies

这里的使用的序列化策略为kryo

(1) 将下面所有依赖的这些jar包放在$TOMCAT_HOME/lib中:

asm-3.2.jar  kryo-1.04.jar  kryo-serializers-0.11.jar  memcached-session-manager-1.8.3.jar  memcached-session-manager-tc6-1.8.3.jar  minlog-1.2.jar  msm-kryo-serializer-1.8.3.jar  reflectasm-1.01.jar  spymemcached-2.11.1.jar

(2) 两个tomcat分别配置conf/context.xml,增加:

Xml代码  

  1. <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  2. memcachedNodes="n1:localhost:11211,n2:localhost:11212"
  3. sticky="false"
  4. sessionBackupAsync="false"
  5. lockingMode="uriPattern:/path1|/path2"
  6. requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
  7. transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
  8. />
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:localhost:11211,n2:localhost:11212"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="uriPattern:/path1|/path2"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />

这里使用的策略是session非粘性,memcached使用两个结点的集群

另外,分别配置两个tomcat的HTTP监听端口为7181和7182

(3) nginx配置:

Java代码  

  1. upstream cluster_memcached {
  2. server localhost:7181;
  3. server localhost:7182;
  4. }
  5. server {
  6. listen 7180;
  7. server_name localhost;
  8. location / {
  9. proxy_pass http://cluster_memcached;
  10. }
  11. }
upstream cluster_memcached {
        server localhost:7181;
        server localhost:7182;
   }
   server {
       listen 7180;
       server_name localhost;
       location / {
         proxy_pass http://cluster_memcached;
       }
   }

这里配置nginx监听端口为7190,并请所有的请求反向代理到7181和7182的tomcat集群.

(4) 测试代码session.jsp:

Jsp代码  

  1. <%@ page import="java.util.Enumeration" %>
  2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  3. <html>
  4. <head>
  5. <title>session test</title>
  6. <%
  7. String key = request.getParameter("sessionKey");
  8. String value = request.getParameter("sessionValue");
  9. if(key != null && !"".equalsIgnoreCase(key.trim())) {
  10. session.setAttribute(key, value);
  11. }
  12. %>
  13. </head>
  14. <body>
  15. <form action="session.jsp" method="post">
  16. <input type="text" name="sessionKey" value="key1"><input type="text" name="sessionValue" value="value1">
  17. <input type="submit" value="提交">
  18. </form>
  19. <h4>已经存储的session--<%=session.getServletContext().getRealPath("/")%></h4>
  20. <table>
  21. <tr>
  22. <th>key</th>
  23. <th>value</th>
  24. </tr>
  25. <%
  26. Enumeration<String> keys = session.getAttributeNames();
  27. while(keys.hasMoreElements()){
  28. String k = keys.nextElement();
  29. String v = (String)session.getAttribute(k);
  30. %>
  31. <tr>
  32. <td><%=k%></td>
  33. <td><%=v%></td>
  34. </tr>
  35. <%
  36. }
  37. %>
  38. </table>
  39. </body>
  40. </html>
<%@ page import="java.util.Enumeration" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>session test</title>
  <%
    String key = request.getParameter("sessionKey");
    String value = request.getParameter("sessionValue");
    if(key != null && !"".equalsIgnoreCase(key.trim())) {
      session.setAttribute(key, value);
    }
  %>
</head>
<body>
<form action="session.jsp" method="post">
<input type="text" name="sessionKey" value="key1"><input type="text" name="sessionValue" value="value1">
<input type="submit" value="提交">
</form>
<h4>已经存储的session--<%=session.getServletContext().getRealPath("/")%></h4>
<table>
  <tr>
  <th>key</th>
  <th>value</th>
  </tr>
  <%
  Enumeration<String> keys = session.getAttributeNames();
    while(keys.hasMoreElements()){
      String k = keys.nextElement();
      String v = (String)session.getAttribute(k);
      %>
  <tr>
    <td><%=k%></td>
    <td><%=v%></td>
  </tr>
  <%
    }
  %>
</table>
</body>
</html>

java企业级通用权限安全框架源码 SpringMVC mybatis or hibernate+ehcache shiro druid bootstrap HTML5

【java框架源码下载】

时间: 2024-10-07 03:37:09

【电商】nginx+tomcat+memcached实现session共享集群的相关文章

nginx+tomcat+memcached构建session共享集群

一.安装配置tomcat 配置前说明: 系统为centos7 m1.xsllqs.com地址为192.168.1.107 c1.xsllqs.com地址为192.168.1.114 c2.xsllqs.com地址为192.168.1.113 安装tomcat需要配合JDK使用,JDK有oracle JDK和open JDK两种 oracle JDK8的下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-down

nginx+tomcat+memcached实现session共享

一.工作原理及原理图<img class="alignnone wp-image-31" src="http://119.29.25.60/wp-content/uploads/2016/04/图片1.bmp" alt="图片1" width="342" height="254" />工作原理        Tomcat中自带缓存功能.Memcached时一个集中式缓存器,可以利用tomcat和

【Tomcat】Tomcat + Memcached 实现session共享

概述 web项目中,Tomcat的访问量总是有限的,这时候就需要用到Tomcat集群,多个Tomcat的时候就要考虑Session共享的问题,这里介绍一种使用Memcached做Session共享的解决方案 环境 操作系统:Linux( centOS 6..5 版) 软件:Tomcat7    Memcached 实现原理 Tomcat + Memcached 实现session共享流程图 配置 安装Tomcat 2个和Memcached 1个,参考[Linux]Tomcat安装及一个服务器配置

nginx+tomcat8+memcached实现session 共享

操作环境: iP地址 角色 安装软件 10.43.2.135 nginx方向代理 memcached服务器 nginx   memcached 10.43.2.134 tomcat服务器 2个tomcat(端口分别为8080 8081) 实验中使用的软件如下: 实现思路: 第一步:针对10.43.2.134的操作 1.在10.43.2.134上安装2个tomcat 2.在$CATALINA/webapps/ROOT/下建立测试页面t.jsp 3.分别启动2个tomcat服务 4.打开http:/

nginx+tomcat8+memcached实现session共享具体操作

本次试验用到的软件包的版本如下: 一.针对10.43.2.134的操作 1.安装jdk环境 tar zxf jdk-8u5-linux-x64.tar.gz mkdir /usr/java mv jdk1.8.0_05/ /usr/java/ 编辑/etc/profile 在文档的末尾追加如下5行内容: JAVA_HOME=/usr/java/jdk1.8.0_05 JRE_HOME=/usr/java/jdk1.8.0_05/jre PATH=$PATH:$JAVA_HOME/bin:$JRE

搭建LVS+Keepalived+nginx+tomcat高可用性,高性能jsp集群

LVS-master:192.168.0.210 LVS-backup:192.168.0.211 LVS-VIP:192.168.0.209 nginx+tomcat:192.168.0.212 nginx+tomcat:192.168.0.227 安装nginx所需包: Nginx-1.6.0.tar.gz和pcre-8.35.zip 一.安装pcre-8.35 1 #unzip pcre-8.35.zip 2 #cd pcre-8.35 3 #./configure 4 #make 5 #

keepalived+nginx+tomcat搭建高性能web服务器集群

使用keepalived+nginx+tomcat搭建高性能web服务器集群,系统采用centos6.9,前端用nginx做反向代理实现负载均衡,同时结合keepalived对nginx实现高可用,后端使用两台tomcat做动态jsp解析,实现了动静分离. 搭建环境 准备四台服务器 vip: 192.168.75.130master: 192.168.75.131 (安装nginx做反向代理实现负载匀衡,结合keepalived实现高可用)backup: 192.168.75.132 (同上)w

Keepalived+Nginx+Tomcat 实现高可用Web集群(转)

Keepalived+Nginx+Tomcat 实现高可用Web集群 溯水心生 关注 2018.01.08 20:28* 字数 1382 阅读 965评论 1喜欢 9 集群规划图片 一.Nginx的安装过程 1.下载Nginx安装包,安装依赖环境包 (1)安装 C++编译环境 yum -y install gcc #C++ (2)安装pcre yum -y install pcre-devel (3)安装zlib yum -y install zlib-devel (4)安装Nginx 定位到n

【电商】nginx+redis+tomcat实现session共享集群

本文记录nginx+redis+tomcat实现session共享的过程 tomcat-redis-session-manager组件:https://github.com/jcoleman/tomcat-redis-session-manager tomcat-redis-sessoin-manager对tomcat的支持: (1) tomcat6:支持,要求jdk为1.6, 需要引入tomcat-redis-session-manager-1.2-tomcat-6.jar,不过现在已经处理不