Nginx+Tomcat——负载均衡与动静分离群集 理论知识+实验部署+报错排坑 详细讲解一看秒懂!!!

Tomcat与Nginx

具体介绍可以点击后面的链接
Nginx介绍
Tomcat

这里我们只讲解两个人之间的关系

Tomcat目录与配置文件

(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 等相关配置。

Nginx负载均衡实现原理

Nginx是一款非常优秀的HTTP服务器软件
支持高达50 000个并发连接数的响应
拥有强大的静态资源处理能力
运行稳定
内存、CPU等系统资源消耗非常低

目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力

在这里插入图片描述

Nginx配置反向代理的主要参数
upstream服务池名{} 配置后端服务器池,以提供响应数据
proxy_pass http://服务池名 配置将访问请求转发给后端服务器池的服务器处理

在这里插入图片描述
如上图:
客户端发送请求过来:有动态也有静态
静态交给Nginx处理,动态交给Tomcat处理

Nginx静态处理优势
Nginx处理静态页面的效率远高于Tomcat的处理能力
若Tomcat的请求量为1000次,则Nginx的请求量为6000次
Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
Nginx处理静态资源的能力是Tomcat处理的6倍

负载均衡与动静分离部署

拓扑图

在这里插入图片描述
Nginx这个时候相当于调度器的角色,静态自己处理,动态Tomcat处理

网络环境

【调度器1】 【WEB1】 【WEB2】
20.0.0.23 20.0.0.24 20.0.0.25
Nginx Tomcat1 Tomcat2
其他: 防火墙,核心防护关闭
网关: 全部指向20.0.0.1
最小安装在开局前需要安装:
yum -y install net-tools 最小安装必装,可以使用ifconfig,netstat等
yum -y install bash-completion 这个是最小安装自动补全命令

Tomcat1 20.0.0.24

2、查看JDK是否安装
运行 java -version 命令查看 Java 是否安装。如果没有安装需要自行下载安装
[root@localhost ~]# java -version

可以yum 安装 java-1.8.0-openjdk或者上传包到opt下
[root@localhost ~]# cd /opt
[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。
#创建软连接tomcatup   
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup  
#创建软连接tomcatdown   
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
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.

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

#建立 Java 的 Web 站点
在根目录下建立一个 web 目录,并在里面建立一个 webapp1 目录,用于存放网站文件。
[root@localhost ~]# mkdir -pv /web/webapp1
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
	<head>
		<title>JSP test1 page</title>
	</head>
	<body> 
		<% out.println("动态页面 1,http://www.5111111.com");%>
	</body>
	<body>
 		<div>静态页面的图片 1</div><br><img src="2.jpg">
	</body>
</html>

###注意#####
<div>静态页面的图片 1</div><br><img src="2.jpg">
这里的2.jpg是等一下  Nginx(20.0.0.23):/usr/local/nginx/html/img/下的图片名称
因为我们将静态网页交给Nginx处理了,Tomcat只处理动态的
tomcat指路径,Nginx放图片
########

#修改 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.22:8080/
显示“静态页面的图片 1”文字,并没有出现logo.jpg 图片,原因是由于静态图片暂时没配,所以加载不出来



###测试#####在笔记本上测试
http://20.0.0.24:8080/    查看默认测试页是否正常显示 

在这里插入图片描述

Tomcat2 20.0.0.25

2、查看JDK是否安装
运行 java -version 命令查看 Java 是否安装。如果没有安装需要自行下载安装
[root@localhost ~]# java -version

可以yum 安装 java-1.8.0-openjdk或者上传包到opt下
[root@localhost ~]# cd /opt
[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。
#创建软连接tomcatup   
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup  
#创建软连接tomcatdown   
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
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.

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

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

[root@localhost ~]# mkdir -pv /web/webapp1
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
	<head>
		<title>JSP test1 page</title>
	</head>
	<body> 
		<% out.println("动态页面 2,http://www.52222222.com");%>
	</body>
	<body>
 		<div>静态页面的图片 2</div><br><img src="3.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://20.0.0.25:8080/
显示“静态页面的图片 1”文字,并没有出现 logo.jpg 图片,原因是由于静态图片暂时没配,所以加载不出来

在这里插入图片描述

Nginx 服务器配置 20.0.0.23

在 Nginx 服务器 20.0.0.23 上安装 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

cd /opt

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


[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 516 16:50 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx

[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 ~]#  killall -3 nginx                                                     ###停止服务
如果出现: -bash: killall: command not found
[root@localhost ~]#  yum -y install psmisc
[root@localhost ~]# nginx                                ####启动
yum -y install net-tools
[root@localhost ~]# netstat -anpt | grep nginx     
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN

[root@localhost ~]# 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
killall -3 nginx
systemctl start nginx
[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 
把 Nginx 的默认站点通过 proxy_pass 方法代理到了设定好的 tomcat_server 负载均衡
服务器组上。配置完成的 nginx.conf 文件内容如下。
 …… //省略部分内容 

http {
    
     
…… 		###省略部分内容     第一个添加内容为:
#gzip on;
upstream tomcat_server {
    
    
	server 20.0.0.24:8080 weight=1;
	server 20.0.0.25: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;
        }


###检查语法问题
[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


#下面在 Nginx 上准备静态图片
#创建静态文件目录 
[root@nginx ~]# mkdir /usr/local/nginx/html/img 	
[root@nginx ~]# cp /opt/2.jpg /usr/local/nginx/html/img
[root@nginx ~]# cp /opt/3.jpg /usr/local/nginx/html/img

或者用Xshell直接传两张叫23的图片到img下面,图片格式后缀名字为jpg

实验测试

(1)测试静态页面效果 打开浏览器访问 http://20.0.0.23/,可以看到访问到 nginx 静态页面,
(2)测试负载均衡效果 打开浏览器访问 http://20.0.0.23/index.jsp。 不断刷新浏览器测试,

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现 5111111的测试页面,
并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 5222222 的测试页面,
示。,就说明负载均衡群集搭建成功,已经可以 在两个 Tomcat server 站点进行切换了。

排错集

#(1)当你在安装Nginx后
#killall -3 nginx  想使用systemctl进行管理时,不可以直接使用,需要操作流程如下
killall -3 nginx                             
systemctl stop nginx.service
systemctl start nginx.service
#不然会一直报错

#(2)添加Nginx.conf完毕后,检查一下下面的两个},一个是http的,一个是server的
#如果缺少,就算提示你哪里错误,你也想不到是括号的问题

#(3)<div>静态页面的图片 1</div><br><img src="3.jpg">
这里的3.jpg是等一下  Nginx(20.0.0.23):/usr/local/nginx/html/img/下的图片名称
因为我们将静态网页交给Nginx处理了,Tomcat只处理动态的
tomcat指路径,Nginx放图片

猜你喜欢

转载自blog.csdn.net/weixin_48190891/article/details/108800224