Nginx实现负载均衡(整合SpringBoot小demo)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Nginx实现负载均衡(整合SpringBoot小demo)

d7199da201a2abf76c9fb0f7790a198b.jpg

1.前言

要理解负载均衡,必须先搞清楚正向代理和反向代理。

注:

正向代理,代理的是用户。

反向代理,代理的是服务器。


2.什么是负载均衡

当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。

负载均衡是用反向代理的原理实现的。


3.准备工作

结合本文场景,需要安装Nginx和Java环境(运行SpringBoot项目)


3.1 关于Mac系统安装Nginx3.1 关于Mac系统安装

本次用的是 homebrew 安装的

大家也可前去官网下载


3.2 测试项目说明3

由于只是测试, SpringBoot只是映射了根路径,端口分别是 10001 和 10002 ,分别返回 demo1 和 demo2 字符串作为区分。


4.Nginx负载均衡的集中方式介绍

4.1 轮询4.1 轮询4.1 轮询

轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。

upstream  codingce-nginx {
       server    localhost:10001;
       server    localhost:10002;
}


44.2 权重.2 权重

指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务的访问比率会是10001服务的二倍。

upstream  codingce-nginx {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}


44.3 iphash.3 iphash

每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。

upstream  codingce-nginx {
       ip_hash; 
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}


44.4 最少连接.4 最少连接

将请求分配到连接数最少的服务上。

upstream  codingce-nginx {
       least_conn;
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}


44.5 fair(第三方).5 fair(第三方)

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

upstream  codingce-nginx {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
       fair;  
}


44.6 url_hash(第三方).6 url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream  codingce-nginx {
       server localhost:10001;
       server localhost:10002;
       hash $request_uri;
       hash_method crc32;   
}


5.测试(以轮询为例子)

访问http://localhost:10000

a4118d3f528eb290c9cb4c94d22d2a96.png

c2188e9f0e20b70304dd9157bb31926b.png

轮询方式,刷新后依次切换后端服

如果要修改负载均衡算法修改对应upstream模块即可。

此次nginx路径展示

主配置与自定义配置

注意:下方自定义配置文件是自定义配置文件目录 vhost/

轮询配置 在nginx.conf文件中配置的

upstream codingce-nginx {
       server localhost:10001;
       server localhost:10002;
}


ecdf2bc33b0537c3f16c7c68709a2f95.png

进入自定义配置文件夹配置自定义配置

williamma@WilliamdeMacBook-Pro nginx % cd vhost 
williamma@WilliamdeMacBook-Pro vhost % ll
total 16
drwxr-xr-x   4 williamma  admin  128  5 13 15:17 ./
drwxr-xr-x  19 williamma  admin  608  5 13 15:28 ../
-rw-r--r--   1 williamma  admin  549  4 16 16:17 gulimall.conf
-rw-r--r--   1 williamma  admin  167  5 13 15:17 mytest.conf
williamma@WilliamdeMacBook-Pro vhost % vim mytest.conf

配置文件展示

server {
    listen       10000;
    server_name  localhost;
    location / {
        #用在此处
        proxy_pass http://codingce-nginx;
        proxy_redirect default;
    }
}


测试SpringBoot项目地址

[Github]:https://github.com/xzMhehe/codingce-java

[Gitee]”https://gitee.com/codingce/codingce-java

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
22天前
|
负载均衡 网络协议 Unix
Nginx负载均衡与故障转移实践
Nginx通过ngx_http_upstream_module模块实现负载均衡与故障转移,适用于多服务器环境。利用`upstream`与`server`指令定义后端服务器组,通过`proxy_pass`将请求代理至这些服务器,实现请求分发。Nginx还提供了多种负载均衡策略,如轮询、权重分配、IP哈希等,并支持自定义故障转移逻辑,确保系统稳定性和高可用性。示例配置展示了如何定义负载均衡设备及状态,并应用到具体server配置中。
|
2月前
|
负载均衡 应用服务中间件 Linux
"揭晓nginx的神秘力量:如何实现反向代理与负载均衡,拯救服务器于水火?"
【8月更文挑战第20天】在Linux环境下,nginx作为高性能HTTP服务器与反向代理工具,在网站优化及服务器负载均衡中扮演重要角色。本文通过电商平台案例,解析nginx如何解决服务器压力大、访问慢的问题。首先介绍反向代理原理,即客户端请求经由代理服务器转发至内部服务器,隐藏真实服务器地址;并给出配置示例。接着讲解负载均衡原理,通过将请求分发到多个服务器来分散负载,同样附有配置实例。实践表明,采用nginx后,不仅服务器压力得到缓解,还提升了访问速度与系统稳定性。
56 3
|
2月前
|
负载均衡 算法 应用服务中间件
在Linux中,nginx反向代理和负载均衡实现原理是什么?
在Linux中,nginx反向代理和负载均衡实现原理是什么?
|
2月前
|
负载均衡 应用服务中间件 nginx
Nginx怎么去做负载均衡?
Nginx的负载均衡器配置就完成了,而且由于Nginx的配置文件结构清晰而且简洁,调整和维护也相对方便。通过上述步骤,你可以将Nginx设置为一款强大的负载均衡器,提升服务器集群的处理能力及高可用性。
45 4
|
2月前
|
域名解析 负载均衡 网络协议
双重神器合璧,流量洪流中的稳如磐石:揭秘Bind+Nginx负载均衡的超级力量!
【8月更文挑战第9天】在现代网站架构中,负载均衡至关重要,它通过分散客户端请求至多台服务器,确保了系统的高可用性和稳定性。本文介绍如何结合Bind与Nginx实现高效负载均衡。Bind作为DNS服务器,可为单一域名解析出多个IP地址;Nginx作为高性能HTTP服务器,则在这些IP对应的服务器间智能分配流量。通过配置Bind的A记录与Nginx的`upstream`和`proxy_pass`指令,我们能够构建一个既稳定又易扩展的负载均衡系统,显著提升用户体验与系统可靠性。
49 11
|
2月前
|
负载均衡 监控 算法
Nginx:负载均衡小专题(二)
Nginx:负载均衡小专题(二)
40 2
|
2月前
|
负载均衡 监控 网络协议
Nginx:负载均衡小专题(三)
Nginx:负载均衡小专题(三)
85 1
|
2月前
|
负载均衡 监控 算法
Nginx:负载均衡小专题(一)
Nginx:负载均衡小专题(一)
68 1
|
2月前
|
缓存 前端开发 Java
"揭秘!SpringBoot携手Nginx,性能飙升秘籍大公开:轻松掌握配置优化,让你的应用快如闪电!"
【8月更文挑战第11天】随着微服务架构的发展,SpringBoot成为构建RESTful API的首选,Nginx则作为高性能的反向代理服务器提升应用性能。本文将探讨两者如何协同工作,包括Nginx的负载均衡策略、静态资源缓存及数据压缩配置;同时讨论SpringBoot的线程池优化、缓存策略及性能监控。通过这些方法,帮助开发者显著提高系统的整体性能和可用性。
76 1
|
2月前
|
缓存 负载均衡 Java
SpringBoot 与 Nginx 配置优化:性能拉满的关键学习方法
【8月更文挑战第1天】在现代Web开发领域,SpringBoot以其快速启动、简化配置的特性成为众多开发者的首选框架,而Nginx则以其高性能的HTTP和反向代理服务器功能著称。将两者结合,并通过精细的配置优化,可以显著提升Web应用的性能与稳定性。以下是为您学生定制的SpringBoot与Nginx配置优化的学习方法与研究路径。
60 1
下一篇
无影云桌面