LNMP架构之tomcat安装与应用配置(session粘性、session共享)
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关闭,再测试。
客户端仍可以存储数据,之前的数据不会清空,完成。
- Tomcat配置多应用共享Session(使用crossContext)
- linux下安装nginx并简单配置,利用tomcat-redis共享session
- tomcat server.xml配置crossContext 实现多应用中session共享
- Nginx+Tomcat+Memcached 集群Session共享[memcached服务安装、tomcat使用memcache存储session、nginx安装配置实现tomcat负载均衡]
- 详解之:linux下tomcat、nginx的负载均衡及memcached对session共享的实现配置详细总结
- 编译安装vsftpd-2.3.4(配置虚拟用户登录)高级应用全攻略[连载之电子商务系统架构]
- Windows环境下Nginx+Tomcat+Redis实现应用服务器集群负载均衡和Session共享
- tomcat6集群session共享配置的实现
- tomcat 集群配置,Session复制共享
- 基于nginx tomcat redis分布式web应用的session共享配置
- 基于Redis实现Apache和Tomcat集群的Session共享配置
- Tomcat 服务器配置及远程调试和不同web项目session共享方法以及设置TOMCAT的内存
- tomcat安装配置,虚拟目录,虚拟主机,默认端口,默认应用,默认主页,http协议知识
- 基于nginx tomcat redis分布式web应用的session共享配置
- Nginx+Tomcat+Redis实现应用服务器集群负载均衡和Session共享
- 【nginx】nginx tomcat session 共享配置
- Linux下Tomcat的安装配置 去掉应用名称
- 应用在tomcat上的部署以及将免安装的tomcat配置成服务自启动
- Tomcat多应用共享Session
- Nginx + Membase(memcache)+ tomcat配置共享的session web服务集群详解