Nginx对SpringBoot实现负载均衡

负载均衡(Load Balance)是集群技术(Cluster)的一种应用。负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力。目前最常见的负载均衡应用是Web负载均衡。根据实现的原理不同,常见的web负载均衡技术包括:DNS轮询IP负载均衡和CDN。其中IP负载均衡可以使用硬件设备或软件方式来实现。

在这里插入图片描述

开始搭建

  1. 创建 SpringBoot 项目
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    等待创建完成, 第一次可能有点慢 !
  2. 创建 HelloController.java
package com.nginx.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 使用SpringBoot 项目 测试 Nginx 的负载均衡
 * Created by YongXin Xue on 2020/05/31 19:16
 */
@RestController
public class HelloController {
    /**
     * 使用 Spring EL 读取配置文件的的参数
     * 获取当前运行项目的端口
     */
    @Value("${server.port}")
    private Integer port;

    @RequestMapping("/hello")
    public String hello(){
        return "当前项目运行的端口是 : " + port;
    }
}

  1. application.properties配置文件中加人
application.properties
  1. 配置项目的多实例启动
    在这里插入图片描述

修改Nginx的配置文件,添加负载均衡的模块

  1. 使用 vim 打开nginx.conf配置文件编辑负载均衡的模块

vim /usr/local/nginx/conf/nginx.conf

  1. 添加内容如下:
 33     #gzip  on;
 34     #负载均衡模块
 35     upstream myservers{
 36        server 192.168.230.1:8082;
 37        server 192.168.230.1:8083;
 38        server 192.168.230.1:8084;
 39     }
 40     
 41     server {
 42         listen       80;
 43         server_name  localhost;
 44         
 45         #charset koi8-r;
 46         
 47         #access_log  logs/host.access.log  main;
 48         
 49         location / {
 50             #root   html;
 51             #index  index.html index.htm;
 52              proxy_pass http://myservers;
 53              proxy_connect_timeout 30;
 54         }

  1. 如图:
    在这里插入图片描述
  2. 修改完后保存退出 !
  3. 然后重新加载 nginx 的配置文件

nginx -s reload

  1. 默认是轮询的方式分配请求
  2. 如图
    在这里插入图片描述
    在这里插入图片描述

负载均衡的策略

  1. 轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
  2. 加权轮询: 给负载均衡模块的服务器指定权限,按照权重轮询
#声明负载均衡的模块    
upstream  myservers{
    # 每6个请求8081处理1个,8082处理2个,8083处理3个
    server 192.168.230.1:8082 weight=1;
    server 192.168.230.1:8083 weight=2;
    server 192.168.230.1:8084 weight=3;
}
  1. 备机策略:如果主机正常运行,备机不会处理请求,当主机宕机,备机上位
#声明负载均衡的模块    
upstream  myservers{
    #backup 指定备机
    server 192.168.230.1:8082 backup;
    server 192.168.230.1:8083 weight=2;
    server 192.168.230.1:8084 weight=3;
}
  1. hash : ip_hash: 根据客户端的ip进行计算,决定由负载均衡模块的哪个服务器处理请求
    192.168.230.102 客户端访问nginx, 102%负载均衡模块服务器数量 : 102%3

优点:

  • 同一个客户端访问时,始终由固定的服务器处理请求,解决多服务器启动导致的session失效问题

缺点

  • 如果固定服务器宕机,会导致session失效
  1. fair: 只有安装第三模块后才可以使用, 客户端请求时,nginx会ping负载均衡模块的所有服务器,先响应的先处理请求

感谢阅读, 如有什么更好的建议或方法 ,可以留言或进群交流. 各种疑难杂症QQ交流群:1101584918,欢迎大家加入。

猜你喜欢

转载自blog.csdn.net/Lance_welcome/article/details/106460177