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

2021-06-09 15:19:43 浏览数 (1)

1.前言

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

注: 正向代理,代理的是用户。 反向代理,代理的是服务器。

2.什么是负载均衡

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

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

3.准备工作

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

3.1 关于Mac系统安装Nginx

本次用的是 homebrew 安装的

大家也可前去官网下载

3.2 测试项目说明

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

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

4.1 轮询

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

代码语言:javascript复制
upstream  codingce-nginx {
       server    localhost:10001;
       server    localhost:10002;
}

4.2 权重

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

代码语言:javascript复制
upstream  codingce-nginx {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

4.3 iphash

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

代码语言:javascript复制
upstream  codingce-nginx {
       ip_hash; 
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

4.4 最少连接

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

代码语言:javascript复制
upstream  codingce-nginx {
       least_conn;
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

4.5 fair(第三方)

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

代码语言:javascript复制
upstream  codingce-nginx {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
       fair;  
}

4.6 url_hash(第三方)

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

代码语言:javascript复制
upstream  codingce-nginx {
       server localhost:10001;
       server localhost:10002;
       hash $request_uri;
       hash_method crc32;   
}

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

访问http://localhost:10000

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

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

此次nginx路径展示

主配置与自定义配置

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

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

代码语言:javascript复制
upstream codingce-nginx {
       server localhost:10001;
       server localhost:10002;
}

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

代码语言:javascript复制
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 

配置文件展示

代码语言:javascript复制
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

0 人点赞