【实验】Nginx+Tomcat实现负载均衡、反向代理web集群

实验

1.实验环境介绍

在这里插入图片描述
4层代理:基于IP+端口,nginx主要用作负载均衡器
7层代理:基于协议,nginx用于匹配静态页面的访问,遇到动态页面访问,就转发给tomcat服务器集群

2.实验步骤

1.tomcat集群部署

45服务器进行tomcat多实例部署,46进行单tomcat部署

注意点:

  1. 所有的tomcat服务器需要确保安装jdk,可使用 java -version 进行查看
  2. 单服务器多tomcat实例部署的端口号不能冲突
  3. tomcat多实例部署的tomcat环境变量要进行配置,单实例tomcat则不需要

以下只进行相关操作的命令罗列,图就不截了(所有的步骤在之前的tomcat相关的文章里都有,包括jdk和tomcat的安装包,大家自行获取)

*****45服务器的安装及配置(单服务器多tomcat实例)*****
1.将jdk及tomcat的安装包上传至/opt目录
#如果当初选择安装系统时的是带开发工具的GNOME桌面,则系统会自动安装jdk

2.安装jdk,并进行环境变量的配置
#关于jdk,如果系统自带,可以不装,但是建议安装,毕竟不是每一次的系统环境都是具备jdk的
cd /opt
#切换至opt目录
rpm -ivh jdk-8u201-linux-x64.rpm
#(rpm -ivh 后的jdk包根据实际情况进行安装,其实将包上传之后,直接tab补全jdk的包名就行,问题不大)
vim /etc/profile.d/java.sh   #配置jdk环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#wq保存退出
source /etc/profile.d/java.sh
#加载java.sh文件,刷新系统环境配置
java -version
#查看jdk版本,与自己手动安装的版本号对应即可

3.部署多实例tomcat
#tomcat的包本身就是一个站点服务的包,所以无需在解压完后进行编译安装,直接运行tomcat中的执行文件即可将服务跑起来
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
#与jdk一样,是什么版本的tomcat,tar后面就跟什么版本
mv apache-tomcat-9.0.16 /usr/local/tomcat1
#一般第三方安装的软件都放在/usr/local目录下(也可选择不移动)
cp -a /usr/local/tomcat1 /usr/local/tomcat2
#复制tomcat文件夹,命名为tomcat2
vim /etc/profile.d/tomcat.sh   #配置多实例tomcat的环境变量
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat1
export CATALINA_BASE1=/usr/local/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat1
#tomcat2
export CATALINA_HOME2=/usr/local/tomcat2
export CATALINA_BASE2=/usr/local/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat2
#wq保存退出
source /etc/profile.d/tomcat.sh
#刷新文件,加载环境
vim /usr/local/tomcat2/conf/server.xml   #修改tomcat2的主配置文件
<Server port="8006" shutdown="SHUTDOWN">		#22行,修改Server port,默认为8005 -> 修改为8006
<Connector port="8081" protocol="HTTP/1.1" />	#69行,修改Connector port,默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />	#116行,修改Connector port,默认为8009 -> 修改为8010
#因为tomcat的配置文件端口全部默认为 8005->shutdown端口,8009->AJP端口,8080->访问端口,而一台服务器想要起多个tomcat服务器,他们的端口就不可以重复。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat2/webapps/test" path="" reloadable="true" />
#将原先的<Host>标签注释掉,根据实际情况写入目前的访问路径
vim /usr/local/tomcat1/conf/server.xml   #同样的tomcat1的主配置文件的<Host>标签也需要重写
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat1/webapps/test" path="" reloadable="true" />
#修改完毕,:wq保存退出
vim /usr/local/tomcat1/webapps/index.jsp   #创建tomcat1的测试文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   
</head>
<body>
<% out.println("tomcat1,运行在45节点");%>
</body>
</html>
#随便找一点jsp代码写进去就行,wq保存退出
vim /usr/local/tomcat1/webapps/index.jsp   #同样创建tomcat2的测试文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>   
</head>
<body>
<% out.println("tomcat2,运行在45节点");%>
</body>
</html>
#可以复制tomcat1的代码,将输出的文字变更一下就行,方便做测试,wq保存退出
/usr/local/tomcat1/bin/startup.sh   #启动Tomcat1
/usr/local/tomcat2/bin/startup.sh   #启动Tomcat2
netstat -natp | grep java   #过滤tomcat服务,查看多实例有没有成功启动
最后,浏览器测试访问

*****46服务器单tomcat部署*****
#和45服务器操作一模一样,就不详细罗列,仅讲述过程
1.安装jdk
2.配置jdk环境变量并刷新加载
3.解压tomcat包,并根据个人喜好选择是否将其移动至/usr/local/tomcat目录
4.修改主配置文件server.xml,将<Host>标签的内容修改,参数和多实例一样,注意<Context>标签中的docBase参数根据实际情况进行访问路径配置就行
5.创建tomcat的访问文件,其路径需要和server.xml中的docBase参数相一致
6.开启服务,查看服务信息,测试访问

45服务器多实例图解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

46服务器单实例图解(以下图片就不做解释了):

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:因为46是只跑一个tomcat服务,所以无需指定其tomcat的环境变量,只有在多实例部署时才指定

2.nginx部署

42,43服务器用作nginx7层代理,44服务器用作4层代理

*****42服务器部署nginx做7层代理*****
1.安装依赖包
yum install -y pcre-devel zlib-devel gcc gcc-c++ make

2.上传nginx包,并解压
cd /opt
tar zxvf nginx-1.12.0.tar.gz

3.创建nginx用户
useradd -M -s /sbin/nologin nginx

4.配置安装选项
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-stream

5.编译安装
make -j 2 && make install

6.修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
#在http块中的#gzip on下方添加以下配置,该配置块要与server块同级
    upstream tomcat_server {
    
            #定义负载均衡的服务器池,weight为权重,weight都等于1意味着三个tomcat的权重比一样,系统会采用轮询的策略进行访问,权重越高,被分配到的概率越大
        server 192.168.41.45:8080 weight=1;   #45的tomcat1
        server 192.168.41.45:8081 weight=1;	  #45的tomcat2
        server 192.168.41.46:8080 weight=1;   #46的tomcat
    }
#同时在server块中添加以下配置,该配置要与server块中的location块同级
        location ~ .*\.jsp$ {
    
       #匹配jsp结尾的请求
            proxy_pass http://tomcat_server;   #将请求转发至代理池中的tomcat服务器
            proxy_set_header HOST $host;   #设置后端的Web服务器可以获取远程客户端的真实IP
            proxy_set_header X-Real-IP $remote_addr;   #获取源IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   #在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
    
       #配置Nginx处理静态图片请求
            root /usr/local/nginx/html/img;
        }

7.设置访问目录
mkdir /usr/local/nginx/html/img   #创建图片访问目录
上传一张图片至img目录
vim /usr/local/nginx/html/index.html   #编写index.html文件
<html>
<h1>PC Warning</h1>
<img src="img/win10.jpg" />
</html>

8.检测nginx配置文件
/usr/local/nginx/sbin/nginx -t

9.开启nginx服务并查看服务信息
/usr/local/nginx/sbin/nginx
netstat -natp | grep 80

10.访问测试

***43服务器与42服务器配置方法一模一样,就不做罗列了***


*****44服务器做nginx4层代理,用作负载均衡器*****
1.前五步和42,43的操作一模一样,不再赘述

2.修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
#在http块上方添加以下配置,该配置块与http同级
stream {
    
    
    upstream web_servers {
    
    
        server 192.168.41.42:80 weight=1;
        server 192.168.41.43:80 weight=1;
    }

    server {
    
    
        listen 8080;
        proxy_pass web_servers;
    }
}
3.因为44服务器做负载均衡器使用,所以它只承担转发请求,不需要配置相关的访问文件及目录

4.检查配置文件、开启服务、查看服务
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx
netstat -natp | grep 80

5.物理机访问44服务器,查看动静请求

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

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

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

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

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

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

至此,实验结束

总结

  1. 多实例部署tomcat需要设置tomcat的环境变量,并且需要修改每个tomcat的startup.sh和shutdown.sh文件,添加相应的环境变量
  2. 四层代理的nginx配置stream块是和http块同级,而七层代理则是在http块内部进行配置,upstream块和server块同级
  3. 进行nginx安装配置的时候不要忘了将stream模块一并安装
  4. 千万细心,配置文件最好一次成功,不然排错很麻烦

猜你喜欢

转载自blog.csdn.net/qq_40707090/article/details/124743756