负载均衡Nginx+Tomcat——动静分离

一、概述

  • 通常情况下,一台 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等问题,不能单独应用于生产环境下,所以需要一套更可靠的解决方案来完善 Web 站点 架构。
  • Nginx 是一款非常优秀的 http 服务器软件,它能够支持高达 50000 个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU 等系统资源消耗非常低。
  • 目前很多大型网站都应用 Nginx 服务器作为后端网站程序的反向代理及负载均衡器,来提升整 个站点的负载并发能力。 Nginx 是一个非常强大的静态 web 服务,Tomcat 处理动态请求效率不高,而一般网站大 多数的内容都是静态文件(如图片、html、css、js 等),经过 Nginx 前端的反向代理加速 和过滤,后端 Tomcat 处理请求的压力便可大大减少,只需负责处理动态内容就可以了。在 性能与稳定性的权衡下使用 Nginx+Tomcat 搭配便可让它们在各自擅长的领域大展拳脚。

二、安装步骤

  1. 安装 nginx、tomcat;
  2. nginx、tomcat 配置;
  3. 编写动静分离页面。
  4. 进行测试

三、实验拓扑

在这里插入图片描述

四、搭建步骤

4.1Tomcat192.168.100.22

1、实施准备
●关闭防火墙、关闭核心防护

[root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# 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.16.tar.gz

2、查看JDK是否安装
运行 java -version 命令查看 Java 是否安装。如果没有安装需要自行下载安装

[root@localhost ~]# java -version 	###可通过 yum 安装 java-1.8.0-openjdk

如果是最小化安装,没有装则执行下面命令

tar xf jdk-8u144-linux-x64.tar.gz                ##### 解压安装包
cp -rv jdk1.8.0_144/ /usr/local/java           #####复制文件到/usr/local/java  
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
source /etc/profile                                     #####让刚才编辑的环境变量生效
java -version                                              #####检查java版本

3、安装配置Tomcat
Tomcat的安装和配置步骤如下
●解压 apache-tomcat-8.5.16.tar.gz 包

[root@localhost ~]# tar xf apache-tomcat-8.5.16.tar.gz

●解压后生成 apache-tomcat-8.5.16 文件夹,将该文件夹移动到/usr/local/下,并 改名为 tomcat8。
[root@localhost ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8

●启动 tomcat。

[root@localhost ~]# cd /opt
[root@localhost opt]# tar xzvf apache-tomcat-8.5.23.tar.gz                      #####解压
[root@localhost opt]# cp -r apache-tomcat-8.5.23 /usr/local/tomcat8     #####将源代码复制到/usr/local/tomcat8

ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup                        #####创建软连接tomcatup      
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown               #####创建软连接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
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.


[root@localhost opt]# netstat -anpt | grep 8080                                   #####检测是否启动,8080端口是否工作正常
tcp6       0      0 :::8080                 :::*                    LISTEN      68238/java   

●建立 Java 的 Web 站点
在根目录下建立一个 web 目录,并在里面建立一个 webapp1 目录,用于存放网站文 件。

[root@localhost ~]# mkdir -pv /web/webapp1

●在webapp1 目录下建立一个 index.jsp 的测试页面。

[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>

●修改 Tomcat 的 server.xml 文件。
定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webapp1,
在 host 段增加 context 段

[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> 

###docBase:web 应用的文档基准目录 
###reloadable 设置监视"类"是否变化 
###path="" 设置默认"类"

●关闭 Tomcat,再重新启动。

[root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat8/bin/startup.sh

通过浏览器访问 http://192.168.100.22:8080/,

显示“静态页面的图片 1”文字,并没有出现 logo.jpg 图片,原因是由于静态图片暂时没 配,所以加载不出来

4.2Tomcat2192.168.100.23

1、实施准备
●关闭防火墙、关闭核心防护

[root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# 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.16.tar.gz

2、查看JDK是否安装
运行 java -version 命令查看 Java 是否安装。如果没有安装需要自行下载安装

[root@localhost ~]# java -version 	###可通过 yum 安装 java-1.8.0-openjdk
####如果没有装则执行下面命令#####  
tar xf jdk-8u144-linux-x64.tar.gz                ##### 解压安装包
cp -rv jdk1.8.0_144/ /usr/local/java           #####复制文件到/usr/local/java  
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

source /etc/profile                                     #####让刚才编辑的环境变量生效
java -version                                              #####检查java版本

3、安装配置Tomcat
Tomcat的安装和配置步骤如下
●解压 apache-tomcat-8.5.23.tar.gz

[root@localhost ~]# tar xzvf apache-tomcat-8.5.23.tar.gz 

●解压后生成 apache-tomcat-8.5.23 文件夹,将该文件夹移动到/usr/local/下,并 改名为 tomcat8。

[root@localhost ~]# mv apache-tomcat-8.5.23/ /usr/local/tomcat8

●启动 tomcat。

ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup                        #####创建软连接tomcatup      
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown               #####创建软连接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
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.


[root@localhost opt]# netstat -anpt | grep 8080                                   #####检测是否启动,8080端口是否工作正常
tcp6       0      0 :::8080                 :::*                    LISTEN      68238/java   

●建立 Java 的 Web 站点
在根目录下建立一个 web 目录,并在里面建立一个 webapp1 目录,用于存放网站文 件。

[root@localhost ~]# mkdir -pv /web/webapp1

●在webapp1 目录下建立一个 index.jsp 的测试页面。
[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>

●修改 Tomcat 的 server.xml 文件。
定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webapp1,
在 host 段增加 context 段

[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> 

###docBase:web 应用的文档基准目录 
###reloadable 设置监视"类"是否变化 
###path="" 设置默认"类"

●关闭 Tomcat,再重新启动。

[root@localhost ~]# tomcatdown 
[root@localhost ~]# tomcatup

通过浏览器访问 http://192.168.100.23:8080

4.3Nginx 服务器配置

在 Nginx 服务器 192.168.100.21上安装 Nginx,反向代理到两个 Tomcat 站点,并实现 负载均衡
(1)关闭防火墙。
(2)安装相关软件包。

[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel gcc-c++

(3)解压并安装 Nginx。

 [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


###########################################
//--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.12.0]# make && make install 

[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.12.0]# ls -l /usr/local/sbin/nginx
lrwxrwxrwx 1 root root 27 5 月 16 16:50 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx

■检查配置文件
与 Apache 的主程序 httpd 类似, Nginx 的主程序也提供了“-t”选项用来对配置文件进行
检查, 以便找出不当或错误的配置。 配置文件 nginx.conf 默认位于安装目录下的 conf/子目
录中。 若要检查位于其他位置的配置文件, 可使用“-c”选项来指定路径

[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

■启动、 停止 Nginx

killall -1 nginx                                                     ####安全重启
killall -3 nginx                                                     ###停止服务


如果出现: -bash: killall: command not found

yum -y install psmisc

[root@localhost ~]# nginx                                ####启动
[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
7180/nginx: master
[root@localhost ~]# yum -y install elinks
[root@localhost ~]# elinks http://localhost       #####使用 elinks 浏览器      ####显示“Welcome to nginx!”页面,表明 Nginx 服务已经正常运行

■添加 Nginx 系统服务

[root@localhost ~]# vim /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

[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to
/usr/lib/systemd/system/nginx.service.

这样一来, 就可以 systemctl 命令来启动、 停止、 重启、 重载 Nginx 服务器了, 方法是
在执行时添加相应的 start、 stop、 restart、 reload 参数

重启系统

systemctl start nginx.service
systemctl stop nginx.service
systemctl reload nginx.service
systemctl restart nginx.service
systemctl status nginx.service

(4)配置 nginx.conf。
配置命令如下:

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf 

在 http {} 中加入以下代码,设定负载均衡的服务器列表,weight 参数表示权重, 权重越高,
被分配到的概率越大。为了使测试效果比较明显,我们把权重设置为一样。

 upstream tomcat_921:8080 weight=1;
	server 172.16.16.173:8080 weight=1;
	}


下面是编辑 Nginx 静态页面文件。
```bash
[root@nginx conf]# 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>


在 http {} - server{}中加入 location ~ .*.jsp${…}动态请求条件规则以及静 态图片请求规则。
 ...... 省略

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;
	}

location / {
	root html;
	index index.html index.htm;
	}
......

把 Nginx 的默认站点通过 proxy_pass 方法代理到了设定好的 tomcat_server 负载均衡
服务器组上。配置完成的 nginx.conf 文件内容如下。
 …… //省略部分内容 

http { 
…… 		###省略部分内容
#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@nginx ~]# mkdir /usr/local/nginx/html/img 		###创建静态文件目录 
[root@nginx ~]# cp /opt/logo.jpg /usr/local/nginx/html/img

测试 Nginx 配置文件是否正确。

 [root@localhost ~]# /usr/local/nginx/sbin/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@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

查看 Nginx 服务进程。

[root@localhost ~]# ps aux | grep nginx 
root 13304 0.0 0.0 20492 624 ? Ss 17:59 0:00 nginx: master proc ess /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf
nginx.conf www 13305 0.0 0.1 20940 1348 ? S 17:59 0:00 
nginx: worker proc ess root 13311 0.0 0.0 112664 972 pts/0 S+ 17:59 0:00 
grep --color=auto nginx

查看端口号及 PID 进程号。

[root@localhost ~]# netstat -anpt | grep nginx 
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13304/nginx: master 

4.4测试步骤

(1)测试静态页面效果 打开浏览器访问 http://192.168.100.21/,可以看到访问到 nginx 静态页面,
(2)测试负载均衡效果 打开浏览器访问 http://192.168.100.21/index.jsp。 不断刷新浏览器测试,可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现 test1 的测试页面,并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 test2 的测试页面,就说明负载均衡群集搭建成功,已经可以在两个 Tomcat server 站点进行切换了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值