您的位置:首页 > 运维架构 > Tomcat

LNMP架构之tomcat安装与应用配置(session粘性、session共享)

2019-05-07 12:37 1986 查看

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

1.获得资源包,进行解压

[root@server1 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server1 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/

2.做链接

[root@server1 local]# ln -s jdk1.7.0_79 java
[root@server1 local]# ln -s apache-tomcat-7.0.37 tomcat

3.更改环境变量

[root@server1 local]# vim /etc/profile
79 export JAVA_HOME=/usr/local/java
80 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
81 export PATH=$PATH:$JAVA_HOME/bin

[root@server1 local]# source /etc/profile
[root@server1 local]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/root/bin:/usr/local/lnmp/mysql/bin:/root/bin:/root/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin:1281JAVA_HOME/bin:/usr/local/java/bin

[root@server1 local]# java -version			#查看java版本
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

4.写一个java的文件

[root@server1 ~]# vim test.java
public class test {
public static void main(String[] args)
{
System.out.println("hello world");
}
}

[root@server1 ~]# javac test.java
[root@server1 ~]# java test
hello world

5.打开tomcat

[root@server1 ~]# cd /usr/local/tomcat/
[root@server1 tomcat]# bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

[root@server1 tomcat]#  netstat -antlp|grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN      17256/java
[root@server1 tomcat]# tail -f logs/catalina.out
Apr 30, 2019 10:13:15 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.37/webapps/examples
Apr 30, 2019 10:13:16 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.37/webapps/manager
Apr 30, 2019 10:13:16 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Apr 30, 2019 10:13:16 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Apr 30, 2019 10:13:16 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 44384 ms

6.还原配置

[root@server1 tomcat]# cd /usr/local/openresty/nginx/conf/
[root@server1 conf]# vim nginx.conf
62         location ~ \.jsp$ {
63             proxy_pass   http://127.0.0.1:8080;
64         }




语法检测

[root@server1 conf]# ../sbin/nginx -t
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful

[root@server1 sbin]# ./nginx
[root@server1 sbin]# ./nginx -s reload
[root@server1 sbin]# pwd
/usr/local/openresty/nginx/sbin

7.检测

在浏览器
172.25.80.1

注意:在全新server2服务器上配置相同环境

[root@server2 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server2 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server2 ~]# cd /usr/local/
[root@server2 local]# ls
apache-tomcat-7.0.37  etc    include      lib    libexec  sbin   src
bin                   games  jdk1.7.0_79  lib64  lnmp     share
[root@server2 local]# ln -s jdk1.7.0_79/ java
[root@server2 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server2 local]# vim /etc/profile
[root@server2 local]# source /etc/profile
[root@server2 local]# cd /usr/local/tomcat/
[root@server2 tomcat]# ls
bin   lib      logs    RELEASE-NOTES  temp     work
conf  LICENSE  NOTICE  RUNNING.txt    webapps
[root@server2 tomcat]# bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@server2 tomcat]# netstat -antlp | grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN      1076/java

##测试:
在浏 1fff8 览器上开启两个窗口分别输入172.25.8.6:808 172.25.8.1:8080(会看到初始化欢迎页面)

在两台服务器上进入到默认发布目录下编写jsp文件

[root@server2 tomcat]# cd /usr/local/tomcat/webapps/ROOT/
[root@server2 ROOT]# vim test.jsp
server2-The time is: <%=new java.util.Date() %>

server1操作相同

测试:输入172.25.8.6:8080/test.jsp 172.25.8.1:8080/test.jsp

tomcat实现session黏性

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

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

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

1.确保前端open的nginx关闭,修改配置文件,作负载均衡配置

[root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
20 upstream tomcat {
21 server 172.25.8.6:8080;
22 server 172.25.8.1:8080;
23 }
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 }
65 # location ~ .php$ {
66 # root html;
67 # fastcgi_pass 127.0.0.1:9000;
68 # fastcgi_index index.php;
69 # #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
70 # include fastcgi.conf;
71 # }
[root@server1 conf]# nginx -s reload

浏览器访问172.25.8.6/test.jsp会发现轮循


修改tomcat发布页

1.修改发布页,两台相同

[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[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>
[root@server1 ROOT]# scp test.jsp root@172.25.80.2:/usr/local/tomcat/webapps/ROOT/

浏览器访问172.25.8.1/test.jsp会发现负载均衡和黏性互相破坏(当用户存储信息后,再次进入信息会清空)


解决方法

1.将之前的nginx关闭,将之前的nginx删除,重新降级编译安装

[root@server1 ~]# cd lnmp/
[root@server1 lnmp]# nginx -s stop
[root@server1 lnmp]# cd /usr/local/
[root@server1 local]# rm -rf nginx/

解压、编译、安装

[root@server1 lnmp]# tar zxf nginx-1.10.1.tar.gz
[root@server1 lnmp]# cd nginx-1.10.1
[root@server1 cc]# pwd
/root/lnmp/nginx-1.10.1/auto/cc
[root@server1 cc]# vim gcc	#注释debug日志级别
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module

注意:会出现./configure: error: no /usr/local/nginx-sticky-module-ng/config was found

session共享

1.关闭server1的tomcat,server2下载memcache

server1:

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

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@server2 lib]# /etc/init.d/memcached start

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.75.1:11211,n2:172.25.75.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

[root@server1 conf]# cd /usr/local/tomcat/bin/
[root@server1 bin]# ./startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

查看tomcat日志及端口:

5.测试

在浏览器输入:http://172.25.80.1/test.jsp

将server2的tomcat关闭,再测试。
客户端仍可以存储数据,之前的数据不会清空,完成。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐