在Tomcat中借助MemCache实现session的交叉存放

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

环境:

  • server1:172.25.70.1
  • server2:172.25.70.2

一、在server1、server2上安装jdk

1.解压到指定目录/usr/local/
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
ln -s jdk1.7.0_79/ java   做软连接,升级的时候只升级软连接,较为方便

在这里插入图片描述

2.配置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    # 重新加载配置文件

在这里插入图片描述
在这里插入图片描述

3.检测jdk环境是否正确:
java -version
vim test.java            #java语言格式
===================================================
public class test {
        public  static  void main(String[] args){
                System.out.println("Hello World!");
        }
}  
====================================================
javac test.java     #javac编译.java脚本
java test           # 运行脚本
=============================
Hello World!        # 运行结果

在这里插入图片描述
在这里插入图片描述
可以看到,jdk环境变量配置成功
在这里插入图片描述
server2操作同server1

二、在server1、server2上安装tomcat

1.解压tomcat
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
cd /usr/local
ln -s apache-tomcat-7.0.37/ tomcat   # 做软连接

在这里插入图片描述

2.进入tomcat的发布目录,测试tomcat是否安装正确

启动tomcat

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

在这里插入图片描述
查看日志

pwd
/usr/local/tomcat
=======================
cat logs/catalina.out

在这里插入图片描述
在这里插入图片描述
测试tomcat
tomcat的默认发布目录在tomcat/webapps/ROOT 下

cd tomcat/webapps/ROOT   
#index.jsp是默认发布文件
vim test.jsp
======================
the time is :<%=new java.util.Date() %>
========================================

在这里插入图片描述
在这里插入图片描述
浏览器处输入172.25.70.1:8080/test.jsp查看页面。

出现404报错,需要打开代理

vim /usr/local/lnmp/nginx/conf/nginx.conf
================================================
 66          location ~ \.jsp$ {
 67                 proxy_pass      http://127.0.0.1:8080;
 68         }
=======================================================
#nginx重新加载配置文件内容
nginx -s reload

在这里插入图片描述
重新访问172.25.70.1:8080/test.jsp
在这里插入图片描述
server2操作同server1

访问默认发布页

  • server1
    在这里插入图片描述
  • server2
    在这里插入图片描述

三.实现server1和server2的tomcat负载均衡

1.修改nginx的配置文件:
 18         upstream tomcat {
 19                 server 172.25.70.1:8080;
 20                 server 172.25.70.2:8080;
 21         }

 47         location / {
 48             root   /usr/local/tomcat/webapps/ROOT;
 49             index  index.html index.htm;
 50         }


 63         location ~ \.jsp$ {
 64             proxy_pass   http://tomcat;
 65         }
 66 

 68         #
 69        # location ~ \.php$ {
 70        #     root           html;
 71        #     fastcgi_pass   127.0.0.1:9000;
 72        #     fastcgi_index  index.php;
 73        #     #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 74        #     include        fastcgi.conf;
 75        # }

重新加载配置文件内容
nginx -s reload

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.修改server1、server2的测试发布页

在这里插入图片描述
在这里插入图片描述

3.重启server1、server2的tomcat
  • server1
    在这里插入图片描述
  • server2
    在这里插入图片描述
    在浏览器172.25.70.1:8080/test.jsp,出现轮询
    在这里插入图片描述
    在这里插入图片描述
4、更改默认发布页
[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>

远程同步给server2

[root@server1 bin]# cd -
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# scp test.jsp root@server2:/usr/local/tomcat/webapps/ROOT/
root@server2's password: 
test.jsp                                      100%  968     1.0KB/s   00:00    

在这里插入图片描述

5、重启server1 Nginx、tomcat及server2 tomcat服务
  • server1:
nginx -s reload
[root@server1 bin]# ./shutdown.sh
[root@server1 bin]# ./startup.sh

在这里插入图片描述

  • server2:
[root@server1 bin]# ./shutdown.sh
[root@server1 bin]# ./startup.sh

在这里插入图片描述

6、浏览器访问172.25.70.1:8080/test.jsp,测试

在这里插入图片描述
在这里插入图片描述
发现负载均衡和黏性互相破坏(当用户存储信息后,再次进入信息会清空)

我们发现虽然在上次的实验中当用户存储信息后,信息不会清空,但是会轮循。这会给用户的使用造成一点影响,我们理想的情况应该是来自同一客户端的请求,保持在同一服务端。——session粘性

7、解压缩sticky模块安装包,重新编译、安装nginx。

首先关闭nginx服务:

nginx -s stop
====================================================
[root@server1 ~]# ls nginx-sticky-module-ng.tar.gz 
nginx-sticky-module-ng.tar.gz
[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz
=========================================================
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --add-module=/root/nginx-sticky-module-ng

在这里插入图片描述
编译安装

make && make install 

在这里插入图片描述

8、编辑nginx配置文件
[root@server1 nginx-1.14.0]# vim /usr/local/lnmp/nginx/conf/nginx.conf
========================================================================
 17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20         upstream tomcat {
 21         sticky;
 22         server 172.25.70.1:8080;
 23         server 172.25.70.2:8080;
 24      }

在这里插入图片描述

9、重新启动nginx
nginx

重新测试:
在这里插入图片描述
发现负载均衡和黏性不冲突(当用户存储信息后,再次进入信息不会清空)

四、tomcat实现session共享

1、关闭server1的tomcat,server2下载memcache
  • server1:

[root@server1 bin]# ./shutdown.sh

在这里插入图片描述

  • server2:
    在这里插入图片描述
2、server1、server2获得memcached-session-manager的有关jar包,启动server2的memcached

在这里插入图片描述

[root@server1 ~]# cd jar/
[root@server1 jar]# ls
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
[root@server1 jar]# mv * /usr/local/tomcat/lib/
[root@server1 jar]# 

在这里插入图片描述

  • server1:
    在这里插入图片描述
  • server2:
    在这里插入图片描述
    重启memcached服务
[root@server2 ~]# /etc/init.d/memcached start
Starting memcached:                                        [  OK  ]

在这里插入图片描述

3、编辑server1、server2的context.xml文件

server1:

[root@server1 lib]# cd ../conf/
[root@server1 conf]# vim context.xml
=====================================
添加:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.70.1:11211,n2:172.25.70.2:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

在这里插入图片描述
server2:

[root@server2 lib]# vim /usr/local/tomcat/conf/context.xml 

在这里插入图片描述
在这里插入图片描述

4、server1、server2启动tomcat
cd /usr/local/tomcat/bin/
./startup.sh 
  • server1:
    在这里插入图片描述
  • server2:
    在这里插入图片描述
5、测试

在浏览器输入:http://172.25.70.1/test.jsp
在这里插入图片描述
关闭server2的tomcat,再测试网页
在这里插入图片描述
在这里插入图片描述
服务端仍可以存储数据,之前的数据不会丢失

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值