目录
一、 Tomcat简介
1.1 Tomcat简介
■最初是由Sun的软件架构师詹姆斯.邓肯.戴维森开发
■安装Tomcat后,安装路径下面的目录和文件是使用或者配置Tomcat的重要文件
1.2 Tomcat重要目录
■bin:存放启动和关闭Tomcat脚本
■conf:存放Tomcat不同的配置文件
■doc:存放Tomcat文档
■lib:存放Tomcat运行需要的库文件
■logs:存放Tomcat执行时的LOG文件
■src:存放Tomcat的源代码
■webapps:Tomcat的主要Web发布目录
■work:存放jsp编译后产生的class文件
1.3 Nginx应用
■
●支持高达5万个并发连接数的响应
●拥有强大的静态资源处理能力
●运行稳定
●内存、CPU等系统资源消耗非常低
■目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡,提升整个站点的负载并发能力
二、 Nginx负载均衡原理
■Nginx实现负载均衡是通过反向代理实现
■反向代理原理
■Nginx配置反向代理的主要参数
●upstream服务池名{}
★配置后端服务器池,以提供响应数据
●proxy_pass http://服务池名
★配置将访问请求转发给后端服务器池的服务器处理
三、 Nginx动静分离原理
3.1 动静分离原理
■服务器端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端交给tomcat
3.2 静态处理优势
■Nginx处理静态页面的效率远高于Tomcat的处理能力
■若Tomcat的请求量为1000次,则Nginx的请求量为6000次
■Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
■Nginx处理静态资源的能力是Tomcat处理的6倍
四、实验部署
4.1 案例环境
注:所有服务器均配置关闭防火墙、关闭核心防护,yum环境部署
主机 操作系统 IP地址 主要软件
Nginx服务器 CentOS7.6 20.0.0.10 nginx
Tomcat服务器1 CentOS7.6 20.0.0.11 apache-tomcat
Tomcat服务器2 CentOS7.6 20.0.0.12 apache-tomcat
4.2 Tomcat服务器1配置
4.2.1 安装JDK
'//查看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
'//上传JDK到opt目录'
[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)
4.2.2 安装配置Tomcat
[root@localhost opt]# tar xf apache-tomcat-8.5.23.tar.gz
[root@localhost opt]# mv apache-tomcat-8.5.23/ /usr/local/tomcat8
[root@localhost opt]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@localhost opt]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
[root@localhost opt]# tomcatup
'//启动tomcat'
Using CATALINA_BASE: /usr/local/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
[root@localhost opt]# tomcatdown
'//关闭tomcat'
Using CATALINA_BASE: /usr/local/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
[root@localhost opt]# tomcatup
[root@localhost opt]# netstat -anpt | grep 8080
'//检测是否启动,8080端口是否工作正常'
tcp6 0 0 :::8080 :::* LISTEN 74335/java
■Tomcat 配置相关说明
Tomcat 的主目录为/usr/local/tomcat8/
[root@localhost ~]# cd /usr/local/tomcat8/
[root@localhost tomcat8]# ll
(1)主要目录说明
|---bin/ :存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件。
|---conf/:存放 Tomcat 服务器的各种全局配置文件,其中最重要的是 server.xml 和 web.xml。
|---lib/:存放 Tomcat 运行需要的库文件(JARS)。
|---logs:存放 Tomcat 执行时的 LOG 文件。
|---webapps:Tomcat 的主要 Web 发布目录(包括应用程序示例)。
|---work:存放 JSP 编译后产生的 class 文件
(2)配置文件说明 执行“ll conf/”命令,便可看到配置文件清单。
●catalina.policy:权限控制配置文件。
●catalina.properties:Tomcat 属性配置文件。
● context.xml:上下文配置文件。
● logging.properties:日志 log 相关配置文件。
● server.xml:主配置文件。
●tomcat-users.xml : manager-gui 管 理 用 户 配 置 文 件 ( Tomcat 安 装 后 提 供 一 个
manager-gui 的管理界面,通过配置该文件可以开启访问)。
●web.xml:Tomcat 的 servlet、servlet-mapping、filter、MIME 等相关配置。
4.2.3 建立 Java 的 Web 站点
[root@localhost ~]# mkdir -pv /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>
4.2.4 修改 Tomcat 的 server.xml 文件
[root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
'//在 host 段增加 context 段'
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/web/webapp1" path="" reloadable="false" >
</Context>
'//关闭 Tomcat,再重新启动'
[root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat8/bin/startup.sh
'//docBase:web 应用的文档基准目录
reloadable 设置监视"类"是否变化
path="" 设置默认"类"'
4.2.5 真机浏览器输入地址测试
4.3 Tomcat服务器2配置
4.3.1 安装JDK
'//查看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
'//上传JDK到opt目录'
[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)
4.3.2 安装配置Tomcat
[root@localhost opt]# tar xf apache-tomcat-8.5.23.tar.gz
[root@localhost opt]# mv apache-tomcat-8.5.23/ /usr/local/tomcat8
[root@localhost opt]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@localhost opt]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
[root@localhost opt]# tomcatup
'//启动tomcat'
Using CATALINA_BASE: /usr/local/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
[root@localhost opt]# tomcatdown
'//关闭tomcat'
Using CATALINA_BASE: /usr/local/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
[root@localhost opt]# tomcatup
[root@localhost opt]# netstat -anpt | grep 8080
'//检测是否启动,8080端口是否工作正常'
tcp6 0 0 :::8080 :::* LISTEN 74335/java
4.3.3 建立 Java 的 Web 站点
[root@localhost ~]# mkdir -pv /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>
4.3.4 修改 Tomcat 的 server.xml 文件
[root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
'//在 host 段增加 context 段'
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/web/webapp1" path="" reloadable="false" >
</Context>
'//关闭 Tomcat,再重新启动'
[root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat8/bin/startup.sh
'//docBase:web 应用的文档基准目录
reloadable 设置监视"类"是否变化
path="" 设置默认"类"'
4.3.5 真机浏览器输入地址测试
4.4 Nginx 服务器配置
4.4.1 安装 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 ~]# cd /opt
[root@localhost opt]# ll
total 1008
-rw-r--r-- 1 root root 1031760 Sep 25 10:46 nginx-1.15.9.tar.gz
drwxr-xr-x. 2 root root 6 Oct 31 2018 rh
[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
'--user=,--group= 指定运行的用户和组
//--with-file-aio 启用文件修改支持
//--with-http_stub_status_module 启用状态统计
//--with-http_gzip_static_module 启用 gzip 静态压缩
//--with-http_flv_module 启用 flv 模块,提供寻求内存使用基于时间的偏移量文件
//--with-http_ssl_module 启用 SSL 模块 '
[root@localhost nginx-1.15.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.15.9]# ls -l /usr/local/sbin/nginx
lrwxrwxrwx 1 root root 27 Sep 25 11:59 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx
[root@localhost nginx-1.15.9]# 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-1.15.9]# nginx
[root@localhost nginx-1.15.9]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 29260/nginx: master
4.4.2 Nginx 系统服务
[root@localhost nginx-1.15.9]# vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
4.4.3 配置 nginx.conf
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
#gzip on;
upstream tomcat_server {
server 20.0.0.11:8080 weight=1;
server 20.0.0.12: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;
}
…… '//省略部分内容 '
}
…… '//省略部分内容 '
}
4.4.4 配置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>
4.4.5 在 Nginx 上准备静态图片
'//将图片传入/opt目录下'
[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 ~]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
'//如果报错,需要先关闭nginx,再重启'
[root@localhost ~]# killall -3 nginx
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# ps aux | grep nginx
'//查看进程'
root 29495 0.0 0.0 20576 644 ? Ss 12:20 0:00 nginx: master process /usr/local/nginx/sbin/nginx
www 29496 0.0 0.0 23120 1412 ? S 12:20 0:00 nginx: worker process
root 29506 0.0 0.0 112708 976 pts/0 S+ 12:21 0:00 grep --color=auto nginx
[root@localhost ~]# netstat -anpt | grep nginx
'//查看端口号及 PID 进程号'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 29495/nginx: master
4.5 测试
■真机浏览器中输入20.0.0.10,可以看到访问到 nginx 静态页面
■真机浏览器中输入20.0.0.10/index.jsp,不断刷新浏览器测试,
可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现 tomcat1的测试页面,并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 tomcat2 的测试页面,就说明负载均衡群集搭建成功,已经可以 在两个 Tomcat server 站点进行切换了。