Nginx+Tomcat负载均衡、动静分离群集
本章目录
前言
一、Tomcat与Nginx
1.1:Tomcat介绍
1.2:Tomcat重要文件介绍
1.3:Nginx应用
二、Nginx负载均衡原理
三、Nginx动静分离原理
四、Nginx+Tomcat部署实验
4.1:实验环境
4.2:Tomcat安装及配置
4.3:Nginx安装配置
4.4:部署验证
前言
本文主要讲述的项目部署方面的一些基础知识,tomcat+nginx的环境。
nginx是常用的web服务器,用于获取静态资源,类似的服务器还有apache。
tomcat是基于java servlet 的 web 容器,用于获取动态资源。
一般的web服务架构:前端部署nginx,后端部署tomcat。用户访问nginx,静态资源nginx直接返回,动态资源的请求被nginx转发到tomcat,tomcat将处理完的结构返回给nginx,然后到浏览器。
一、Tomcat与Nginx
1.1:Tomcat介绍
- Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
- 最初是由Sun的软件架构师詹姆斯·邓肯·戴维森开发
- 安装Tomcat后,安装路径下面的目录文件,是使用或者配置Tomcat的重要文件
1.2:Tomcat重要文件介绍
目录 | 作用 |
---|---|
bin | 存放启动和关闭Tomcat脚本 |
conf | 存放TTomcat不同的配置文件 |
doc | 存放Tomcat文档 |
lib | 存放Tomcat运行需要的库文件 |
logs | 存放Tomcat执行时的LOG文件 |
src | 存放Tomcat的源代码 |
webapps | Tomcat的主要Web发布目录 |
work | 存放jsp编译后产生的class文件 |
1.3:Nginx应用
- Nginx是一款非常优秀的HTTP服务软件
- 支持高达50000个并发连接数的响应
- 拥有强大的静态资源处理能力
- 运行稳定
- 内存、CPU等系统资源消耗非常低
- 目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点饿负载并发能力
二、Nginx负载均衡原理
- Nginx实现负载均衡是通过反向代理实现
- Nginx配置反向代理的主要参数
- upstream 服务池{ }
- 配置后端服务器池,以提供相应数据
- proxy_pass http://服务池名
- 配置将访问请求转发给后端服务器池的服务器处理
- upstream 服务池{ }
三、Nginx动静分离原理
- Nginx静态处理优势
- Nginx处理静态页面的效率远高于Tomcat的处理能力
- 若Tomcat的请求量为1000次,则Nginx的请求处理量为6000次
- Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
- Nginx处理静态资源的能力是Tomcat处理的6倍
四、Nginx+Tomcat部署实验
4.1:实验环境
服务器 | 配置的服务 |
---|---|
Nginx服务器 | nginx-1.15.9.tar.gz |
Tomcat服务器1 | jdk-8u144-linux-x64.tar.gz、apache-tomcat-8.5.23.tar.gz |
Tomcat服务器2 | jdk-8u144-linux-x64.tar.gz、apache-tomcat-8.5.23.tar.gz |
4.2:Tomcat安装及配置
- 关闭防火墙、关闭核心防护
[root@web2 opt]# systemctl stop firewalld
[root@web2 opt]# setenforce 0
- 在安装 Tomcat 之前必须先安装 JDK
- JDK 的全称是 Java Development Kit,是 Sun 公司免费提供的 Java 语言的软件开发工具包,
其中包含 Java 虚拟机(JVM)。编写好的 Java 源程序经过编译可形成 Java 字节码,只要安装了JDK,
就可以利用 JVM 解释这些字节码文件,从而保证了Java的跨平台性。在平台兼容性方面,JDK 作为解释
字节码文件并据此调用操作系统 API 实现对应功能的Java 虚拟机,与操作系统类型和平台位数密切相关,
因此存在不同类型的版本,而 Tomcat 也具有上述特征,默认情况下 JDK 已经安装,所以需要预先下载
Tomcat,本章中所使用的 Tomcat 软件的源码包为 apache-tomcat-8.5.23.tar.gz
- JDK 的全称是 Java Development Kit,是 Sun 公司免费提供的 Java 语言的软件开发工具包,
- 查看JDK是否安装,没安装需要安装,由于我们是新建的系统,这边就需要重新安装JDK服务,我们这通过直接通过绿色安装包解压得到JAVA软件
[root@web2 opt]# tar xf jdk-8u144-linux-x64.tar.gz
[root@web2 opt]# cp -rv jdk1.8.0_144/ /usr/local/java
[root@web2 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 #####配置JAVA的环境变量
[root@web2 opt]# java -version
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)
- 开启Tomcat服务
[root@web2 opt]# tar xf apache-tomcat-8.5.23.tar.gz ####解压文件安装文件
[root@web2 opt]# mv apache-tomcat-8.5.23/ /usr/local/tomcat8 ####指定安装目录
[root@web2 opt]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup ####创建脚本软链接来快速启动
[root@web2 opt]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdonw
[root@web2 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@web2 opt]# netstat -anpt | grep 8080 ####过滤下端口查看服务是否开启
tcp6 0 0 :::8080 :::* LISTEN 18807/java
[root@web2 opt]#
最后在真机上输入服务器的IP地址进行验证,看看Tomcat服务是否已经正常启动
验证开启
- 建立JAVA的WEB的站点
[root@web2 ~]# mkdir -pv /web/webapp1
[root@web2 ~]# vi /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.text1.com");%>
</body>
<body>
<div>静态页面的图片 1</div><br><img src="logo.jpg">
</body>
</html>
[root@web2 ~]# vi /usr/local/tomcat8/conf/server.xml
在Host name那边修改命令
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/web/webapp1" path="" reloadable="false">
</Context>
[root@web2 ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@web2 ~]# /usr/local/tomcat8/bin/startup.sh
再次查看测试页面
但是我们发现此时,页面的图像并没有加载出来,因为我们还没有放置图片的原因。
4.3:Nginx安装配置
- 安装Nginx环境
[root@Web1 ~]# yum -y install pcre-devel zlib-devel openssl-devel gcc-c++
- 解压并安装Nginx
[root@Web1 opt]# groupadd www ####床架用户组,Nginx服务开启必须要用户组
[root@Web1 opt]# useradd -g www www -s /bin/false
[root@Web1 opt]# tar xzvf nginx-1.15.9.tar.gz
[root@Web1 opt]# cd nginx-1.15.9/
[root@Web1 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 \ ####启用gzip静态压缩
--with-http_flv_module ####启用flv,提供寻求内存使用基于时间的偏移量文件
[root@Web1 nginx-1.15.9]# make && make install
[root@Web1 nginx-1.15.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
> --preprefix=/usr/local/nginx
-bash: ./configure--preprefix=/usr/local/nginx: 没有那个文件或目录
[root@Web1 nginx-1.15.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@Web1 nginx-1.15.9]# ls -l /usr/local/sbin/nginx
lrwxrwxrwx 1 root root 27 9月 27 23:33 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx
[root@Web1 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
- 添加Nginx系统服务
[root@Web1 opt]# vi /lib/systemd/system/nginx.service
[Unit]
Description=nginx ####描述该系统
After=network.target ###描述服务类别
[Service]
Type=forking ####后台运行模式
PIDFile=/usr/local/nginx/logs/nginx.pid ###PID文件文职
ExecStart=/usr/local/nginx/sbin/nginx ####启动服务位置
ExecReload=/usr/bin/kill -s HUP $MAINPID ###根据PID重载配置
ExecStop=/usr/bin/kill -s QUIT $MAINPID ###根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target
"/lib/systemd/system/nginx.service" 13L, 283C
- 开启Nginx服务
[root@Web1 opt]# yum -y install psmisc
[root@Web1 opt]# killall -3 nginx
[root@Web1 opt]# systemctl start nginx.service
[root@Web1 opt]# systemctl status nginx.service
● nginx.service - nginx
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2020-09-28 00:11:57 CST; 1min 56s ago
Process: 26487 ExecStart=/usr/local/nginx/sbin/nginx (code=exited, status=0/SUCCESS)
Main PID: 26488 (nginx)
CGroup: /system.slice/nginx.service
├─26488 nginx: master process /usr/local/nginx/sbin/nginx
└─26489 nginx: worker process
9月 28 00:11:57 Web1 systemd[1]: Starting nginx...
9月 28 00:11:57 Web1 systemd[1]: Started nginx.
[root@Web1 opt]#
然后我们在真机上做测试,在浏览器内输入Nginx服务器IP地址
测试成功!
- 配置Nginx的配置文件,以前进行负载均衡
[root@Web1 ~]# vi /usr/local/nginx/html/index.html ####创建静态页面
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>静态页面!</h1>
<p>这是静态页面</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>Thank you for using nginx.</em></p>
</body>
</html>
[root@Web1 ~]# vi /usr/local/nginx/conf/nginx.conf
http {
省略....
#gzip on;
upstream tomcat_server {
server 192.168.100.43:8080 weight=1;
server 192.168.100.44: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)$ { ###静态图片正则
root /usr/local/nginx/html/img;
expires 30d;
}
[root@Web1 ~]# 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
- 在Nginx服务器上加入静态页面做测试
[root@web1 ~]# mkdir /usr/local/nginx/html/img
[root@web1 ~]# cp /opt/text.jpg /usr/local/nginx/html/img
4.4:部署验证
- 在浏览器上我们输入Nginx服务器的IP地址将会显示静态页面
- 接着在IP地址后面输入/index.jsp就会出现动态页面啦,前方高能反应!!!!
- 再刷新下页面,因为我们设置原因,会很短的时间内跳到tomcat服务器2上面
验证成功!
千万别做噩梦哦亲们!那就晚安了啦!!!