Nginx+Tomcat负载均衡,动静分离群集 原理加实验
Tomcat概述
Tomcat简介:
●最初是由Sun的软件构架师詹姆斯.邓肯.戴维森开发
●安装Tomcat后,安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件
Tomcat重要目录
- Bin:存放启动和关闭Tomcat脚本
- Conf:存放Tomcat不同的配置文件
- Doc:存放Tomcat文档
- Lib:存放Tomcat运行需要的库文件
- Logs:存放Tomcat执行时的LOG文件
- Src:存放Tomcat的源代码
- Webapps:Tomcat的主要Web发布目录
- Work:存放jsp编译后产生的class文件
Nginx应用
●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倍
实验
实验环境
- nginx虚拟机 192.168.148.135 nginx服务
- tomcat虚拟机 192.168.148.136 tomcat服务
- tomcat虚拟机 192.168.148.137 tomcat服务
Nginx+Tomcat动静分离实验
推荐步骤
这边做动静分离只需要其中两台虚拟机,一台ngxin虚拟机和一台tomcat虚拟机
●一.先配置nginx虚拟机
1.将nginx软件包放到xhell连接器中,安装nginx
[aaa@qq.com ~]# hostnamectl set-hostname nginx ##修改主机名方便区分
[aaa@qq.com ~]# setenforce 0 ##关闭防护系统
[aaa@qq.com ~]# iptables -F ##清空防火墙规则
[aaa@qq.com ~]# useradd -M -s /sbin/nologin nginx ##建立管理用户
[aaa@qq.com ~]# tar zxvf nginx-1.12.2.tar.gz ##解压文件
[aaa@qq.com ~]# cd nginx-1.12.2/
[aaa@qq.com ~]# ./configure \
--prefix=/usr/local/nginx \ ##指定路径
--user=nginx \ ##管理用户
--group=nginx ##管理属组
[aaa@qq.com nginx-1.12.2]# make&&make install ##编译安装
[aaa@qq.com nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ ####建立软链接方便管理
[aaa@qq.com nginx-1.12.2]# cd /etc/init.d/ ##建立启动脚本添加使用service工具进行管理
[aaa@qq.com init.d]# vim nginx
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
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
[aaa@qq.com init.d]# chmod +x nginx ##增加执行权限
[aaa@qq.com init.d]# chkconfig --add nginx
[aaa@qq.com init.d]# service nginx start
2.nginx配置完成后开始配置tomcat
[aaa@qq.com ~]# hostnamectl set-hostname tomcat01
[aaa@qq.com ~]# su
[aaa@qq.com ~]# setenforce 0
[aaa@qq.com ~]# iptables -F
[aaa@qq.com ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[aaa@qq.com ~]# vim /etc/profile ##修改环境变量
....在底行加入
export JAVA_HOME=/usr/local/jdk1.8.0_91 ##家目录
export JRE_HOME=${JAVA_HOME}/jre ##JREhome
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib ##class文件
export PATH=${JAVA_HOME}/bin:$PATH ##系统环境变量
[aaa@qq.com ~]# source /etc/profile
[aaa@qq.com ~]# tar zxvf apache-tomcat-8.5.16.tar.gz -C /usr/local/ ##解压tomcat软件包
[aaa@qq.com ~]# cd /usr/local/
[aaa@qq.com local]# mv apache-tomcat-8.5.16/ tomcat ##重命名Tomcat,方便管理
[aaa@qq.com local]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin ##创建脚本连接方便管理
[aaa@qq.com local]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin
[aaa@qq.com local]# startup.sh ##开启服务
3.在nginx的虚拟机上配置动静分离,修改配置文件
[aaa@qq.com init.d]# vim /usr/local/nginx/conf/nginx.conf
#access_log logs/host.access.log main;
location ~.*.jsp$ {
proxy_pass http://192.168.148.136:8080; ##动态页面交给tomcat处理
proxy_set_header Host $host;
}
[aaa@qq.com init.d]# nginx -t ##检查内容是否正确
4.在nginx中创建静态页面
[aaa@qq.com html]# cd /usr/local/nginx/html/
[aaa@qq.com html]# vim index.html ##写入静态页面信息
<!DOCTYPE html>
<html>
<head>
<title>静态页面</title>
<meta http-equiv="content-type" content="textml;charset=utf-8">
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>静态网站</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>这是一个静态网页.</em></p>
</body>
</html>
5.在tomcat中创建动态页面
[aaa@qq.com webapps]# cd /usr/local/tomcat/webapps
[aaa@qq.com webapps]# mkdir test ##创建一个test站点
[aaa@qq.com webapps]# cd test/
[aaa@qq.com test]# vim index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("Welcome dongtai Web");%>
</body>
</html>
[aaa@qq.com test]# shutdown.sh
[aaa@qq.com test]# startup.sh
6.打开win10虚拟机做动静分离访问测试
Nginx处理静态图片,Tomcat处理动态页面
推荐步骤
1.在tomcat的虚拟机上配置
[aaa@qq.com test]# vim index.jsp
<body>
<% out.println("Welcome dongtai Web");%>
<img src="test.jpg"/> ##创建图片信息,这边用的是相对路径,所以图片要放在nginx的test文件夹中
</body>
2.nginx虚拟机上配置,修改配置文件
[aaa@qq.com conf]# vim /usr/local/nginx/conf/nginx.conf
#access_log logs/host.access.log main;
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ { ##支持的图片格式
root html;
expires 30d; ##支持缓存30天
}
3.在nginx中也要创建一个test文件夹和tomcat的站点位置对应起来
[aaa@qq.com conf]# cd ..
[aaa@qq.com nginx]# cd html/ ##切换到nginx的站点
[aaa@qq.com html]# mkdir test ##创建和tomcat相同的文件夹test用于存放图片
[aaa@qq.com test]# ls
12382c7b85ff754752d97dbdd2d23fe9.jpg
[aaa@qq.com test]# mv 12382c7b85ff754752d97dbdd2d23fe9.jpg test.jpg ##修改图片名称
[aaa@qq.com test]# ls
test.jpg
[aaa@qq.com test]# service nginx restart ##重启服务
4.打开win10浏览器输入网址http://192.168.148.135/test/index.jsp测试
实验结果:发现nginx在处理静态图片,tomcat在处理动态页面
Nginx+tomcat负载均衡实验
推荐步骤:
1.先配置第三台虚拟机,相同的步骤安装tomcat,这边配置参考tomcat01
[aaa@qq.com local]# startup.sh ##启动服务
[aaa@qq.com tomcat]# cd /usr/local/tomcat/
[aaa@qq.com tomcat]# mkdir -pv /web/webapp1 ##创建站点
mkdir: 已创建目录 "/web"
mkdir: 已创建目录 "/web/webapp1"
[aaa@qq.com tomcat]# 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("Welcome tomcat02 Web");%> ##写入信息
</body>
</html>
[aaa@qq.com tomcat]# vim /usr/local/tomcat/conf/server.xml ##修改配置文件让其识别
......148行处修改
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/web/webapp1" path="" reloadable="false"> ####添加此段站点信息
</Context>
[aaa@qq.com tomcat]# shutdown.sh ##关闭服务
[aaa@qq.com tomcat]# startup.sh ##开启服务
2.配置tomcat01,其他的都一样,就是页面信息需要区分开来
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("Welcome tomcat01 Web");%> ##页面信息区分开来
</body>
</html>
[aaa@qq.com tomcat]# shutdown.sh ##关闭服务
[aaa@qq.com tomcat]# startup.sh ##开启服务
3.配置nginx负载均衡
[aaa@qq.com test]# vim /usr/local/nginx/conf/nginx.conf ##修改配置文件
.......省略,添加
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream tomcat_server { ##添加节点服务器地址
server 192.168.148.136:8080 weight=1;
server 192.168.148.137:8080 weight=1;
}
......省略
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcat_server;
}
[aaa@qq.com test]# service nginx restart ##修改完后,重启服务
4.打开win10做访问测试