Tomcat服务器是一个免费的开源web应用服务器,属于轻量级应用服务器,在中小型系统和并发用户不是不少的场合中被广泛使用,是开发和测试JSP程序的首选。通常来讲,Tomcat虽然和apache或者Nginx这些web服务器同样,具备处理HTML页面的功能,然而因为其处理静态页面的能力远不如apache或者Nginx,因此Tomcat通常是做为一个servlet和JSP容器,单独运行在后端,Tomcat应用场景以下:html
用户访问的永远是apache/Nginx服务器,而后由apache/Nginx服务器转交给Tomcat服务器处理,全部服务器都链接着共享存储服务器,以便使用户每次访问到数据是同样的,apache/Nginx是用来作调度的,也就是熟知的负载均衡,关于负载均衡很少解释了。。。java
一般状况下,一台Tomcat站点因为可能出现单点故障及没法应付过多的客户复杂多样的请求等问题,不能单独应用于生产环境下,因此须要使用负载均衡来解决这些问题。nginx
Nginx是一个很是优秀的http服务器软件,它可以支持高达50000个并发链接数的响应,拥有强大的静态资源处理能力,运行稳定,而且内存、CPU等系统资源消耗很是低。目前不少大型网站都应用Nginx服务器做为后端网站程序的反向代理及负载均衡器,来提高整个站点的负载并发能力。web
开始准备工做,搭建下面的环境,为了简化,就不部署共享存储服务器了,环境以下:apache
1、部署前准备:bootstrap
三台服务器均使用centos7来部署,部署过程当中所用到的软件以下:vim
2、配置Tomcat服务器:后端
这篇博文以实现最终效果为目的,若想了解关于Tomcat配置文件的说明及做用,能够参考博文:http://www.javashuo.com/article/p-xvmpnkif-kq.html 。centos
一、开始在192.168.1.1服务器上部署Tomcat(关于防火墙的配置这里就省略了,请自行配置防火墙以放行相关流量,我这里直接停掉了防火墙,Tomcat默认使用的端口号是8080;Nginx默认使用的端口号是80):tomcat
[root@localhost ~]# java -version #查看JDK是否安装,若没有,自行安装 openjdk version "1.8.0_161" OpenJDK Runtime Environment (build 1.8.0_161-b14) OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode) [root@localhost media]# tar zxf apache-tomcat-8.5.16.tar.gz -C /usr/src #解压Tomcat包 [root@localhost media]# cd /usr/src/ [root@localhost src]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8 #Tomcat不用编译安装,解压后便可用 [root@localhost src]# mkdir -p /web/webapp1 #创建Java的web站点,用于存放网站文件 [root@localhost src]# vim /web/webapp1/index.jsp #创建一个index.jsp的测试页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>JSP test1 page</title> </head> <body> <% out.println("www.test1111.com");%> </body> </html> [root@localhost src]# vim /usr/local/tomcat8/conf/server.xml #修改Tomcat的主配置文件 ...................................... <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> #定位到该行,而后添加下面两行内容 <Context docBase="/web/webapp1" path="" reloadable="false"> </Context> #docBase:web应用的文档默认目录; #path=""设置默认“类;” #reloadable设置监视“类”是否变化; [root@localhost ~]# /usr/local/tomcat8/bin/startup.sh #启动服务,中止服务的话,只需将startup.sh换为shutdown.sh便可。 Using CATALINA_BASE: /usr/local/tomcat8 Using CATALINA_HOME: /usr/local/tomcat8 Using CATALINA_TMPDIR: /usr/local/tomcat8/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat8/bin/usr/local/tomcat8/bin/tomcat-juli.jar Tomcat started. [root@localhost src]# netstat -antp | grep 8080 #查看默认端口8080是否在监听状态 tcp6 0 0 :::8080 :::* LISTEN 13220/java
本机测试访问:192.168.1.1:8080,看到以下测试页面:
至此,192.168.1.1的Tomcat就已经配置完成了,另外一台Tomcat服务器192.168.1.2的配置和192.168.1.1的配置彻底同样,将上面的配置在192.168.1.2服务器上配置一遍便可,不过为了测试的时候能够看出负载均衡的效果,让咱们能够看出每次访问的服务器都不是同一台,须要将192.168.1.2的Tomcat服务器的测试页面和192.168.1.1的页面不同。
不过在实际生产环境中,两台Tomcat访问的必定是使用同一个共享存储服务器,不论是哪台服务器向用户提供服务,用户接受到的页面必定是同样的。
本身在192.168.1.2的服务器上将上面的配置来一遍吧,将192.168.1.2服务器的测试页面内容更改一下,以下:
[root@localhost src]# vim /web/webapp1/index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>JSP test1 page</title> </head> <body> <% out.println("www.test22222222222222.com");%> </body> </html>
3、配置Nginx服务器(IP:192.168.1.1):
一、安装Nginx:
[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel #安装依赖包 [root@localhost ~]# useradd www -s /bin/false #建立运行用户 [root@localhost media]# tar zxf nginx-1.12.0.tar.gz -C /usr/src #解包 [root@localhost media]# cd /usr/src/nginx-1.12.0/ #切换至该目录 [root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module && make && make install #编译安装 [root@localhost nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf #编辑主配置文件 ............................. #gzip on; #定位到该行,写入下面四行 upstream tomcat_server { server 192.168.1.1:8080 weight=1; server 192.168.1.2:8080 weight=1; } #写到这里结束 #weight参数表示权重,权重越高,表示被分配到的几率越大。 #为了测试效果明显,这里将权重设置为同样 server { listen 80; server_name localhost; ...................... location / { root html; index index.html index.htm; proxy_pass http://tomcat_server; #定位到该{ }中,写入该行,“http://”后面的名字要和上面添加的upstream项后面的名字一致,才可实现调度。 }
二、优化Nginx的控制:
[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #建立主程序的连接文件 [root@localhost ~]# vim /etc/init.d/nginx #编辑服务脚本 #!/bin/bash # chkconfig: - 99 20 PROG="/usr/local/nginx/sbin/nginx" PIDF="/usr/local/nginx/logs/nginx.pid" case "$1" in start) $PROG ;; stop) kill -s QUIT $(cat $PIDF) ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PIDF) ;; *) echo "USAGE:$0 {start | stop | restart | reload}" exit 1 esac exit 0 [root@localhost ~]# chmod +x /etc/init.d/nginx #添加执行权限 [root@localhost ~]# chkconfig --add nginx #添加为系统服务 [root@localhost nginx-1.12.0]# nginx -t #检查主配置文件是否有误 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@localhost ~]# systemctl start nginx #启动Nginx服务,以确认脚本的正常运行 [root@localhost ~]# netstat -anpt | grep nginx #查看80端口是否处于监听状态 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 90475/nginx: master
4、访问测试:
至此,部署工做已经完成,如今使用客户机访问Nginx服务器192.168.1.1测试,效果以下:
第一次访问将会看到以下界面:
刷新一下网页将会看到以下界面
能够看到,咱们访问的是Nginx服务器,真正处理访问请求的是Tomcat服务器,并且每次访问请求都是不一样的Tomcat服务器来处理,效果也就显而易见了。
5、写在最后:部署过程当中遇到的小小问题:
在更改完Tomcat服务器的配置文件后,访问测试时,看到访问的依然是Tomcat自带的默认页面,有点摸不着头脑,试着使用以下命令来对Tomcat服务进行几回启停后,就行了:
[root@localhost webapp1]# /usr/local/tomcat8/bin/shutdown.sh #中止服务 Using CATALINA_BASE: /usr/local/tomcat8 Using CATALINA_HOME: /usr/local/tomcat8 Using CATALINA_TMPDIR: /usr/local/tomcat8/temp Using JRE_HOME: /usr Using CLASSPATH:/usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar [root@localhost webapp1]# /usr/local/tomcat8/bin/startup.sh #启动服务 Using CATALINA_BASE: /usr/local/tomcat8 Using CATALINA_HOME: /usr/local/tomcat8 Using CATALINA_TMPDIR: /usr/local/tomcat8/temp Using JRE_HOME: /usr Using CLASSPATH:/usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar Tomcat started.
多是这个服务启停的问题,没有深究,这个服务与别的服务都不太同样:
Nginx服务中止后,查端口号是查不到的,以下:
[root@localhost ~]# systemctl stop nginx [root@localhost ~]# netstat -anpt | grep nginx #Nginx服务中止后,什么都查不到 [root@localhost ~]#
而Tomcat服务中止后,查端口号会发现,状态以下(启动时的Listen状态变成了TIME_WAIT状态),等待片刻后,才查不到相关信息:
[root@localhost webapp1]# netstat -antp | grep 8080 tcp6 0 0 ::1:56448 ::1:8080 TIME_WAIT
不深究了,最后效果出来就行了,并且也是第一次碰见这种状况。