Tomcat多实例、负载均衡、动静分离

Nginx+Tomcat多实例与负载均衡、动静分离群集

文章目录

  • Nginx+Tomcat多实例与负载均衡、动静分离群集
      • 一、Tomcat多实例部署安装
          • 1.关闭防火墙,将安装Tomcat所需软件包传到/opt目录下
        • 2.安装JDK
        • 3.设置JDK环境变量
        • 4.安装tomcat
        • 5.配置tomcat环境变量
        • 6.修改tomcat2 主配置文件
        • 7.修改各tomcat实例中的startup.sh和shutdown.sh文件,添加tomcat环境变量
        • 8.启动服务,浏览器验证
      • 二、Nginx+Tomcat负载均衡与动静分离
        • 1.负载均衡的原理
          • 1.1 rr负载均衡模式
          • 1.2 least_conn最少连接:
          • 1.3 ip_hash负载均衡模式:
          • 1.4 fair(第三方)负载均衡模式:
          • 1.5 url_hash (第三方)负载均衡模式:
        • 2.Nginx负载均衡实现原理
        • 3.Nginx动静分离实现原理
        • 4.Nginx服务部署
          • 4.1安装nginx服务
          • 4.2编译安装
          • 4.3添加系统服务
          • 4.4 修改nginx服务主配置文件
          • 4.5 准备测试文件
        • 5.Tomcat部署
          • 5.1.第一台Tomcat服务部署
          • 5.2修改tomcat的配置文件
        • 6. 第二台Tomcat服务器 部署
          • 6.1上传包并安装环境
          • 6.2设置JDK环境变量
          • 6.3更改主配置文件
          • 6.4编写动态页面测试文件内容
        • 7.测试服务
        • 7.1动静分离测试
          • 7.2负载均衡测试
      • 总结

引言:tomcat服务既可以处理动态页面,也可以处理静态页面;但其处理静态页面的速度远远不如nginx和apache服务,但ngingx和apache服务无法直接处理动态页面,下文就讲述了nginx和tomcat组合使用,实现动静分离和负载均衡;目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力

一、Tomcat多实例部署安装

在部署Tomcat之前必须安装好JDK,因为JDK是Tomcat运行的必要环境

1.关闭防火墙,将安装Tomcat所需软件包传到/opt目录下
关闭防火墙
systemctl stop firewalld		
systemctl disable firewalld
setenforce 0

Tomcat安装包放到opt目录下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz

Tomcat多实例、负载均衡、动静分离_第1张图片

2.安装JDK


rpm -ivh jdk-8u201-linux-x64.rpm 		安装JDK运行环境

Tomcat多实例、负载均衡、动静分离_第2张图片

3.设置JDK环境变量

vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile.d/java.sh
java -version

Tomcat多实例、负载均衡、动静分离_第3张图片
Tomcat多实例、负载均衡、动静分离_第4张图片

4.安装tomcat

cd /opt		
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat		移动解压包,配置两台tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

Tomcat多实例、负载均衡、动静分离_第5张图片

5.配置tomcat环境变量

vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2

source /etc/profile.d/tomcat.sh

Tomcat多实例、负载均衡、动静分离_第6张图片
在这里插入图片描述

6.修改tomcat2 主配置文件

vim /usr/local/tomcat/tomcat2/conf/server.xml

		#22行,修改Server prot,默认为8005 -> 修改为8006
 修改为8081
	#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

在这里插入图片描述
Tomcat多实例、负载均衡、动静分离_第7张图片
在这里插入图片描述

7.修改各tomcat实例中的startup.sh和shutdown.sh文件,添加tomcat环境变量

vim /etc/profile.d/tomcat.sh
#tomcat1 
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME1=/usr/local/tomcat/tomcat2
export CATALINA_BASE1=/usr/local/tomcat/tomcat2
export TOMCAT_HOME1=/usr/local/tomcat/tomcat2

#刷新变量
source /etc/profile.d/tomcat.sh

Tomcat多实例、负载均衡、动静分离_第8张图片
Tomcat多实例、负载均衡、动静分离_第9张图片

Tomcat多实例、负载均衡、动静分离_第10张图片
Tomcat多实例、负载均衡、动静分离_第11张图片

8.启动服务,浏览器验证

启动tomcat1
cd /usr/local/tomcat/

cd /usr/local/tomcat/

netstat -anpt | grep java		查看端口是否全部正常打开
http://192.168.59.118:8080/

Tomcat多实例、负载均衡、动静分离_第12张图片
Tomcat多实例、负载均衡、动静分离_第13张图片

二、Nginx+Tomcat负载均衡与动静分离

项目需求:在192.168.50.128上部署两个tomcat服务,端口分别为8080与8081;在192.168.50.168上部署一个tomcat服务,端口为8080;在192.168.50.138上部署一台Nginx服务

在这些基础上,当进行web访问时,Nginx处理静态页面的请求,Tomcat负责处理动态页面的请求,实现动静分离并且实现负载均衡。

1.负载均衡的原理

1.1 rr负载均衡模式

每个请求按时间顺序逐一分配到不同的后端服务器,如果超过最大失败次数后(max_fails,默认为1),在失效时间内(fail_timeout,默认为10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或全部节点down后,那么所有节点都恢复为有效继续探测,一般来说可以根据权重进行均匀分配

1.2 least_conn最少连接:

优先将客户端请求调度到当前连接最少的服务器

1.3 ip_hash负载均衡模式:

每个请求访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,但是ip_hash会造成负载不均,有的服务接受多,有的服务请求接受少,所以不建议采用ip_hash模式,session共享问题可用后端服务的sessin共享代替nginx的ip_hash

1.4 fair(第三方)负载均衡模式:

按后端服务器的响应时间来分配请求,响应时间端的优先分配

1.5 url_hash (第三方)负载均衡模式:

基于用户请求的url做hash,和ip_hash算法类似,是对每个请求按url的hash结果分配,使每个URL定向到同一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时相对较好

2.Nginx负载均衡实现原理

Tomcat多实例、负载均衡、动静分离_第14张图片

Nginx配置反向代理的主要参数

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

3.Nginx动静分离实现原理

动静分离原理
服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端


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

Tomcat多实例、负载均衡、动静分离_第15张图片

4.Nginx服务部署

4.1安装nginx服务
systemctl stop firewalld
setenforce 0
yum install -y gcc gcc-c++ make pcre-devel zlib-devel

在这里插入图片描述

4.2编译安装
cd nginx-1.20.2/		
./configure \		#编译配置
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make && make install #编译配置

Tomcat多实例、负载均衡、动静分离_第16张图片
在这里插入图片描述

4.3添加系统服务
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		#启动
ExecrReload=/bin/kill -s HUP $MAINPID		#重载
ExecrStop=/bin/kill -s QUIT $MAINPID		#停止
PrivateTmp=true
[Install]
WantedBy=multi-user.target					#启用多用户字符界面

chmod 754 /lib/systemd/system/nginx.service         #赋权
systemctl start nginx.service
systemctl enable nginx.service

Tomcat多实例、负载均衡、动静分离_第17张图片

4.4 修改nginx服务主配置文件
添加跳转的地址池
在http模块中添加这一段
 
 upstream tomcat_server {		配置负载均衡地址池
 35         server 192.168.50.128:8080 weight=1;		weight为权重的意思
 36         server 192.168.50.128:8081 weight=1;
 37         server 192.168.50.168:8080 weight=1;
 38 }
 39 
 40     server {
 41         listen       80;
 42         server_name  localhost;
 43 
 44         charset utf-8;

Tomcat多实例、负载均衡、动静分离_第18张图片

设置动态跳转和本地静态图片请求

location ~ .*\.(gif|jpg|jpeg|png|bmp)$ {
 48         root html/img/;		跳转到图片img目录
 49         expires 5d;			缓存记录保持5天
 50 }
 51         location ~ .*\.jsp$ {
 52          proxy_pass http://tomcat_server;		跳转到地址池的地址
 53          proxy_set_header HOST $host;
 54          proxy_set_header X-Real-IP $remote_addr;  把$remote_addr赋值给X-Real-IP,获取IP
 55       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 让nginx记录访问的IP
 56 
 57 }

Tomcat多实例、负载均衡、动静分离_第19张图片

4.5 准备测试文件

创建一个img目录,放入图片.

Tomcat多实例、负载均衡、动静分离_第20张图片

5.Tomcat部署

5.1.第一台Tomcat服务部署

在192.168.50.128服务器上部署两个tomcat服务,在上面的多实例部署中已进行过部署,以那台机器作为基础,进行配置

mkdir /usr/local/tomcat1/webapps/boss		创建第一个测试目录
vim /usr/local/tomcat1/webapps/boss/index.jsp		编写这个动态页面文件内容

?ge language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test1 page   


<% out.println("此为动态测试页面1 www.boss.com");%>



Tomcat多实例、负载均衡、动静分离_第21张图片

在这台机器的另一个tomcat2的动态页面内容编写
mkdir /usr/local/tomcat2/webapps/zxc
 vim /usr/local/tomcat2/webapps/zxc/index.jsp	
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test1 page


<% out.println("此为动态测试页面2 www.zxc.com");%>



Tomcat多实例、负载均衡、动静分离_第22张图片

5.2修改tomcat的配置文件
本台tomcat1服务的主配置文件修改
vim /usr/local/tomcat1/conf/server.xml


                
      

Tomcat多实例、负载均衡、动静分离_第23张图片

本台tomcat1服务的主配置文件修改

                
      

Tomcat多实例、负载均衡、动静分离_第24张图片

/usr/local/tomcat1/bin/shutdown.sh
/usr/local/tomcat1/bin/startup.sh 

/usr/local/tomcat2/bin/shutdown.sh
/usr/local/tomcat2/bin/startup.sh 

6. 第二台Tomcat服务器 部署

在服务器192.168.50.168上安装一个tomcat服务

6.1上传包并安装环境
systemctl stop firewalld		关闭防火墙
setenforce 0

rpm -ivh jdk-8u201-linux-x64.rpm

Tomcat多实例、负载均衡、动静分离_第25张图片

6.2设置JDK环境变量
vim /etc/profile.d/java.sh 			 #新建文件
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile.d/java.sh 			 #刷新变量
java -version

Tomcat多实例、负载均衡、动静分离_第26张图片
Tomcat多实例、负载均衡、动静分离_第27张图片

6.3更改主配置文件
Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
                
      

Tomcat多实例、负载均衡、动静分离_第28张图片

6.4编写动态页面测试文件内容
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test2 page   


<% out.println("此为动态测试页面3 www.qwer.com");%>



Tomcat多实例、负载均衡、动静分离_第29张图片

重新启动服务
/usr/local/tomcat/shutdown.sh
/usr/local/tomcat/startup.sh

7.测试服务

7.1动静分离测试

在浏览器输入静态地址,先访问默认地址,显示正常.
Tomcat多实例、负载均衡、动静分离_第30张图片

输入图片地址,图片自动跳转到/img目录下

输入192.168.50.158/index.jsp
显示动态页面

Tomcat多实例、负载均衡、动静分离_第31张图片

7.2负载均衡测试
输入192.168.50.158/index.jsp
每次刷新页面,都是通过不同的tomcat服务显示,说明负载均衡配置成功;权重相同随机显示

Tomcat多实例、负载均衡、动静分离_第32张图片
Tomcat多实例、负载均衡、动静分离_第33张图片

Tomcat多实例、负载均衡、动静分离_第34张图片

总结

通过上述两个示例,可以初步了解到Nginx和Tomcat组合使用实现负载均衡和动静分离的状态,在生产环境当中,也是经常需要使用的,可以充分发挥nginx和tomcat的优势,动静分离的使用大大减少了nginx和tomcat的工作时长,且负载均衡的使用更是减少了服务器的一个运行压力,应对高并发是很好的一个方法

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