一、基础概念
1.什么是Tomcat?
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,它早期的名称为catalina,后来由Apache、Sun 和其他一些公司及个人共同开发而成,并更名为Tomcat。Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选,因为Tomcat 技术先进、性能稳定,成为目前比较流行的Web 应用服务器。Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展,但它是独立运行的。
tomcat可以查看jsp页面
搭建步骤:
1.获得资源包,进行解压
[root@server1 lnmp]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server1 lnmp]# 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
[root@server1 local]# which java
[root@server1 local]# which javac
4.写一个java的文件
[root@server1 ~]# vim test.java
1 public class test {
2 public static void main(String[] args)
3 {
4
5 System.out.println("hello world");
6 }
7
8 }
[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
注意:在全新server2服务器上配置相同环境
测试:
在浏览器上开启两个窗口分别输入172.25.254.1:8080 172.25.254.2:8080(会看到初始化欢迎页面)
6.在两台服务器上进入到默认发布目录下编写jsp文件
[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# vim test.jsp
[root@server1 ROOT]# cat test.jsp
server1-The time is: <%=new java.util.Date() %>
[root@server2 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server2 ROOT]# vim test.jsp
[root@server2 ROOT]# cat test.jsp
server2-The time is: <%=new java.util.Date() %>
测试:输入172.25.254.1:8080/test.jsp 172.25.254.2:8080/test.jsp
- 实现负载均衡
1.确保前端openresty的nginx关闭,修改配置文件,作负载均衡配置
[root@server1 conf]# pwd
/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.254.1:8080;
22 server 172.25.254.2:8080;
23 }
46 location / {
47 root /usr/local/tomcat/webapps/ROOT;
48 index index.html index.htm;
49 }
62 location ~ \.jsp$ {
63 proxy_pass http://tomcat;
64 }
68 #location ~ \.php$ {
69 # root html;
70 # fastcgi_pass 127.0.0.1:9000;
71 # fastcgi_index index.php;
72 # #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
73 # include fastcgi.conf;
74 #}
[root@server1 conf]# nginx -s reload
浏览器访问172.25.254.1/test.jsp会发现轮循
三、Tomcat 实现session共享
什么是session:
- 在计算机中,尤其是在网络应用中,称为“会话控制”。
- Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session 对象。 当会话过期或被放弃后,服务器将终止该会话。
- Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。
为什么要使用session
为了对数据的保存更加牢靠,我们选择交叉存放session的方法,即将访问tomcat1上的数据存放在memcache2中,将访问tomcat2上的数据存放在memcache1中,这样存放,当某个tomcat服务断了之后,访问它的客户session并不会消失,而是存放在了对立的memcache,如果存放session的memcache坏了,那么它的数据会立即切换到另一个memcached中
配置过程
修改发布页,两台相同
[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# vim test.jsp
[root@server1 ROOT]# scp test.jsp root@172.25.254.2:/usr/local/tomcat/webapps/ROOT/
浏览器访问172.25.254.1/test.jsp会发现负载均衡和黏性互相破坏(当用户存储信息后,再次进入信息会清空)
在server2上传信息,提交后信息会在server1上
在server1上传信息,信息会出现在server2
注意:我们发现,每次提交新的用户信息,server info 和 ID 都会改变,且新的数据就会覆盖旧的数据内容
搭建步骤:
实现session黏性,将数据绑定到一台后端服务器
1.将之前的nginx关闭,将之前的nginx删除,重新降级编译安装
[root@server1 lnmp]# nginx -s stop
[root@server1 lnmp]# cd /usr/local/lnmp/
[root@server1 lnmp]# ls
mysql nginx php
[root@server1 lnmp]# rm -rf nginx/
2.解压、编译、安装
[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]# pwd
/root/lnmp/nginx-1.10.1
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/usr/local/nginx-sticky-module-ng
注意:会出现./configure: error: no /usr/local/nginx-sticky-module-ng/config was found的报错
[root@server1 lnmp]# tar zxf nginx-sticky-module-ng.tar.gz -C /usr/local/
进入解压目录,重新进行编译
[root@server1 nginx-1.10.1]# make && make install
3.编辑配置文件
[root@server1 conf]# pwd
/usr/local/lnmp/nginx/conf
[root@server1 conf]# vim nginx.conf
2 user nginx nginx;
3 worker_processes auto;
17 http {
18 include mime.types;
19 default_type application/octet-stream;
20 upstream tomcat {
21 sticky;
22 server 172.25.254.1:8080;
23 server 172.25.254.2:8080;
24 }
38 gzip on;
48 location / {
49 root /usr/local/tomcat/webapps/ROOT;
50 index index.html index.htm;
51 }
64 location ~ \.jsp$ {
65 proxy_pass http://tomcat;
66 }
[root@server1 conf]# nginx
测试:浏览器输入172.25.254.1/test.jsp
提交数据发现,绑定的主机都是server1
- session 交叉存储的实现
为了实验效果的查看,可以先将日志信息清空
[root@server1 ~]# cd /usr/local/tomcat/logs/
[root@server1 logs]# >catalina.out
[root@server2 ~]# cd /usr/local/tomcat/logs/
[root@server2 logs]# >catalina.out
尝试在浏览器上server1上提交2个用户的信息
测试:将server1的tomcat关闭
[root@server1 tomcat]# pwd
/usr/local/tomcat
[root@server1 tomcat]# bin/shutdown.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
在浏览器页面在server2上提交信息,发现并没有将server1提交的user5、user6的信息缓存过来
[root@server2 logs]# pwd
/usr/local/tomcat/logs
[root@server2 logs]# tail -f catalina.out #发现并没有将信息缓存过来
交叉存储的配置搭建:
1.确保server1和server2的tomcat都打开
[root@server1 tomcat]# pwd
/usr/local/tomcat
[root@server1 tomcat]# bin/startup.sh
[root@server2 tomcat]# pwd
/usr/local/tomcat
[root@server2 tomcat]# bin/startup.sh
2.在server1和server2上都要安装memcached
[root@server2 jar]# cp * /usr/local/tomcat/lib/
[root@server2 jar]# cd /usr/local/tomcat/lib/
[root@server2 lib]# ls
[root@server2 lib]# rm -rf memcached-session-manager-tc6-1.6.3.jar
server1操作相同
3.编辑tomcat的配置文件
[root@server1 lib]# vim /usr/local/tomcat/conf/context.xml
33 -->
34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
35 memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211"
36 failoverNodes="n1"
37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoder Factory"
39 />
40 </Context>
[root@server1 lib]# scp /usr/local/tomcat/conf/context.xml root@172.25.254.2:/usr/local/tomcat/conf/
[root@server2 lib]# vim /usr/local/tomcat/conf/context.xml
4.安装memcached
[root@server2 lib]# yum install memcached -y
[root@server2 lib]# /etc/init.d/memcached start
[root@server1 lib]# /etc/init.d/memcached start
进入浏览器,在server2上提交信息,然后关闭server2的tomcat
[root@server2 tomcat]# pwd
/usr/local/tomcat
[root@server2 tomcat]# bin/shutdown.sh
在server1上查到缓存的信息
[root@server1 logs]# pwd
/usr/local/tomcat/logs
[root@server1 logs]# tail -f catalina.out
以上情况是server1和server2都打开tomcat下,实现数据交叉存放存储
当1开启,2关闭的时候,在1上添加新的信息,然后打开2,再关闭1(顺序不能换,否则不成功),则在2上也可以看到新的信息