Nginx+Tomcat+Memcached实现tomcat集群和session共享

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

交叉存储
Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。只有当 M2 不可用时,T1 才将 session 存储在 memcached-1 上(M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1同时崩溃时也不会丢失 session 会话,避免单点故障。


下载安装jdk

在server1和server2中都安装

tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
ln -s jdk1.7.0_79/ java

编辑环境变量

vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile       #刷新环境变量
echo $PATH                #查看环境变量

查看环境变量
测试是否安装成功

vim test.java   #编辑测试文件
public class test
{
        public static void main(String[] args)
        {
                System.out.println("hello");
        }
}

javac test.java    #编译
java test

测试jdk

安装tomcat

在server1和server2中都安装

tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
cd /usr/local/
ln -s apache-tomcat-7.0.37/ /usr/local/tomcat

开启服务

/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat/bin/shutdown.sh	#关闭服务
cd /usr/local/tomcat/logs/
cat catalina.out 	 				#查看日志

测试是否安装成功
编辑测试页面

vim /usr/local/tomcat/webapps/ROOT/test.jsp	#/usr/local/tomcat/webapps/ROOT/为默认发布目录
The time is: <%=new java.util.Date() %>

测试

把如下软件包放置到/usr/local/tomcat/lib 目录中

asm-3.2.jar                              minlog-1.2.jar
kryo-1.04.jar                            msm-kryo-serializer-1.6.3.jar
kryo-serializers-0.10.jar                reflectasm-1.01.jar
memcached-session-manager-1.6.3.jar      spymemcached-2.7.3.jar
memcached-session-manager-tc7-1.6.3.jar

编辑tomcat配置文件

vim /usr/local/tomcat/conf/context.xml
<Context>
......
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.31.1:11211,n2:172.25.31.2:11211"
failoverNodes="n1"      #在 node2 上此项设置为“n2”
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

安装memcached

在server1和server2中都安装

yum install memcached -y
service memcached start

开启tomcat服务

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

查看日志

cat /usr/local/tomcat/logs/c

若出现以下黑体部分则说明配置成功
这里写图片描述

给nginx安装sticky模块

nginx只在server2中安装

cd nginx-1.10.1
make clean
./configure --prefix=/usr/local/lnmp/nginx/ --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-sticky-module-ng
make && make install

编辑nginx配置文件

vim /usr/local/lnmp/nginx/conf/nginx.conf
 17 http {
 18         upstream tomcat{
 19         sticky;
 20         server 172.25.31.1:8080;
 21         server 172.25.31.2:8080;
 22     }

 65         location ~ \.jsp$ {      #所有 jsp 页面交给 tomcat 处理,动静分离
 66             proxy_pass   http://tomcat;
 67         }

nginx    #开启服务

编辑测试页面

vim /usr/local/tomcat/webapps/ROOT/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>

测试

访问 www.westos.com/test.jsp,不同的主机访问时会调度到不同的 tomcat 实例上处理来
自同一主机的请求会交给同一个 tomcat 实例处理,此时你 down 掉当前正在响应的

tomcat 实例,nginx 会自动把用户的请求调度到另一个 tomcat 实例上,同时 session 也没
有丢掉
访问172.25.31.1/test.jsp
提交数据
用tomcat1提交数据
关掉server1的tomcat,继续提交数据nginx 会自动把用户的请求调度到另一个 tomcat 实例上,同时 session 也没有丢掉
session 也没有丢掉
可以安装telnet,查看session存储位置

yum install telnet -y
telnet localhost 11211

telent

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值