Nginx+Tomcat负载均衡及动态分离

这篇具有很好参考价值的文章主要介绍了Nginx+Tomcat负载均衡及动态分离。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.Nginx负载均衡实现原理

Nginx实现负载均衡是通过反向代理实现

1、 反向代理原理

Nginx+Tomcat负载均衡及动态分离

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、加权轮训

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

3、least_conn最少连接

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

4、ip_hash

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

补充:session的概念

session共享问题可用后端服务的session共享代替nginx的ip_hash。ip_hash无法作用于四层反向代理,配置需要将其他模式删除例如weight删掉然后直接在加上

注释:

Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。我们控制用户去权限中经常用到Session来存储用户状态

session其实分为客户端Session和服务器端Session。

当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session。

其实客户端Session默认是以cookie的形式来存储的,所以当用户禁用了cookie的话,服务器端就得不到SessionID。这时我们可以使用url的方式来存储客户端Session。也就是将SessionID直接写在了url中,当然这种方法不常用。

Session共享:指在一个浏览器对应多个Web服务时,服务端的Session数据需要共享。例如单点登录、Web服务器集群等场景都需要用到、多子服务。

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"%>
<html>
<head>
<title>JSP test1 page</title>   
</head>
<body>
<% out.println("动态页面 1,Tomcat1");%>
</body>
</html>

vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
    </Context>
</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"%>
<html>
<head>
<title>JSP test2 page</title>  
</head>
<body>
<% out.println("动态页面 2,Tomcat2中的实例1");%>
</body>
</html>
 
vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</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"%>
<html>
<head>
<title>JSP test3 page</title>   
</head>
<body>
<% out.println("动态页面 3,Tomcat2中的实例2");%>
</body>
</html>
 
vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>
 
/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/bin/startup.sh

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

#准备静态页面和静态图片
echo '<html><body><h1>这是静态页面</h1></body></html>' > /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负载均衡及动态分离


  

  

Nginx+Tomcat负载均衡及动态分离


 

Nginx+Tomcat负载均衡及动态分离


  

Nginx+Tomcat负载均衡及动态分离

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

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

3、准备好Tomcat服务器2(两个实例)

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

4、动静分离Tomcat1 server 配置

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

Nginx+Tomcat负载均衡及动态分离


  

4.2 添加新的host内容

Nginx+Tomcat负载均衡及动态分离

4.3 重启服务

Nginx+Tomcat负载均衡及动态分离

5、Tomcat2 server 配置(实例1)

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

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

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

Nginx+Tomcat负载均衡及动态分离


  

5.3 重启服务

Nginx+Tomcat负载均衡及动态分离

  

6、Tomcat2 server 配置(实例2)

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

Nginx+Tomcat负载均衡及动态分离


  

Nginx+Tomcat负载均衡及动态分离

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

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

6.3 重启服务

Nginx+Tomcat负载均衡及动态分离

7、Nginx server 配置(192.168.2.66)

7.1 准备网页显示相关内容

Nginx+Tomcat负载均衡及动态分离

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

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

7.3 重启服务

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离


 

8、使用win10客户端在浏览器中进行测试,动态页面测试进行不断刷新即可

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

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

8.1 测试静态页面效果

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

8.2 测试负载均衡效果,不断刷新浏览器测试

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

六、Nginx四层代理配置

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

1.1 查看当前模块

Nginx+Tomcat负载均衡及动态分离

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

Nginx+Tomcat负载均衡及动态分离


 

Nginx+Tomcat负载均衡及动态分离

2、nginx四层代理配置

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

Nginx+Tomcat负载均衡及动态分离


  

2.2 重启服务

Nginx+Tomcat负载均衡及动态分离

3 浏览器访问测试

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

输入网址:http://192.168.2.66

Nginx+Tomcat负载均衡及动态分离

输入网址:http://192.168.2.66:8080

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离

Nginx+Tomcat负载均衡及动态分离文章来源地址https://www.toymoban.com/news/detail-428583.html

到了这里,关于Nginx+Tomcat负载均衡及动态分离的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Tomcat多实例 + Tomcat负载均衡、动静分离(Nginx联动)

    Tomcat 多实例是指在同一台服务器上 运行多个独立的 Tomcat 实例 。 每个 Tomcat 实例都具有独立的配置文件、日志文件、应用程序和端口。 通过配置不同的端口和文件目录,可以实现同时运行多个独立的 Tomcat 服务器,每个服务器都可以独立处理用户的请求。 这样可以提高服务

    2024年02月09日
    浏览(41)
  • Nginx+Tomcat实现负载均衡、动静分离集群部署

    1、安装好JDK 2、安装tomcat 3、配置tomcat环境变量 4、修改tomcat2中的server.xml文件,要求各tomcat实例配置不能有重复的端口号 5、修改各tomcat实例中的startup.sh和shutdown.sh文件,添加tomcat环境变量 6、启动各tomcat中的/bin/startup.sh 7、浏览器访问测试 1、Nginx应用 Nginx是一款非常优秀的

    2024年02月08日
    浏览(93)
  • 3.Nginx+Tomcat负载均衡和动静分离群集

    Nginx是-款非常优秀的HTTP服务器软件 支持高达50 000个并发连接数的响应 拥有强大的静态资源处理能力 运行稳定 内存、CPU等系统资源消耗非常低 目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力 正向代理:代理的是

    2024年02月08日
    浏览(44)
  • Nginx+Tomcat负载均衡(反向代理)、动静分离集群

    Nginx:正向代理(知道目标服务器) 反向代理(不知道目标服务器) Nginx配置反向代理主要参数 upstream服务池名{}(F5(硬件)和nginx反向代理原理一样) 配置后端服务池,以提供响应数据 proxy_pass http://服务池名 配置将访问请求转发给后端服务器池的服务器处理 定义:将工作任务

    2024年02月13日
    浏览(43)
  • Nginx+Tomcat负载均衡、动静分离实例详细部署

    ●rr 轮询 负载均衡模式: 每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认1),在失效时间内(fail_timeout,默认10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后,那么将所有节点都恢复为有效

    2024年02月13日
    浏览(42)
  • Nginx&&Tomcat架构的动静分离和负载均衡

    目录 一、Tomcat的多实例部署 1.创建 kgc 和 benet 项目目录和文件 2.修改 Tomcat 主配置文件     3.客户端浏览器访问验证 二、Nginx+Tomcat负载均衡架构原理 2.1 Nginx负载均衡的主要配置 2.2 Nginx+Tomcat负载均衡的优点  三、Nginx+Tomcat负载均衡实验 1.部署Nginx 负载均衡器 2.部署2台Tomca

    2024年02月12日
    浏览(37)
  • 多实例部署和Nginx+Tomcat负载均衡、动静分离

    目录 一、Tomcat多实例部署 1.安装好 jdk  2.安装 tomcat  3.配置 tomcat环境变量  4.修改 tomcat2 中的 server.xml文件,要求各 tomcat 实例配置不能有重复的端口号 5.修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量  6.启动各 tomcat 中的 /bin/startup.sh  7.浏览器访问测

    2024年02月12日
    浏览(58)
  • Tomcat多实例部署及nginx+tomcat的负载均衡和动静分离

    静:静态页面   动: 动态页面 分别可以对静态页面和动态页面发起不同的请求,会有不同的响应结果。 ngix反向代理——负均均衡——tomcat为后端服务器——web静态nginx——静态请求nginx——动态页面——tomcat Nginx实现负载均衡的原理 Nginx实现负载均衡是通过反向代理实现Ngi

    2024年02月13日
    浏览(50)
  • 【Linux】Nginx+Tomcat负载均衡、动静分离、多实例部署

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 要求各 tomcat 实例配置不能有重复的端口号 第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。 第二个连接器默认监听8009端口,AJP端

    2024年02月09日
    浏览(66)
  • Nginx+Tomcat(多实例)实现动静分离和负载均衡(四层、七层)

    目录   一、Tomcat 多实例部署 二、反向代理的两种类型 三、Nginx+Tomcat实现负载均衡和动静分离(七层代理) 1.动静分离和负载均衡原理 2.实现方法  3.部署实例 (1)部署Nginx负载均衡服务器 (2)配置Tomcat多实例服务器1 (第一部分已完成) (3)配置Tomcat服务器2 (4)添加动

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包