nginx+tomcat+memcached
发布日期:2025-04-20 10:32:54 浏览次数:3 分类:精选文章

本文共 3594 字,大约阅读时间需要 11 分钟。

nginx + tomcat + memcache 集群优化方案

环境描述

实验环境基于 RHEL 6.5,使用 3 台主机:

  • 172.25.8.2: nginx
  • 172.25.8.3 和 172.25.8.4: tomcat + memcached

防火墙已关闭 iptables。

实验原理

  • 负载均衡:nginx 在前端接收客户端请求,根据后端 tomcat 的状态进行负载均衡。
  • session 失效处理:tomcat-1(T1)将 session 数据存储在 memcached-2(M2)上。仅当 M2 不可用时,T1 才将 session 数据切换存储至 memcached-1(M1)。M1 作为 T1 的 failover 节点,用于故障转移。

这种配置方式确保了双重故障情况下的 session 不丢失,避免了单点故障风险。


tomcat 安装与配置

安装步骤

  • 安装包

    • apache-tomcat-7.0.37.tar.gz(tomcat)
    • jdk-7u79-linux-x64.tar.gz(java 开发工具包)
  • 安装过程

    tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/localmv /usr/local/apache-tomcat-7.0.37 /usr/local/tomcattar zxf jdk-7u79-linux-x64.tar.gz -C /usr/localmv /usr/local/jdk1.7.0_79 /usr/local/jdk
  • 配置环境变量

    echo "export JAVA_HOME=/usr/local/jdk" >> /etc/profileecho "export CLASSPATH=:$JAVA_HOME/lib" >> /etc/profileecho "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profilesource /etc/profile
  • 测试启动

    /usr/local/tomcat/bin/startup.sh

    启动成功时会显示以下信息:

    Using CATALINA_BASE: /usr/local/tomcatUsing CATALINA_HOME: /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME: /usr/local/jdkUsing CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  • 验证 java 版本

    java -version
  • 浏览器访问测试:访问 http://172.25.8.3:8080,可以看到 tomcat 主页。


  • memcached 安装与配置

    安装步骤

  • 安装 memcached

    yum install memcached -y
  • 启动 memcached

    /etc/init.d/memcached start

  • session 序列化方案

    配置步骤

  • 安装依赖 jar 包:将以下文件拷贝至 /usr/local/tomcat/lib

    • kryo-1.04.jar
    • kryo-serializers-0.10.jar
    • memcached-session-manager-1.6.3.jar
    • memcached-session-manager-tc7-1.6.3.jar
    • msm-kryo-serializer-1.6.3.jar
    • reflectasm-1.01.jar
    • minlog-1.2.jar
    • spymemcached-2.7.3.jar
  • 配置 context.xml

    172.25.8.3:11211,172.25.8.4:11211
    m1
    .*\.(ico|png|gif|jpg|css|js)$
    de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory

  • nginx 安装与负载均衡配置

    安装步骤

  • 安装依赖组件

    yum install -y pcre-devel openssl-devel gcc
  • 安装 nginx

    tar zxf nginx-1.10.1.tar.gztar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz -C nginx-1.10.1
  • 编译与安装

    useradd -s /sbin/nologin nginxcd nginx-1.10.1./configure --user=nginx --group=nginx --prefix=/usr/local/nginx \          --with-http_ssl_module --with-http_stub_status_module \          --add-module=nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d/make; make install
  • 启动 nginx

    /usr/local/nginx/sbin/nginx
  • 配置 nginx.conf

    http {  upstream www.example.com {    sticky;    server 172.25.8.3:8080;    server 172.25.8.4:8080;  }  server {    listen 80;    location ~ \.jsp$ {      proxy_pass http://www.example.com;    }  }}

  • 测试与验证

    测试网页

    编辑 /usr/local/tomcat/webapps/ROOT/test.jsp

    <%@ page contentType="text/html; charset=GBK" %><%@ page import="java.util.*" %>  Cluster App Test  Server Info: <%= request.getLocalAddr() %> : <%= request.getLocalPort() %>
    ID: <%= session.getId() %>
    Session list: <%= Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) %> <%= String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); %> <%= name + " = " + value %>
    <%= System.out.println(name + " = " + value); %>
    name:
    key:

    测试结果

  • 访问测试

    • 访问 http://172.25.8.3:8080/test.jsphttp://172.25.8.4:8080/test.jsp,分别查看不同 tomcat 实例处理情况。
    • 浏览器显示相同 session ID,但不同的 server info,说明负载均衡正常工作。
  • 故障转移测试

    • 关闭 memcached-2(M2),观察 session 是否切换至 memcached-1(M1)。
    • 测试后发现 session 正确切换至 M1,且 tomcat 负载均衡自动调度到其他实例。
  • nginx 负载均衡效果

    • 同一用户的请求始终发送至同一 tomcat 实例。
    • 当目标 tomcat 实例下线时, nginx 自动将请求转发至其他实例。

  • 总结

    本文详细介绍了基于 nginx、tomcat 和 memcached 的 session 失效集群方案,涵盖了安装、配置、测试等多个环节。该方案通过负载均衡和 session 失效处理,确保了系统的高可用性和稳定性。

    上一篇:nginx+tomcat单个域名及多个域名配置
    下一篇:Nginx+Redis+Ehcache:大型高并发与高可用的三层缓存架构总结

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年05月05日 06时26分38秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章