Tomcat 服务器是一个免费的开源 web 应用服务器, 属于轻量级应用服务器, 在中小型系统和并发用户不是很多的场合中被普遍使用, 是开发和测试 JSP 程序的首选. 一般来说, Tomcat 虽然和 apache 或者 Nginx 这些 Web 服务器一样, 具有处理 html 页面的功能, 然而由于其处理静态页面的能力远不如 apache 或者 Nginx, 所以 Tomcat 一般是作为一个 servlet 和 JSP 容器, 单独运行在后端, Tomcat 应用场景如下:
用户访问的永远是 apache/Nginx 服务器, 然后由 apache/Nginx 服务器转交给 Tomcat 服务器处理, 所有服务器都连接着共享存储服务器, 以便使用户每次访问到数据是一样的, apache/Nginx 是用来做调度的, 也就是熟知的负载均衡, 关于负载均衡不多解释了...
通常情况下, 一台 Tomcat 站点由于可能出现单点故障及无法应付过多的客户复杂多样的请求等问题, 不能单独应用于生产环境下, 所以需要使用负载均衡来解决这些问题.
Nginx 是一个非常优秀的 http 服务器软件, 它能够支持高达 50000 个并发连接数的响应, 拥有强大的静态资源处理能力, 运行稳定, 并且内存, CPU 等系统资源消耗非常低. 目前很多大型网站都应用 Nginx 服务器作为后端网站程序的反向代理及负载均衡器, 来提升整个站点的负载并发能力.
开始准备工作, 搭建下面的环境, 为了简化, 就不部署共享存储服务器了, 环境如下:
一, 部署前准备:
三台服务器均使用 centos7 来部署, 部署过程中所用到的软件如下:
centos7 的系统映像;
Nginx 和 Tomcat 源码包, 可自行从官网下载, 也可从我提供的链接下载(已打包为 ISO 映像文件): 链接: https://pan.baidu.com/s/1hQOG-e9aaW8V2kvbBSzIxg
提取码: 9pdv
二, 配置 Tomcat 服务器:
1, 开始在 192.168.1.1 服务器上部署 Tomcat(关于防火墙的配置这里就省略了, 请自行配置防火墙以放行相关流量, 我这里直接停掉了防火墙, Tomcat 默认使用的端口号是 8080;Nginx 默认使用的端口号是 80):
- [[email protected] ~]# 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)
- [[email protected] media]# tar zxf apache-tomcat-8.5.16.tar.gz -C /usr/src #解压 Tomcat 包
- [[email protected] media]# cd /usr/src/
- [[email protected] src]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8
- #Tomcat 不用编译安装, 解压后即可用
- [[email protected] src]# mkdir -p /Web/webapp1 #建立 Java 的 Web 站点, 用于存放网站文件
- [[email protected] 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>
- [[email protected] 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 设置监视" 类 " 是否变化;
- [[email protected] ~]# /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.
- [[email protected] 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 服务器的测试页面内容更改一下, 如下:
- [[email protected] 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>
三, 配置 Nginx 服务器(IP:192.168.1.1):
1, 安装 Nginx:
- [[email protected] ~]# yum -y install pcre-devel zlib-devel openssl-devel
- #安装依赖包
- [[email protected] ~]# useradd www -s /bin/false #创建运行用户
- [[email protected] media]# tar zxf nginx-1.12.0.tar.gz -C /usr/src #解包
- [[email protected] media]# cd /usr/src/nginx-1.12.0/ #切换至该目录
- [[email protected] 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 #编译安装
- [[email protected] 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 项后面的名字一致, 才可实现调度.
- }
2, 优化 Nginx 的控制:
- [[email protected] nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
- # 创建主程序的链接文件
- [[email protected] ~]# 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
- [[email protected] ~]# chmod +x /etc/init.d/nginx #添加执行权限
- [[email protected] ~]# chkconfig --add nginx #添加为系统服务
- [[email protected] 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
- [[email protected] ~]# systemctl start nginx #启动 Nginx 服务, 以确认脚本的正常运行
- [[email protected] ~]# netstat -anpt | grep nginx #查看 80 端口是否处于监听状态
- tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 90475/nginx: master
四, 访问测试:
至此, 部署工作已经完成, 现在使用客户机访问 Nginx 服务器 192.168.1.1 测试, 效果如下:
第一次访问将会看到如下界面:
刷新一下网页将会看到如下界面
可以看到, 我们访问的是 Nginx 服务器, 真正处理访问请求的是 Tomcat 服务器, 而且每次访问请求都是不同的 Tomcat 服务器来处理, 效果也就显而易见了.
五, 写在最后: 部署过程中遇到的小小问题:
在更改完 Tomcat 服务器的配置文件后, 访问测试时, 看到访问的依然是 Tomcat 自带的默认页面, 有点摸不着头脑, 试着使用如下命令来对 Tomcat 服务进行几次启停后, 就好了:
- [[email protected] 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
- [[email protected] 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 服务停止后, 查端口号是查不到的, 如下:
- [[email protected] ~]# systemctl stop nginx
- [[email protected] ~]# netstat -anpt | grep nginx #Nginx 服务停止后, 什么都查不到
- [[email protected] ~]#
而 Tomcat 服务停止后, 查端口号会发现, 状态如下(启动时的 Listen 状态变成了 TIME_WAIT 状态), 等待片刻后, 才查不到相关信息:
- [[email protected] webapp1]# netstat -antp | grep 8080
- tcp6 0 0 ::1:56448 ::1:8080 TIME_WAIT
不深究了, 最后效果出来就好了, 而且也是第一次遇见这种情况.
来源: http://www.bubuko.com/infodetail-3099836.html