文章目录
一、Tomcat 简介
参考之前的博客:https://blog.csdn.net/ZG_66/article/details/108584801
- 最初是由 Sun 的软件构架师詹姆斯·邓肯·戴维森开发的
- 安装 Tomcat 后,安装路径下面的目录和文件,是使用或者配置 Tomcat 的重要文件
1.1 应用场景
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。
一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的 功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx 所以 Tomcat 通常是作 为一个 Servlet 和 JSP 容器,单独运行在后端
1.2 Tomcat 重要目录
- bin:存放启动和关闭 Tomcat 脚本
- conf:存放 Tomcat 不同的配置文件
- doc:存放 Tomcat 文档
- lib:存放 Tomcat 运行需要的库文件
- logs:存放 Tomcat 执行时的 LOG 文件
- src:存放 Tomcat 的源代码
- webapps:Tomcat 的主要 Web 发布目录
- work:存放 jsp 编译后产生的 class 文件
二、Nginx 应用
参考之前的博客:
https://blog.csdn.net/ZG_66/article/details/108490310
■ Nginx 是一款非常优秀的 HTTP 服务器软件
- 支持高达 50000 个并发连接数的响应
- 拥有强大的静态资源处理能力
- 运行稳定
- 内存、CPU 等系统资源消耗非常底
■ 目前很多大型网站都应用 Nginx 服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力
三、Nginx 负载均衡原理
■ Nginx 实现负载均衡是通过反向代理实现
■ 反向代理原理
■ Nginx 配置反向代理的主要参数:
- upstream 服务池名 {}
◆ 配置后端服务器池,已提供响应数据 - proxy_pass http://服务池名
◆ 配置将访问请求转发后端服务器池的服务器处理器
四、Nginx 动静分离实现原理
■ 动静分离原理
- 服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源有 Nginx 提供服务,动态资源 Nginx 转发至后端
■ Nginx 静态处理优势
- Nginx 处理静态页面的效率远高于 Tomcat 的处理能力
- 若 Tomcat 的请求量为 1000 次,则 Nginx 的请求量为 6000 次
- Tomcat 每秒的吞吐量为 0.6M,Nginx 的每秒吞吐量为 3.6M
- Nginx 处理静态资源的能力是 Tomcat 处理的6倍
五、实验
5.1 实验准备
■ 以 Nginx 作为负载均衡器,Tomcat 作为应用服务器
■ 环境配置
主机 | 操作系统 | IP地址 | 主要软件 |
---|---|---|---|
Nginx服务器 | CentOS7.6 | 192.168.100.21 | nginx-1.12.0.tar.gz |
Tomcat服务器1 | CentOS7.6 | 192.168.100.22 | apache-tomcat-7.0.54.tar.gz |
Tomcat服务器2 | CentOS7.6 | 192.168.100.23 | apache-tomcat-7.0.54.tar.gz |
5.2 实验步骤
5.2.1 安装配置Tomcat
在安装 Tomcat 之前必须先安装 JDK
运行 java -version 命令查看 Java 是否安装,如果没有安装需要自行下载安装
'###查看JDK是否安装,如果是图形界面安装的系统,需要将原有的java卸载###'
[root@localhost ~]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@localhost ~]# rpm -q java
package java is not installed
[root@localhost ~]# rpm -qa |grep java
java-1.7.0-openjdk-headless-1.7.0.191-2.6.15.5.el7.x86_64
java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
tzdata-java-2018e-3.el7.noarch
python-javapackages-3.4.1-11.el7.noarch
javapackages-tools-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
java-1.7.0-openjdk-1.7.0.191-2.6.15.5.el7.x86_64
[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.191-2.6.15.5.el7.x86_64
[root@localhost ~]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
[root@localhost ~]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.191-2.6.15.5.el7.x86_64
[root@localhost ~]# cd /opt
[root@localhost opt]# tar xzvf jdk-8u144-linux-x64.tar.gz
[root@localhost opt]# cp -rv jdk1.8.0_144/ /usr/local/java
[root@localhost opt]# vi /etc/profile
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib
[root@localhost opt]# source /etc/profile
[root@localhost opt]# java -version
'###java环境变成1.8.0_144的###'
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
'###解压 apache-tomcat-8.5.23.tar.gz 包###'
[root@localhost ~]# tar xf apache-tomcat-8.5.23.tar.gz
[root@localhost ~]# mv apache-tomcat-8.5.23/ /usr/local/tomcat8
[root@localhost ~]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@localhost ~]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
[root@localhost ~]# tomcatup
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.
[root@localhost ~]# netstat -anpt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 22283/java
网页登录:
192.168.100.22:8080
192.168.100.23:8080
5.2.2 建立Java 的Web 站点
Tomcat 1 服务器(192.168.100.22)
[root@localhost ~]# mkdir -pv /web/webapp1
mkdir: created directory ‘/web’
mkdir: created directory ‘/web/webapp1’
[root@localhost ~]# 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("动态页面 1,http://www.51xit.com");%>
</body>
<body>
<div>静态页面的图片 1</div><br><img src="logo.jpg">
</body>
</html>
[root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> 在此处插入下面两行
<Context docBase="/web/webapp1" path="" reloadable="false" >
</Context>
[root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat8/bin/startup.sh
网页登录:
192.168.100.22:8080
显示“静态页面的图片 1”文字,并没有出现 logo.jpg 图片,原因是由于静态图片暂时没配,所以加载不出来
Tomcat 1 服务器(192.168.100.23)
[root@localhost ~]# mkdir -pv /web/webapp1
mkdir: created directory ‘/web’
mkdir: created directory ‘/web/webapp1’
[root@localhost ~]# 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("动态页面 2,http://www.52xit.com");%>
</body>
<body>
<div>静态页面的图片 2</div><br><img src="logo.jpg">
</body>
</html>
[root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> 在此处插入下面两行
<Context docBase="/web/webapp1" path="" reloadable="false" >
</Context>
[root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat8/bin/startup.sh
网页登录:
192.168.100.23:8080
同样,第二台也是如此
5.2.3 Nginx 服务器配置
在 Nginx 服务器 192.168.100.21上安装 Nginx,反向代理到两个 Tomcat 站点,并实现 负载均衡
'###安装 Nginx ###'
[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel gcc-c++
[root@localhost ~]# groupadd www
[root@localhost ~]# useradd -g www www -s /bin/false
[root@localhost opt]# tar xzvf nginx-1.15.9.tar.gz
[root@localhost opt]# cd nginx-1.15.9/
[root@localhost nginx-1.15.9]#
./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
[root@localhost nginx-1.12.0]# make && make install
[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost ~]# 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 ~]# nginx ####启动
[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
'###配置 nginx.conf'
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
#gzip on;
upstream tomcat_server {
server 192.168.100.22:8080 weight=1;
server 192.168.100.23:8080 weight=1;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ .*.jsp$ {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 30d;
}
location / {
root html;
index index.html index.htm;
}
…… '//省略部分内容 '
}
…… '//省略部分内容 '
}
'###配置 Nginx 静态页面###'
[root@localhost ~]# vim /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>静态页面</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>静态页面</h1>
<p>这是个静态页面</p>
</body>
</html>
'###在Nginx 上准备静态图片###'
[root@localhost ~]# mkdir /usr/local/nginx/html/img
[root@localhost ~]# mv /opt/logo.jpg /usr/local/nginx/html/img
[root@localhost ~]# 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 ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
5.3 验证
登录网页:
192.168.100.21
可以看到访问到 nginx 静态页面
登录网页:
192.168.100.21/index.jsp
不断刷新浏览器测试,可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现动态页面1的测试页面,并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现动态页面2的测试页面,说明负载均衡群集搭建成功,已经可以 在两个 Tomcat server 站点进行切换了。