【理论+实验】Nginx+Tomcat负载均衡、动静分离群集-------超详细

一、 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 站点进行切换了。

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值