nginx+tomcat+JDK+memcache实现访问jsp、负载均衡和session交叉存放

1.nginx+tomcat+jdk实现JSP动态页面的访问

实验环境:
主机server1上LNMP架构已搭好

1.1 JAVA的介绍与配置

JDK(Java Development Kit)是整个Java核心,包括Java运行环境、Java工具和Java基础类库。JDK作为JAVA开发的环境,不管做JAVA开发还是做安卓开发,都必须在电脑上安装JDK。
1.解压JDK到指定路径
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
2.做JAVA的软连接
ln -s /usr/local/jdk1.7.0_79 /usr/local/java
3.配置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


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


测试:
vim test.java

public class test {
       public static void main(String[] args)
       {
               System.out.println("Hello world!");
       }
}

在这里插入图片描述


1.2 Tomcat的介绍与配置

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

1.加压tomcat到指定路径
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
2.做tomcat的软连接
ln -s /usr/local/apache-tomcat-7.0.37 /usr/local/tomcat
3.启动tomcat,并检查日志
./startup.sh
vim /usr/local/tomcat/logs/catalina.out

在这里插入图片描述


1.3 Nginx的配置

nginx开启nginx
vim /usr/local/lnmp/nginx/conf/nginx.conf设置nginx不处理(因为nginx没有处理jsp的能力,需要交由tomcat处理)

        location ~ \.jsp$ {
                proxy_pass http://127.0.0.1:8080;
        }

nginx -t语法检查
nginx -s reload重新加载nginx配置


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

在这里插入图片描述


1.4 测试

vim /usr/local/tomcat/webapps/ROOT/test.jsp

the time is: <%=new java.util.Date() %>

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


2.nginx+tomcat实现负载均衡

实验环境:
server1:192.168.43.10,设有tomcat+jdk+nginx
server2:192.168.43.20,设有tomcat+jdk

在server1中:
1.设置nginx配置负载均衡
vim /usr/local/lnmp/nginx/conf/nginx.conf
nginx -t
nginx -s reload
2.设置测试文件
vim /usr/local/tomcat/webapps/ROOT/test.jsp

server1-->The time is: <%=new java.util.Date() %>

在这里插入图片描述


在server2中:
1.拷贝server1中jdk与tomcat的配置
scp -r server1:/usr/local/apache-tomcat-7.0.37 /usr/local/
scp -r server1:/usr/local/jdk1.7.0_79 /usr/local/
ln -s apache-tomcat-7.0.37 tomcat
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
在这里插入图片描述


2.设置测试文件
vim /usr/local/tomcat/webapps/ROOT/test.jsp

server2-->The time is: <%=new java.util.Date() %>

在这里插入图片描述


3.开启tomcat
cd /usr/local/tomcat/bin/
./startup.sh

在这里插入图片描述


测试:
访问:http://192.168.43.10/test.jsp
在这里插入图片描述
在这里插入图片描述


3.nginx+tomcat+memcache实现session交叉存放

实验环境:
server1:192.168.43.10,设有tomcat+jdk+nginx(均正常开启)
server2:192.168.43.20,设有tomcat+jdk(均正常开启)

3.1 session介绍

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。

3.2 实现session交叉存放

为了对数据的保存更加牢靠,我们选择交叉存放session的方法,即将访问tomcat1上的数据存放在memcache2中,将访问tomcat2上的数据存放在memcache1中,这样存放,当某个tomcat服务断了之后,访问它的客户session并不会消失,而是存放在了对立的memcache,如果存放session的memcache坏了,那么它的数据会立即切换到另一个memcached中.

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

在这里插入图片描述


3.2.1 nginx实现负载均衡+粘滞

1.在server1和server2的tomcat的默认发布目录重修改我们的测试页
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>

在这里插入图片描述
在这里插入图片描述
当我们只开启一个tomcat时,产生的数据会保存到本地,但是当开启两个tomcat时,由于在负载均衡状态,受到nginx的调度,server1端提交数据后直接跳到了server2,与之前的建立的session断开了,再次回来数据就不存在了。

那么为了解决这个问题,我们需要重新编译,添加sticky模块。sticky粘值能让同一个服务器的请求放到同一个后端上。


2.在server1中对nginx重新编译,增加sticky粘滞模块
unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip解压软件包
cd nginx-1.18.0
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --add-module=/soft/nginx-goodies-nginx-sticky-module-ng-08a395c66e42重新编译nginx
make && make install编译安装(因为nginx中没有重要内容)

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


3对nginx配置粘滞,避免请求来回跳,信息丢失
vim /usr/local/lnmp/nginx/conf/nginx.conf

http {
    upstream tomcat {
        sticky;
        server 192.168.43.10:8080;
        server 192.168.43.20:8080;
    }

    server {
    ....
 location ~ \.jsp$ {
                proxy_pass http://tomcat;
                   }
            }
}

nginx -s reload重新加载nginx配置

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


3.2.2 memcache实现session交叉存放

如果server1的tomcat挂掉,那么server1上的数据依然会丢失,因此我们需要memcache的加入实现session交叉存放,即将访问tomcat1上的数据存放在memcache2中,将访问tomcat2上的数据存放在memcache1中。

1.在server1与server2中配置session管理器
在这里插入图片描述

vim /usr/local/tomcat/conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.43.10:11211,n2:192.168.43.20:11211"
failoverNodes="n1"##server1中为n1,server2中为n2
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

在这里插入图片描述


2.在server2中按装memchached(server1中已安装),并且开启
yum install -y memcached
systemctl start memcached.service

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


3.重启server1和server2中的tomcat

在这里插入图片描述


测试:
telnet localhost 11211在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


关闭server1中的tomcat:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值