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

简介: 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

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
11天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
28 0
|
3月前
|
前端开发 Java 应用服务中间件
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
158 0
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
|
2月前
|
供应链 Java
云HIS技术架构:Angular+Nginx+Java+Spring,SpringBoot
标准数据维护 用户信息:维护用户的基本信息,所在科室以及各个系统所具体的权限。 科室信息:维护医院的科室信息。 数据字典:标准字典信息的维护。 药品/诊疗目录维护:维护药品和诊疗目录的基本信息。
31 2
|
1天前
|
负载均衡 应用服务中间件 nginx
Nginx 负载均衡
Nginx 负载均衡
10 2
|
2月前
|
负载均衡 Java 应用服务中间件
|
2月前
|
Java 应用服务中间件 网络安全
Nginx配置静态页面+springboot应用+swagger+SSL的实现
Nginx配置静态页面+springboot应用+swagger+SSL的实现
|
2月前
|
负载均衡 监控 应用服务中间件
Nginx负载均衡:你的网站流量翻倍利器
Nginx负载均衡:你的网站流量翻倍利器
42 0
|
2月前
|
消息中间件 关系型数据库 MySQL
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
60 0
|
3月前
|
缓存 负载均衡 算法
【Nginx】Nginx 负载均衡
【1月更文挑战第25天】【Nginx】Nginx 负载均衡
|
3月前
|
负载均衡 应用服务中间件 nginx
【实践】使用Nginx作为GrayLog日志接入的负载均衡
【实践】使用Nginx作为GrayLog日志接入的负载均衡
44 0