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

实验

1.实验环境介绍

【实验】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" />
#将原先的标签注释掉,根据实际情况写入目前的访问路径
vim /usr/local/tomcat1/conf/server.xml   #同样的tomcat1的主配置文件的标签也需要重写
<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服务器多实例图解:
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第2张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第3张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第4张图片

【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第5张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第6张图片

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

【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第7张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第8张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第9张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第10张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第11张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第12张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第13张图片

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

【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第14张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第15张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第16张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第17张图片
在这里插入图片描述
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第18张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第19张图片
注意:因为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服务器,查看动静请求

【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第20张图片
在这里插入图片描述
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第21张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第22张图片

【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第23张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第24张图片
在这里插入图片描述
在这里插入图片描述
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第25张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第26张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第27张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第28张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第29张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第30张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第31张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第32张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第33张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第34张图片

【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第35张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第36张图片

【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第37张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第38张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第39张图片

【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第40张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第41张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第42张图片

【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第43张图片
【实验】Nginx+Tomcat实现负载均衡、反向代理web集群_第44张图片

至此,实验结束

总结

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

你可能感兴趣的:(Linux,tomcat,nginx,负载均衡)