Nginx+Tomcat+Memcached实现session共享

本文介绍了如何在服务器上部署Java开发环境、Tomcat应用服务器以及Memcached缓存系统,并详细讲解了通过Memcached实现Tomcat集群间Session共享的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验环境:
server1:nginx tomcat memcached
server2:tomcat memcached

一、session简介

Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。
在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中

二、jdk部署

jdk即java开发套件,访问jsp页面需要提前部署环境
1.解压至指定路径,做软链接

[root@server1 ~]#tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server1 ~]#  cd  /usr/local/
[root@server1 local]# ln -s  jdk1.7.0_79/   java

2.配置环境变量

[root@server1 local]# vim  /etc/profile 
# 在末尾加入
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
[root@server1 local]# source /etc/profile

这里写图片描述
3.java代码测试
写一个经典的hello world

[root@server1 ~]# vim  test.java
public class test
{
           public static void main(String[] args)
           {
                   System.out.println("Hello world");
           }
}

编译运行:

[root@server1 ~]# javac test.java 
[root@server1 ~]# java test
Hello world

三、tomcat的部署

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选
当在一台机器上配置好Apache服务器,可利用它响应HTML页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache独立的进程单独运行的。

1.解压至指定位置,做软链接

[root@server1 ~]# tar zxf  apache-tomcat-7.0.37.tar.gz  -C/usr/local/
[root@server1 ~]# cd  /usr/local/
[root@server1 local]# ln -s  apache-tomcat-7.0.37/  tomcat

这里写图片描述
启动tomcat

[root@server1 tomcat]# ./bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

默认开启8080端口
这里写图片描述
这里写图片描述
2.编辑jsp页面进行测试

[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# vim  test.jsp
The time is :<%=new java.ntil.Date() %>
[root@server1 conf]# vim  nginx.conf
        location ~ \.jsp$ {
            proxy_pass   http://127.0.0.1;
        }
[root@server1 conf]# nginx -s reload       

这里写图片描述
我们想通过 172.25.7.1/test.jsp来访问
这样设置就是在1和2上面进行轮询,并且在访问以.jsp结尾的网站时候自动转到1或2的8080端口

http {
        upstream tomcat {
        server 172.25.7.1:8080;
        server 172.25.7.2:8080;
        }
#当访问以jsp结尾的页面时调度到tomcat做轮询
        location ~ \.jsp$ {
            proxy_pass   http://tomcat;
        }
nginx

在server1和server2分别修改对应的测试界面

[root@server1 ROOT]# vim  test1.jsp
server1-The time is :<%=new java.util.Date() %>
[root@server2 ROOT]# vim  test1.jsp
server2-The time is :<%=new java.util.Date() %>

在server1和server2之间轮询
这里写图片描述
这里写图片描述

四、memcache的部署

注意:server1和server2一样的配置,只是在context.xml 中指向和server1相反,不再演示
安装memcache包

[root@server1 conf]# yum  install memcached -y
[root@server1 lib]# rm  -f  memcached-session-manager-tc6-1.6.3.jar

/usr/local/tomcat/lib 中添加jar包
这里写图片描述

编辑测试界面

[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# vim  test.jsp 
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

编辑session共享文件

[root@server1 tomcat]# vim  conf/context.xml 
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.7.1:11211,n2:172.25.7.2:11211"
failoverNodes="n1"  ##在server2此处为n2
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

编辑nginx配置文件,加入sticky模块

[root@server1 conf]# vim nginx.conf
        upstream tomcat {
        sticky;
        server 172.25.7.1:8080;
        server 172.25.7.2:8080;
        }
#当访问以jsp结尾的页面时调度到tomcat做轮询
        location ~ \.jsp$ {
            proxy_pass   http://tomcat;
        }

开启tomcat,占用8080端口

[root@server1 tomcat]# ./bin/startup.sh  

查看tomcat日至server1和server2两边同时出现此信息表示共享成功

[root@server1 logs]# pwd
/usr/local/tomcat/logs
[root@server1 logs]# cat  catalina.out 

server1的日至内容
这里写图片描述
server2的日至内容
这里写图片描述
测试:访问172.25.7.1/test.jsp
这里写图片描述
在其中输入数据,session信息交叉存储在server2中
这里写图片描述
当server2的memcached 服务down掉

[root@server2 logs]# /etc/init.d/memcached stop
Stopping memcached:                               [  OK  ]

session信息回到server1的memcache中
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值