在LNMP中构建tomcat

1、nginx、tomcat、jdk的动态JSP页面访问

1.1 名词简介

JDK: Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

JSP:JSP(全称JavaServer Pages),部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

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

1.2 配置Java环境

##解压JDK包
[root@servera opt]# tar zxf /opt/rpms/jdk-7u79-linux-x64.tar.gz -C /usr/local

##添加源码包的连接
[root@servera jdk1.7.0_79]# ln -s /usr/local/jdk1.7.0_79/ /usr/local/java

##配置整体环境变量:/etc/profile
...
 74 export JAVA_HOME=/usr/local/java
 75 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
 76 export PATH=$PATH:$JAVA_HOME/bin
...

##重新加载系统环境
[root@servera jdk1.7.0_79]# source /etc/profile
图 1 Java基本环境配置

Java环境测试:

测试代码:

##测试代码
public class test {
	public static void main (Strin[] args)
	{
		System.out.println("Hello world!");
	}
}
图 2 检测java运行

1.3 tomcat配置

##解压压缩文件
[root@servera rpms]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local

##做软连接
[root@servera local]# ln -s apache-tomcat-7.0.37 /usr/local/tomcat

##启动tomcat(因为tomcat启动时不会报错,故需要查看日志)
[root@servera bin]# /usr/lcoal/tomcat/bin/startup.sh
[root@servera bin]# cat  /usr/lcoal/tomcat/logs/catalina.out 
图 3 解压tomcat,并做连接

 

图 4 启动tomcat并查看是否报错

1.4 配置Nginx

###开启Nginx,配置Nginx配置文件
[root@servera local]# vim /usr/local/lnmp/nginx/conf/nginx.conf
配合内容如下:
...
 72         location ~ \.jsp$ {
 73                 proxy_pass http://127.0.0.1:8080; ##不处理Java动态页面,交给本机的8080端口
 74         }
...

配置Nginx不对Java动态页面进行处理:

图 5 配置Nginx

访问测试:正常访问,但无图片

图 6 正常访问,但无图片
图 7 编辑动态时间界面,可以访问

【说明】tomcat默认发布页面位置:/usr/local/tomcat/webapps/ROOT/

2、tomcat下的负载均衡

通过两台主机配置负载均衡:

server1:配置了Nginx、tomacat、jdk。

server2:配置、tomacat、jdk。

##两台主机配置
##### server1 192.168.1.120 
## 因为server1 没用改变,所以无需配置,仅需要配置负载均衡即可。

修改配置文件(/usr/local/lnmp/nginx/conf/nginx.conf):
...
 18         upstream tomcat {                        ##配置服务端
 19                 server 192.168.1.120:8080;
 20                 server 192.168.1.110:8080;
 21         }

...
 76         location ~ \.jsp$ {
 77                 proxy_pass http://tomcat;       ##修改转发端口
 78         }

...


##### server2 192.168.1.110
## 配置server2 
##复制tomcat jdk 到server2上
scp -r 192.168.1.120:/usr/local/apache-tomcat-7.0.37/ /usr/local/
scp -r 192.168.1.120:/usr/local/jdk1.7.0_79 /usr/local

##编写配置server2环境变量的文件(/etc/profile)
....
 78 export JAVA_HOME=/usr/local/java
 79 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
 80 export PATH=$PATH:$JAVA_HOME/bin
...

##做链接
[root@server ~]# ln -s /usr/local/apache-tomcat-7.0.37/ /usr/local/tomcat
[root@server ~]# ln -s /usr/local/jdk1.7.0_79/ /usr/local/java

对server1而言: 配置负载均衡

图 8 配置负载均衡

对server2而言:

图 8 做链接,配置文件
图 9 server2 的测试文件

完成配置后,在serve2上进行测试:

开启Tomcat服务:

图 10 开启Tomcat服务

在web界面进行访问:

第一次访问:

图 11 第一次访问

第二次访问:

图 12 第二次访问

上述两次访问,即实现负载均衡。

3、基于nginx、tomcat、memcache的session存储

Session-会话控制:Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。

工作原理:

  • 当一个session第一次被启用时,一个独一的标识被存储于本地的cookie中。
  • 首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
  • 当执行PHP脚本时,通过使用session_register()函数注册session变量。
  • 当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。

3.1 实现负载均衡的同时,数据保留在当前页面

##首先配置一个简单的用户登录页面,源码如下:
<%@ 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>

上述测试页面server1 server2均应配置。

未开启“黏贴”前,进行测试:

图 13 用户2
图 14 用户3

上述测试反应,虽然实现负载均衡,但是数据是在不断刷新的,很明显这种体验对用户而言是非常差的。

修改配置文件,使数据“粘滞”:

##数据“粘滞”,添加sticky模块
###解压压缩包
[root@servera rpms]# unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

###重新编译Nginx
[root@servera 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=/opt/rpms/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
                ###添加模块进Nginx中

###编译程序,替换原版本
[root@servera nginx-1.18.0]#  make
[root@servera nginx-1.18.0]# cp objs/nginx /usr/local/lnmp/nginx/sbin/nginx

###修改配置文件
修改内容:
...
http {
        upstream tomcat {
                sticky;                        ##添加"粘滞"参数
                server 192.168.1.120:8080;
                server 192.168.1.110:8080;
        }


...

查看编译后的文件: 

图 15 查看当前文件
图 16 修改配置文件

 重启nginx测试:

图 17 多次输入,结果保留

3.2 memcache下的sesssion

当session会话时,server中,某台Tomcat挂掉,此时用户输入的数据会丢失,同样这对用户的体验也是不好的。此时需要memcache加入会话,可暂时保留用户的会话数据。

在上述会话保持中,session采用的数据存储方式为交叉存储,即A的服务,存到B的memcache中去,这样当A挂掉的同时,B任然有A的数据。

### 在server1 server2中配置session的服务管理器
图 18 session配置内容

【说明】上述tc6-1.6.3需要删除,因为该版本是6的。

同步server1 和server2的内容: 

图 19 同步内容
## 分别配置server1 server2的tomcat的配置文件:tomcat/conf/contest.xml

##server1配置内容:
...
 34   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
 35           memcachedNodes="n1:192.168.1,120:11211,n2:192.168.1.110:11211"
 36           failoverNodes="n1"
 37           requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
 38           transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.Kryo    TranscoderFactory"
 39   />
...

##server2配置内容:
...
 34   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
 35           memcachedNodes="n1:192.168.1,120:11211,n2:192.168.1.110:11211"
 36           failoverNodes="n2"
 37           requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
 38           transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.Kryo    TranscoderFactory"
 39   />
...

 开启server1 server2上的memcache:

###server1 直接开启
[root@servera conf]# systemctl restart memcached.service 


###server2 安装后开启
[root@server bin]# yum install -y memcached
[root@server bin]# systemctl start memcached.service 

开启后,可查看端口,是否开启成功:

图 20 查看是否开启成功

重启tomcat,并测试:

图 21 两台服务器均重启tomcat

测试:

当server1或server2中的某台主机中的tomcat挂掉,服务器仍能正常缓存数据。

图 22 正常存储数据

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值