文章目录

  • Nginx实现负载均衡配置
  • 为什么要用负载均衡?
  • 负载均衡说明:
  • 常见负载均衡算法:
  • 代码:
  • Nginx轮询配置:
  • Nginx权重配置:
  • Nginx源地址哈希法配置:


Nginx实现负载均衡配置

java负载均衡的实现过程 springboot负载均衡_负载均衡

为什么要用负载均衡?

在之前一般都使用单台机器对台提供集中式服务,随着业务的量越来越大,无论是性能上还是稳定性上都有了更大的挑战。这时候我们就要用负载均衡,我们要把多台服务器组成一个集群并提供对外的服务,然而对外提供的访问入口都是一个的,例如:baidu.com;当用户在浏览器输入baidu.com的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。

负载均衡说明:

负载均衡:把一个项目部署多台服务器,减少服务器压力,从而保持服务器集群的整体性能最优,这就是负载均衡。
今天我们就利用Nginx服务器来实现一个简单的负载均衡,由于我只有一台服务器就在一台服务器上面进行负载均衡演示。

常见负载均衡算法:

1、轮询法: 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响
2、权重法: 可以根据机器配置定义权重.权重越高被分配到的几率越大
3、源地址哈希法: 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题

代码:

DemoApplication:

@SpringBootApplication
@RestController
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
    
    @Autowired
    private ProtConfiguration prot;

    @RequestMapping("/")
    public void index(HttpServletResponse resp) throws Exception {
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("<!DOCTYPE HTML><html> <h1>" + prot.getPort() + "<h1> </html>");
    }
}

端口号:

server.port=8001
# server.port=8001

获取当前项目端口号:

import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 * 获取当前项目端口号
 */
@Component
public class ProtConfiguration implements ApplicationListener<WebServerInitializedEvent> {

    private int serverPort;

    @Override
    public void onApplicationEvent(WebServerInitializedEvent event) {
        this.serverPort = event.getWebServer().getPort();
    }

    public int getPort() {
        return this.serverPort;
    }
}

分别给8001和8002进行打包并上传服务器!

java负载均衡的实现过程 springboot负载均衡_java负载均衡的实现过程_02

分别运行8001和8002:

在jar的目录下输入 nohup java -jar 8001.jar log.out

推荐使用阿里云一键部署! 传送

Server配置:

server
{
		# 监听端口号
		listen 80;
		# 域名
        server_name demo.xffjs.com;
        location / {
        		proxy_pass http://demo;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Port $server_port;
        }
}

Nginx轮询配置:

upstream demo{
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
}

java负载均衡的实现过程 springboot负载均衡_java负载均衡的实现过程_03

每次刷新会更换!

Nginx权重配置:

upstream demo{
    server 127.0.0.1:8001 weight=1;
    server 127.0.0.1:8002 weight=3;
}

java负载均衡的实现过程 springboot负载均衡_服务器_04

一共刷新了6次其中大部分都是访问的8002

Nginx源地址哈希法配置:

upstream demo{
	ip_hash
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
}

java负载均衡的实现过程 springboot负载均衡_Nginx_05

每次刷新都是一样的,除非更换ip地址

其他参数:

1、down : 表示单前的server临时不參与负载.
2、weight: 默觉得weight越大,负载的权重就越大(值越大用户访问域名时这个服务器压力就越大)
3、backup: 其他全部的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻

更多配置请看(包含https进行负载均衡)