LNMP—nginx+tomcat+jdk+memcache实现客户端动态访问

1.什么是tomcat?Tomcat是一个轻量级应用服务器 java程序写的网站用tomcat+jdk来运行tomcat是一个中间件,真正起作用的,解析java脚本的是jdk jdk(java developmentkit)是整个java的核心,它包含了java运行环境和java相关的工具以及java基础库最主流的jdk为sun公司发布的jdk,除此之外,其实IBM公司也有发布JDK,CentOS上也可以用yum安装openjdkTomcat 服务器是一个免费的开放源代码的Web 应用服务器,属
摘要由CSDN通过智能技术生成

1.什么是tomcat?

Tomcat是一个轻量级应用服务器 java程序写的网站用tomcat+jdk来运行
tomcat是一个中间件,真正起作用的,解析java脚本的是jdk jdk(java development
kit)是整个java的核心,它包含了java运行环境和java相关的工具以及java基础库
最主流的jdk为sun公司发布的jdk,除此之外,其实IBM公司也有发布JDK,CentOS上也可以用yum安装openjdk
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

2.实验

nginx+jsp+tomcat完成客户端的动态请求实验

(1)首先获取tomcat和jdk安装包,然后解压到指定目录
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
tar zxf apache-tomcat-7.0.99.tar.gz -C /usr/local
在这里插入图片描述
(2)做软连接,配置环境变量以查看Java的版本
在这里插入图片描述
在这里插入图片描述
(3)可以执行java命令,查看java的版本
在这里插入图片描述
(4)编辑一个java语言的测试代码:输出Hello world!

javac test.java	##编译
java test.java	##运行

在这里插入图片描述
(5)tomcat默认发布目录是/usr/local/tomcat/webapps/ROOT/,这个目录下都是一些网页文件(默认发布页面)
在这里插入图片描述
(6)开启tomcat,在/usr/local/tomcat/bin目录下执行脚本startup.sh,端口8080开启
在这里插入图片描述
(7)测试访问
在浏览器:172.25.254.1:8080,浏览到tomcat默认发布页
在这里插入图片描述
对于用户来说访问时是输入域名的不会如此访问到8080,所以我们需要在外部用户访问时通过nginx进行请求转发,我们需要编辑nginx的配置文件,当用户需要访问jsp文件时(nginx是不处理这个页面的),直接把请求转交到本地的8080端口即转到tomcat服务上

下面进行配置测试
在tomcat默认发布目录下编写一个test.jsp结尾的文件(时间动态变化的文件)
对nginx进行配置
配置完后,nginx -t 语法检测,然后重新加载nginx
在这里插入图片描述
nginx配置文件更改如下
当用户访问以jsp结尾的文件时,直接把请求转交到本地的8080端口
在这里插入图片描述
在浏览器上访问test.jsp页面,每刷新一次访问,时间变化一次,达到一个动态页面的效果
在这里插入图片描述
可以访问tomcat默认发布目录下的默认发布页
在这里插入图片描述
再进行一个用户注册页面的测试
下面代码是用java编写的用户注册页面

<%@ 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>
<input type=submit>
</form>
</body>
</html>

测试
在浏览器上访问test.jsp页面,可以看到nginx将这个请求转交给了tomcat并加载出用户注册信息页面
在这里插入图片描述

nginx+tomcat动态实现tomcat服务器之间负载均衡实验

上边实验实现了客户端访问nginx服务器时,通过jsp动态获取tomcat服务器上的资源
此次实验实现nginx做反向代理+tomcat做web服务器实现两个web(tomcat1和tomcat2)之间的负载均衡
并且客户端可以在浏览器上动态注册信息,web1和web2轮询,但是没有会话保持,每刷新一次数据就会丢失(用户提交的信息没有保存下来)

实验环境:
两台虚拟机和一个物理机
虚拟机server1(172.25.154.1)做nginx反向代理+tomcat1服务器
虚拟机server4(172.25.154.4)做tomcat2服务器
物理机做测试用

实验:
(1)将tomcat1服务器的两个目录(tomcat 和 jdk)传给server4虚拟机
在这里插入图片描述
在这里插入图片描述
(2)传输完毕后,同在172.25.254.1主机上一样对172.25.254.4主机tomcat服务做软链接,配置Java的环境变量
在这里插入图片描述
(3)在server1主机上配置nginx负载均衡
定义一个上游服务tomcat:接受请求的服务器组
负载均衡配置完成后,nginx语法检测,nginx重新加载
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4) 在server4主机上,开启tomcat
在这里插入图片描述
测试:清空一下浏览器的缓存
使用浏览器访问test.jsp页面时可以看到是通过轮询两个tomcat服务器进行服务的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:
这样会造成用户的数据丢失
第一次注册的数据可能访问的是tomcat1,第二次登录的时候是访问的tomcat2
nginx做负载均衡,客户不知道后台是两个服务器在轮询,此时的两个tomcat服务器之间没有任何关系

nginx+sticky粘制模块实现tomcat负载均衡中的会话保持

针对上面的实验所产生的问题提出的解决方案
会话保持简意:
在一段时间内将同一客户的某一类型请求绑定至 同一台服务器上,使得这一时间段中该客户端所有该类型请求均由同一服务器进行处理
Sticky工作原理

sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie
来使同一个客户端的请求落在同一台服务器上,默认标识名为route
1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
2.后端服务器处理完请求,将响应数据返回给nginx。
3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
4.客户端接收请求,并保存带route的cookie。
5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器

增加nginx-sticky-module模块时需要重新编译nginx
(1)获取sticky模块安装包
nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
在这里插入图片描述
(2)对这个包解压
在这里插入图片描述
(3)重新编译nginx,新加模块使用 --add-module= 参数,把安装包的路径写在后面
在这里插入图片描述
(4)预编译完成后进行安装,这里是实验环境下所以我直接make && make install ,如果是在生产环境下就需要按照版本更新的方法进行安装
在这里插入图片描述
(5)编辑nginx配置文件:
vim /usr/local/lnmp/nginx/conf/nginx.conf
在定义的上游服务tomcat集群组里添加sticky参数
关闭重启nginx
在这里插入图片描述
在这里插入图片描述
(6)在物理机的浏览器里面进行测试
发现一个用户连续注册使用一直都是同一个tomcat服务器
一直在tomcat1上面进行使用(ID始终不变),实现了会话保持
在这里插入图片描述
客户会一直访问同一台tomcat服务器,实现了会话保持
即使后端一台tomcat服务器宕机,切换到另外一台tomcat服务器上面依然可以实现会话保持
但是此时在第一个tomcat主机上面的数据会丢失

实现session共享和会话保持(memcache—session交叉存放)实验

memcache-session
上个实验解决完粘滞会话问题后,还存在一个问题,当我们后台正在服务的服务器宕机了,这时用户再提交资料就会自动转到另一台服务器下,但是这台服务器并没有之前用户输入的信息,又会是一个空状态,这样的情况对用户不友好

如果用户1在tomcat1服务器上存储的数据,但是当tomcat1这个服务器挂了
客户就会去访问tomcat2的服务器,但是自己的数据在tomcat1上面
这个时候就要用到memcache这个存储节点,它属于交叉存储
tomcat1和tomcat2上面都有memcache存储(把数据缓存在内存当中) 分别为memcache1和memcache2
这两个存储节点属于存储节点 当tomcat1挂了之后,客户1就会去访问tomcat2对应的memcache
这时候会把用户放在memcache1的数据全部放到memcache2上面
如果tomcat服务器都好着,memcache不会同步数据过,一旦坏了立刻同步数据过来
这就是memcache-session交叉存储的好处

实验:
(1)在server1与server4中配置session管理器
拷贝memcache-session到server1和server4这两个tomcat服务器上面
将这些jar包放在 /usr/local/tomcat/lib/ 目录下
在这里插入图片描述
在这里插入图片描述
编辑tomcat配置文件:vim /usr/local/tomcat/conf/context.xml
两个服务器端都需要编辑
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)在server4中安装memchached并开启(server1中已经安装过)
在这里插入图片描述
在这里插入图片描述
(3)重启server1和server4中的tomcat
在这里插入图片描述
在这里插入图片描述
(4)测试:
是否实现数据共享(通过memcache)
在浏览器里面输入172.25.12.1/test.jsp
开始注册信息,一直是tomcat2服务器接受请求
然后关闭server4的tomcat服务
输入172.25.12.1/test.jsp
开始注册信息,发现同一个用户注册所有的数据会同步过来
如果两台都好着,不会同步,一旦一台宕机,数据会立刻同步到另外一台上面
注意:
想要实现session共享需要的tomcat版本是有要求的:比较老的版本才可以,安装apache-tomcat-7.0.37.tar.gz版本的tomcat结合上述的配置方式就可以实现session共享。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值