目录
一、Tomcat简介
Tomcat 概述
- 最初是由Sun的软件构架师詹姆斯·邓肯·戴维森开发
- 安装Tomcat后,安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件
Tomcat 重要目录
目录名 | 作用 |
bin | 存放启动和关闭Tomcat的脚本 |
conf | 存放Tomcat 不同的配置文件 |
doc | 存放Tomcat文档 |
lib | 存放Tomcat 运行需要的jar包(库文件) |
logs | 存放Tomcat运行过程中产生的日志文件 |
src | 存放Tomcat的源代码 |
webapps | Tomcat的主要web发布目录 |
work | 存放jsp编译后产生的class文件 |
二、nginx简介
2.1 nginx概述
Nginx是一款非常优秀的HTTP服务器软件
- 支持高达50 000个并发连接数的响应
- 拥有强大的静态资源处理能力
- 运行稳定
- 内存、CPU等系统资源消耗非常低
- 目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力
2.2 正向代理和反向代理
正向代理
反向代理
应用场景:动态资源
2.3 负载均衡模式
应用场景:高并发
Nginx支持常见的分流算法
1、轮询(Round Robin)
配置示例:
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
2、最少连接数(Least Connections)
配置示例:
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
3、IP 哈希(IP Hash)
配置示例:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
4、加权轮询(Weighted Round Robin)
配置示例:
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=1;
server backend3.example.com weight=2;
}
5、最少时间算法(Least Time)
配置示例:
upstream backend {
least_time header;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
6、一致性哈希(Consistent Hashing)
配置示例(需要第三方模块如 `ngx_http_upstream_hash_module`):
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
三、规划部署负载均衡和反向代理(动静分离)
3.1 Nginx配置动静分离实验主要参数
- upstream服务池名{}:(负载均衡)配置后端服务器池,以提供响应数据
- proxy_pass http:/服务池名,:(反向代理)配置将访问请求转发给后端服务器池的服务器处理
3.2 Nginx动静分离实现原理
3.3 Nginx静态处理优势(为什么要动静分离)
- Nginx处理静态页面的效率远高于Tomcat的处理能力
- 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
- Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
- Nginx处理静态资源的能力是Tomcat处理的6倍
3.4 生产环境实操
实验设计
1、部署三台服务器
- Nginx 服务器:192.17.20.100
- Tomcat 服务器1:192.17.20.101
- Tomcat 服务器2:192.17.20.102:8080 192.17.20.102:8081
2、Tomcat服务器搭建两个内容不同的网站
3、Nginx服务器上安装Nginx,反向代理两个Tomcat站点,并实现负载均衡
注:关闭防火墙和增强功能
实验部署:
1、部署Nginx负载均衡器(192.17.20.100)
systemctl stop firewalld
setenforce 0
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/
cd nginx-1.20.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \ #启用文件修改支持
--with-http_stub_status_module \ #启用状态统计
--with-http_gzip_static_module \ #启用 gzip静态压缩
--with-http_flv_module \ #启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module #启用 SSL模块,提供SSL加密功能
--with-stream
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
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
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
2、部署 2 台 Tomcat 应用服务器
#停止防火墙并禁用 SELinux
systemctl stop firewalld
setenforce 0
#安装 JDK
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
#配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
#加载环境变量
source /etc/profile
#安装并启动tomcat
tar zxvf apache-tomcat-8.5.16.tar.gz
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
#检查端口禁用
netstat -ntap | grep 8080
3、动静分离配置
①tomcat1 服务器配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/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.test1.com");%>
</body>
</html>
修改 server.xml
vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
</Host>
重启Tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
②tomcat2 服务器配置
创建JSP页面:
mkdir /usr/local/tomcat/tomcat1/webapps/test
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>
修改 server.xml
vim /usr/local/tomcat/tomcat1/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>
重启 Tomcat
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
③Nginx服务器配置
准备静态页面和静态页面
echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/game.jpg /usr/local/nginx/html/img
修改Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
http {
...
upstream tomcat_server {
server 172.16.88.22:8080 weight=1;
server 172.16.88.33:8080 weight=1;
server 172.16.88.44:8080 weight=1;
}
server {
listen 80;
server_name www.kgc.com;
charset utf-8;
location ~ .*\.jsp$ {
proxy_pass http://tomcat_server;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 10d;
}
location / {
root html;
index index.html index.htm;
}
}
...
}
④测试
测试静态页面效果:
- 浏览器访问:192.17.20.100
- 浏览器访问:192.17.20.100/index.jsp
测试负载均衡效果:
- 浏览器访问:http://172.16.88.11/index.jsp (不断刷新浏览器)