一、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服务器。
二、实验环境(rhel6.5版本)
主机环境:rhel6.5 selinux 和iptables 都必须是disabled状态
各主机信息
主机名 | IP | 服务 |
---|---|---|
server1 | 172.25.8.1 | Nginx(OpenResty),tomcat,memcached |
server2 | 172.25.8.2 | tomcat,memcached |
三、Tomcat的安装与配置
1、下载tomcat安装包和jdk(java)并解压
2、制作软链接,便于管理更新
3、更改环境变量并刷新
#在该文件的最后加入下面的内容
#刷新
4、测试java
#生成test.class文件
5、开启Tomcat服务
#进到bin目录下执行脚本
#查看tomcat的监听端口8080是否已经打开
6、测试tomcat
网页输入:172.25.8.1:8080,即可访问到tomcat的默认发布页
7、更改nginx配置文件并重新加载nginx服务
#将该location模块的注释去掉,并改为如下的内容
8、编辑nginx(OpenRestry)的默认发布目录下index.jsp文件
9、网页测试
网页输入:172.25.8.1/index.jsp,即可访问到tomcat发布网页index.jps
四、实现server1与server2的tomcat负载均衡
配置server2:
1、拷贝server1上tomcat与java的解压目录到server2上
2、同样更改环境变量并刷新
3、开启tomcat
4、测试tomcat
网页输入:172.25.8.2:8080,即可访问到tomcat的默认发布页
配置server1:
1、修改nginx配置文件
2、重新加载配置文件
3、编写测试文件test.jsp
接着配置server2:
5、将server1端编写好的test.jsp文件发送到server2端的/usr/local/tomcat/webapps/ROOT/目录下,并修改test.jsp文件
测试:
网页输入172.25.8.1/test.jsp,不断刷新页面,轮询出现server1与server2上test.jsp网页
当server1和server2中有一端的tomcat服务挂掉之后,访问时不再轮循,只能访问到tomcat服务正常的那一端(这里以server2端的tomcat服务挂掉为例)
刷新web界面,看到的仍然是这个界面
至此,server1与server2的tomcat负载均衡已经实现
开启server2端的tomcat服务,以免影响后续的实验
五、session共享(交叉存储)
1、什么是session?
- 在计算机专业术语里:session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册入系统到注销系统之间所经过的时间以及如果需要的话,可能还有一定操作空间。
- session技术则是服务端的解决方案,它是通过服务器来保持状态的。由于Session这个词汇包含的语义很多,因此需要在这里明确一下 Session的含义。首先,我们通常都会把Session翻译成会话,因此我们可以把客户端浏览器与服务器之间一系列交互的动作称为一个 Session。从这个语义出发,我们会提到Session持续的时间,会提到在Session过程中进行了什么操作等等;其次,Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。从这个语义出发,我们则会提到往Session中存放什么内容,如何根据键值从 Session中获取匹配的内容等。要使用Session,第一步当然是创建Session了。那么Session在何时创建呢?当然还是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。
2、sessioin的部署:
(1)server1与server2编写测试页面文件test1.jsp
(2)关闭之前的nginx
(3)下载旧版本的nginx(因为旧版本的nginx支持sticky(交叉存储)模块)并解压
(4)隐藏版本号与关闭debug日志
(5)编译安装nginx
由于需要sticky模块,所以需要下载该模块的安装包:nginx-sticky-module-ng.tar.gz
#预编译
#编译与安装
(6)更改nginx配置文件
(7)检测语法是否有误,无误后开启nginx
(8)网页测试:
此时提交后不会交替接收,可以一直存于某一个服务器,这样数据就不容易丢失。(这就是sticky模块的作用)
修改/usr/local/tomcat/webapps/ROOT/test1.jsp文件,将其中的test.jsp改为test1.jsp,否则在web界面填入name和key值之后,点击Submit Query之后,会自动跳转到test.jsp界面
存入的内容信息user1=111在/usr/local/tomcat/logs/catalina.out文件中可以查询(只在server1 上查看到了,在server2 上并无此数据)
不足之处:但如果某个后端服务器挂了,可是客户端并不知晓,当你再提交请求时,便会由另一个后端服务器接管,虽然还是可以提交数据,但你之前提交的数据便会丢失。
解决方法如下:利用memcache存储与tomcat的jar包使用交叉存储的方式进行存储,进而实现session共享
1、拷贝jar包(存有所需要的软件包)
#其中lib目录中存放着所有需要的.jar包(是在网上下载好的)
#不需要jar此包
2、更改配置文件
#在<Context>,</Context>模块中加入如下的35-40行的内容
3、重启tomcat
4、重启后查看端口
5、安装memcached并启动memcached服务——这步在部署博文LNMP模块——Memcache实现php页面的加速缓存时已经做过,所以这里不需要再重复进行操作。
配置server2:
1、同样拷贝jar包
同server1的配置
2、编辑配置文件
3、重启tomcat
4、重启tomcat后查看端口
5、安装memcache,并开启服务
测试:
网页输入172.25.8.1/test1.jsp,连续提交信息
此时我们连续添加四个信息在server1上了(可查看日志——/usr/local/tomcat/logs/catalina.out文件中的内容),此时我们关掉server1的tomcat,查看当另一个服务器server2接管后,会不会保留我们之前添加的这些信息
server2接管,之前的信息依旧存在,这就实现了session共享(交叉存储)