Linux运维之Lnmp架构——tomcat安装及相关配置(session粘性、session共享)

一、tomcat是什么?

开源小型web服务器 ,完全免费,主要用于中小型web项目,只支持Servlet和JSP 等少量javaee规范(就是JavaWeb编程接口)

二、tomcat安装配置

1、下载jdk、tomcat包

tomcat下载网站:http://tomcat.apache.org
jdk可以在网上下载。
在这里插入图片描述

获得资源包以后,解压缩。

[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
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
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:/usr/local/lnmp/mysql/bin:/root/bin:/root/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin:/usr/local/java/bin

在这里插入图片描述

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 tomcat]# cd /usr/local/tomcat/bin/
[root@server1 bin]# ls
bootstrap.jar                 configtest.bat  setclasspath.bat  tomcat-juli.jar
catalina.bat                  configtest.sh   setclasspath.sh   tomcat-native.tar.gz
catalina.sh                   cpappend.bat    shutdown.bat      tool-wrapper.bat
catalina-tasks.xml            daemon.sh       shutdown.sh       tool-wrapper.sh
commons-daemon.jar            digest.bat      startup.bat       version.bat
commons-daemon-native.tar.gz  digest.sh       startup.sh        version.sh
[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
[root@server1 bin]# netstat -antlp | grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN      32313/java

在这里插入图片描述

6、更改nginx的配置文件

先关掉我们的openresty的nginx

在这里插入图片描述
编辑我们的源码安装的nginx的配置文件

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

在这里插入图片描述
检测配置文件:
在这里插入图片描述

扫描二维码关注公众号,回复: 6103527 查看本文章

7、启动nginx

[root@server1 sbin]# nginx 

8、测试

在浏览器输入:172.25.75.1:8080
在这里插入图片描述
会看到初始化欢迎页面。

进入tomcat的发布目录。

[root@server1 sbin]# cd /usr/local/tomcat/webapps/ROOT/
[root@server1 ROOT]# ls
asf-logo.png       bg-nav-item.png  favicon.ico        tomcat.gif        WEB-INF
asf-logo-wide.gif  bg-nav.png       index.jsp          tomcat.png
bg-button.png      bg-upper.png     RELEASE-NOTES.txt  tomcat-power.gif
bg-middle.png      build.xml        tomcat.css         tomcat.svg
[root@server1 ROOT]# vim test.jsp
[root@server1 ROOT]# cat test.jsp
server1-The time is: <%=new java.util.Date() %>

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

三、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、我们需要一台server2,和server1一样,配置jdk和tomcat。

在这里插入图片描述

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

nginx -s stop

关闭nginx

[root@server1 ~]# cd /usr/local/lnmp/nginx/conf/
[root@server1 conf]# vim nginx.conf

 17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20         upstream tomcat {
 21         server 172.25.75.1:8080;
 22         server 172.25.75.2:8080;
 23      }
  46        location / {
 47             root   /usr/local/tomcat/webapps/ROOT;
 48             index  index.html index.htm;
 49         }
  65        location ~ \.jsp$ {
 66              proxy_pass   http://tomcat;
 67         }
 71         #location ~ \.php$ {
 72         #    root           html;
 73         #    fastcgi_pass   127.0.0.1:9000;
 74         #    fastcgi_index  index.php;
 75             #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 76         #    include        fastcgi.conf;
 77         #}

3、将发布页远程同步给server2

在这里插入图片描述
更改:

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

在这里插入图片描述

4、server1的nginx重新启动。启动server1-2的tomcat

[root@server1 conf]# nginx
./startup.sh

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

5、测试

curl 172.25.75.1/test.jsp

在这里插入图片描述
会发现轮循!!!

6、更改默认发布页

[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 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# vim /usr/local/tomcat/webapps/ROOT/test.jsp 
[root@server1 ROOT]# scp test.jsp [email protected]:/usr/local/tomcat/webapps/ROOT/
[email protected]'s password: 
test.jsp                                                                    100%  967     0.9KB/s   00:00

在这里插入图片描述

7、浏览器访问,测试

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

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

8、解压缩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 

在这里插入图片描述

9、编辑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.75.1:8080;
 23         server 172.25.75.2:8080;
 24      }

在这里插入图片描述

10、重新启动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/

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

[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日志及端口:
在这里插入图片描述
server2:
在这里插入图片描述

5、测试

在浏览器输入:http://172.25.75.1/test.jsp
在这里插入图片描述
将server2的tomcat关闭,再测试!!!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
客户端仍可以存储数据,之前的数据不会清空!!!

猜你喜欢

转载自blog.csdn.net/qq_41830712/article/details/89681971