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

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

  • 一.Nginx负载均衡实现原理
    • 1、 反向代理原理
    • 2、反向代理的概念
    • 3、反向代理的优势
    • 4、Nginx四层反向代理和七层反向代理
  • 二、Nginx动静分离实现原理
    • 1、动静分离的概念
    • 2、动静分离的原理
    • 3、Nginx 静态处理优势
  • 三、Nginx负载均衡调度算法(6种)
    • 1、轮询(默认)
    • 2、加权轮训
    • 3、least_conn最少连接
    • 4、ip_hash
    • 5、fair(第三方)
    • 6、url_hash(第三方)
  • 四、Nginx+Tomcat负载均衡、动静分离的操作步骤
    • 1、准备三台服务器,Nginx作为负载均衡器,Tomcat作为应用服务器
    • 2、部署Nginx 负载均衡器
    • 3、部署2台Tomcat 应用服务器
    • 4、动静分离配置
    • 5、测试效果
  • 五、实例操作:Nginx+Tomcat负载均衡、动静分离
    • 1、准备好Nginx服务器(192.168.2.66)
    • 2、准备好tomcat服务器1(192.168.2.105:8080)
    • 3、准备好Tomcat服务器2(两个实例):192.168.2.200:8080 192.168.2.200:8081——参照此篇文章: Tomcat多实例部署 - 啦啦啦12178 - 博客园 (cnblogs.com)
    • 4、动静分离Tomcat1 server 配置
      • 4.1 配置Tomcat1的动态网页显示内容
      • 4.2 添加新的host内容
      • 4.3 重启服务
    • 5、Tomcat2 server 配置(实例1)
      • 5.1 创建Tomcat实例1的网页测试目录test和测试网页文件
      • 5.2 Tomcat实例1主配置删除前面的 HOST 配置,添加新的HOST配置
      • 5.3 重启服务
    • 6、Tomcat2 server 配置(实例2)
      • 6.1 创建Tomcat实例2的网页测试目录test和测试网页文件
      • 6.2 Tomcat实例2主配置删除前面的 HOST 配置,添加新的HOST配置
      • 6.3 重启服务
    • 7、Nginx server 配置(192.168.2.66)
      • 7.1 准备网页显示相关内容
      • 7.2 修改主配置文件——七层转发配置
      • 7.3 重启服务
  • 六、Nginx四层代理配置
    • 1、nginx做四层代理时编译需要添加 --with-stream模块
      • 1.1 查看当前模块
      • 1.2 在已有的nginx上面添加该模块--with-stream
    • 2、nginx四层代理配置
      • 2.1 修改配置文件进行四层代理配置
      • 2.2 重启服务
    • 3 浏览器访问测试

一.Nginx负载均衡实现原理

1、 反向代理原理

Nginx+Tomcat负载均衡、动静分离_第1张图片

2、反向代理的概念

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。

反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。

3、反向代理的优势

反向代理的优势:

  • 隐藏真实服务器;
  • 负载均衡便于横向扩充后端动态服务;
  • 动静分离,提升系统健壮性;

4、Nginx四层反向代理和七层反向代理

四层反向代理:是基于IP+PORT(TCP/UDP端口)转发

七层反向代理:基于http,https,mail代理转发

二、Nginx动静分离实现原理

1、动静分离的概念

动静分离是指在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提示整个服务的访问性和可维护性。

2、动静分离的原理

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

3、Nginx 静态处理优势

  • Nginx处理静态页面的效率远高于Tomcat的处理能力

  • 若Tomcat的请求量为1000次,则Nginx的请求量为6000次

  • Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M

  • Nginx处理静态资源的能力是Tomcat处理的6倍

三、Nginx负载均衡调度算法(6种)

1、轮询(默认)

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

2、加权轮训

eight的值越大分配到的权限概率越高,主要用于后端每台服务器性能不均匀情况,或者仅仅为在主从情况下设置不同的权重值,达到合理利用主机资源

3、least_conn最少连接

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

4、ip_hash

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

5、fair(第三方)

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

6、url_hash(第三方)

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

四、Nginx+Tomcat负载均衡、动静分离的操作步骤

1、准备三台服务器,Nginx作为负载均衡器,Tomcat作为应用服务器

Nginx 服务器:192.168.2.66:80
Tomcat服务器1:192.168.2.105:80
Tomcat服务器2:192.168.2.200:8080 192.168.2.200:8081

2、部署Nginx 负载均衡器

systemctl stop firewalld
setenforce 0
 
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
 
useradd -M -s /sbin/nologin nginx
 
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
 
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \                                #启用文件修改支持
--with-http_stub_status_module \                              #启用状态统计
--with-http_gzip_static_module \                             #启用 gzip静态压缩
--with-http_flv_module \                            #启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module                              #启用 SSL模块,提供SSL加密功能
----------------------------------------------------------------------------------------------------------
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module
 
 
make && make install
 
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 
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
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

3、部署2台Tomcat 应用服务器

systemctl stop firewalld
setenforce 0
 
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
 
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
 
tar zxvf apache-tomcat-8.5.16.tar.gz
 
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
 
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
 
netstat -ntap | grep 8080

4、动静分离配置

Tomcat1 server 配置

mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test1 page   


<% out.println("动态页面 1,Tomcat1");%>



vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置

    
    

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

Tomcat2 server 配置(多实例)

mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
 
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test2 page  


<% out.println("动态页面 2,Tomcat2中的实例1");%>


 
vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置

    

 
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
 
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test3 page   


<% out.println("动态页面 3,Tomcat2中的实例2");%>


 
vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置

    

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

Nginx server 配置——七层转发配置

#准备静态页面和静态图片
echo '

这是静态页面

' > /usr/local/nginx/html/index.html mkdir /usr/local/nginx/html/img cp /root/game.jpg /usr/local/nginx/html/img vim /usr/local/nginx/conf/nginx.conf ...... http { ...... #gzip on; #配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大 upstream tomcat_server { server 192.168.116.70:8080 weight=1; server 192.168.116.120:8080 weight=1; server 192.168.116.120:8081 weight=1; } server { listen 80; server_name www.kgc.com; charset utf-8; #access_log logs/host.access.log main; #配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理 location ~ .*\.jsp$ { proxy_pass http://tomcat_server; #设置后端的Web服务器可以获取远程客户端的真实IP ##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。 proxy_set_header HOST $host; ##把$remote_addr赋值给X-Real-IP,来获取源IP proxy_set_header X-Real-IP $remote_addr; ##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #配置Nginx处理静态图片请求 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ { root /usr/local/nginx/html/img; expires 10d; } location / { root html; index index.html index.htm; } ...... } ...... }

5、测试效果

测试静态页面效果
浏览器访问 http://192.168.2.66/
浏览器访问 http://192.168.2.66/pic.jpg

测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.2.66/index.jsp

五、实例操作:Nginx+Tomcat负载均衡、动静分离

1、准备好Nginx服务器(192.168.2.66)

Nginx+Tomcat负载均衡、动静分离_第2张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Nginx+Tomcat负载均衡、动静分离_第3张图片
Nginx+Tomcat负载均衡、动静分离_第4张图片
Nginx+Tomcat负载均衡、动静分离_第5张图片

2、准备好tomcat服务器1(192.168.2.105:8080)

Nginx+Tomcat负载均衡、动静分离_第6张图片
Nginx+Tomcat负载均衡、动静分离_第7张图片
在这里插入图片描述
在这里插入图片描述
Nginx+Tomcat负载均衡、动静分离_第8张图片
Nginx+Tomcat负载均衡、动静分离_第9张图片

3、准备好Tomcat服务器2(两个实例):192.168.2.200:8080 192.168.2.200:8081——参照此篇文章: Tomcat多实例部署 - 啦啦啦12178 - 博客园 (cnblogs.com)

Nginx+Tomcat负载均衡、动静分离_第10张图片
Nginx+Tomcat负载均衡、动静分离_第11张图片

4、动静分离Tomcat1 server 配置

4.1 配置Tomcat1的动态网页显示内容

在这里插入图片描述
Nginx+Tomcat负载均衡、动静分离_第12张图片

4.2 添加新的host内容

Nginx+Tomcat负载均衡、动静分离_第13张图片

4.3 重启服务

Nginx+Tomcat负载均衡、动静分离_第14张图片

5、Tomcat2 server 配置(实例1)

5.1 创建Tomcat实例1的网页测试目录test和测试网页文件

在这里插入图片描述
Nginx+Tomcat负载均衡、动静分离_第15张图片

5.2 Tomcat实例1主配置删除前面的 HOST 配置,添加新的HOST配置

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

5.3 重启服务

Nginx+Tomcat负载均衡、动静分离_第17张图片

6、Tomcat2 server 配置(实例2)

6.1 创建Tomcat实例2的网页测试目录test和测试网页文件

在这里插入图片描述
Nginx+Tomcat负载均衡、动静分离_第18张图片

6.2 Tomcat实例2主配置删除前面的 HOST 配置,添加新的HOST配置

在这里插入图片描述
Nginx+Tomcat负载均衡、动静分离_第19张图片

6.3 重启服务

Nginx+Tomcat负载均衡、动静分离_第20张图片

7、Nginx server 配置(192.168.2.66)

7.1 准备网页显示相关内容

Nginx+Tomcat负载均衡、动静分离_第21张图片

7.2 修改主配置文件——七层转发配置

在这里插入图片描述
Nginx+Tomcat负载均衡、动静分离_第22张图片

7.3 重启服务

在这里插入图片描述
Nginx+Tomcat负载均衡、动静分离_第23张图片
在这里插入图片描述

六、Nginx四层代理配置

1、nginx做四层代理时编译需要添加 --with-stream模块

1.1 查看当前模块

Nginx+Tomcat负载均衡、动静分离_第24张图片

1.2 在已有的nginx上面添加该模块–with-stream

Nginx+Tomcat负载均衡、动静分离_第25张图片
在这里插入图片描述
Nginx+Tomcat负载均衡、动静分离_第26张图片

2、nginx四层代理配置

2.1 修改配置文件进行四层代理配置

Nginx+Tomcat负载均衡、动静分离_第27张图片
Nginx+Tomcat负载均衡、动静分离_第28张图片

2.2 重启服务

在这里插入图片描述

3 浏览器访问测试

基于端口访问,但是会有60s左右的缓存时间才会实现跳转到别的tomcat服务器

输入网址:http://192.168.2.66

Nginx+Tomcat负载均衡、动静分离_第29张图片
Nginx+Tomcat负载均衡、动静分离_第30张图片
在这里插入图片描述
在这里插入图片描述

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