编程技术分享平台

网站首页 > 技术教程 正文

Nginx负载均衡配置详解(图文全面总结)

xnh888 2024-10-02 03:23:29 技术教程 15 ℃ 0 评论

Nginx是一款高性能HTTP、和反向代理服务器,是大型架构必备使用的,下面详解4大Nginx负载均衡配置@mikechen

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

Nginx负载均衡

Nginx 是一个高性能的 HTTP 、和反向代理服务器,它也可以作为负载均衡器。

如下所示:

可以将流量分配到多个后端服务器,这种方式,可以提高系统的可用性、和扩展性、以及性能。

但是,如果你要负载到别的服务器,就会涉及到负载均衡配置算法、和配置。

比如:常见的有:轮询(round-robin)、最少连接(least connections)、IP 哈希(IP hash)、随机.......等,下面我分别详解@mikechen

Nginx负载均衡配置

1.轮询

Nginx默认的负载均衡策略是:轮询,每个请求依次分配给不同的后端服务器,这种轮询策略,适用于后端服务器性能相似。

如下图所示:

轮询是一种简单的负载均衡算法,将请求按照固定顺序,依次分发到每个服务器。

每个服务器依次接收请求,直到所有服务器都接收到一个请求,然后循环重新开始。

轮询策略无需额外配置参数,只需定义上游服务器组即可,如下所示:

http {
    upstream mikechen{
        server backend1.mikechen.cc;
        server backend2.mikechen.cc;
        server backend3.mikechen.cc;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://mikechen;
        }
    }
}

upstream mikechen{...}:定义一个上游服务器组,命名为 mikechen。

  • server backend1.mikechen.cc;:指定第一个后端服务器;
  • server backend2.mikechen.cc;:指定第二个后端服务器;
  • server backend3.mikechen.cc;:指定第三个后端服务器;

server {...}:定义一个虚拟主机,参数如下:

  • listen 80;:监听端口 80;
  • location / {...}:处理根路径 / 的请求,proxy_pass http://backend,将请求转发到上游服务器组 mikechen。

2.加权

Nginx 的加权负载均衡(weighted load balancing),允许为不同的后端服务器设置不同的权重,以便将更多的请求分配给性能更高、或资源更多的服务器。

权重越高,服务器被分配到的请求就越多,如下所示:

upstream backend {
    server backend1.mikechen.cc weight=5;
    server backend2.mikechen.cc weight=3;
    server backend3.mikechen.cc weight=1;
}

参数说明:

  • weight=3:设置 backend1 的权重为 5;
  • weight=1:设置 backend2 的权重为 3;
  • weight=2:设置 backend3 的权重为 1;

在上面的示例中,请求将按照如下比例分配:

  • backend1.mikechen.cc:将处理 5/(5+3+1) ≈ 55.56% 的请求;
  • backend2.mikechen.cc:将处理 3/(5+3+1) ≈ 33.33% 的请求;
  • backend3.mikechen.cc:将处理 1/(5+3+1) ≈ 11.11% 的请求;

3.IP 哈希(IP Hash)

IP Hash 是一种负载均衡策略,通过对客户端 IP 地址,进行哈希计算来决定请求应该转发到哪个后端服务器。

如下图所示:

这样,来自同一 IP 地址的请求会被发送到相同的后端服务器,除非后端服务器发生变化。

在 Nginx 中,IP Hash 通过在 upstream 块中,使用 ip_hash 指令来配置。

如下所示:

http {
    upstream backend {
        ip_hash;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}
  • ip_hash;:启用 IP 哈希负载均衡;
  • 相同的客户端 IP 地址将,总是被分配到相同的服务器,直到服务器列表发生变化。

适用于需要保持用户会话状态的应用,如购物车、用户登录.......等。

4.最少连接

最少连接策略,根据每个后端服务器当前处理的连接数来分配新请求,请求会被分配到连接数最少的服务器上。

如下所示:

配置如下:

http {
    upstream backend {
        least_conn;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

least_conn;:启用最少连接负载均衡;

请求将被分配到当前连接数最少的后端服务器,这种策略可以减少服务器之间的负载不均,特别是在请求处理时间差异较大的情况下。

这种配置,适用于请求处理时间不一致的应用,比如:有些请求处理时间较长的场景。

以及,最少连接策略能够,有效地将请求分配到负载较低的服务器,从而提升整体性能、和响应速度。

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表