
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); %>
测试结果
访问测试:
- 访问
http://172.25.8.3:8080/test.jsp
和http://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 失效处理,确保了系统的高可用性和稳定性。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月05日 06时26分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Centos 7.5 如何安装VMware Tools工具
2023-01-26
Centos 7.5 新磁盘创建和挂载XFS文件系统
2023-01-26
Centos 7.5安装safe-rm,防止rm -rf /命令误删除文件
2023-01-26
CentOS 7.X 系统安装及优化
2023-01-26
Centos 7下安装php+mysql+nginx+wordpress教程新版
2023-01-26
CentOS 7之Postfix部署系列 (一) CentOS安装
2023-01-26
flask框架面向移动端的虚拟物品订购平台毕设源码+论文
2023-01-26