Nginx负载均衡upstream参数详解

  1. 负载均衡
    nginx负载均衡是根据它的均衡策略,将请求分配给后端的不同服务器处理,比如配置了A、B、C三台服务器,如果A服务器挂了,那请求自动会落到B和C这两台服务器进行处理。
    如果其中的服务器正在处理请求,那么新的一次请求则会选择比较空闲的服务器进行处理,所以它能使你的服务响应更快,可用性高,避免资源的过载和浪费。
  2. 均衡策略
    (1)轮询(默认)
    每个请求按时间顺序分配到不同的后端服务器,如果后端服务器down掉了,能自动剔除,下次请求不会落入。
    upstream xxxx{
    server 192.168.1.1:8080;
    server 192.168.1.2:8080;
    server 192.168.1.3:8080;
    }

    (2)weight(权重)
    指定服务器的倾斜比例,轮询的几率,权重和访问率成正比,可用于后端服务器性能不均的情况,权重越大,落入的几率越高,需根据实际情况合理配置

    upstream xxxx{
    server 192.168.1.1:8080 weight=2;
    server 192.168.1.2:8080 weight=1;
    server 192.168.1.3:8080;
    }

    (3)ip_hash(通过客户端请求的ip进行hash,再通过hash值来选择响应的后端服务器)
    每个请求按IP的hash结果分配,同一个用户多次访问时,可以固定一个服务器,这样避免建立多次的Http链接问题,也可以解决session的问题

    upstream xxxx{
    ip_hash;
    server 192.168.1.1:8080;
    server 192.168.1.2:8080;
    server 192.168.1.3:8080;
    }

    使用ip_hash的注意点:不能把后台服务器直接移除,只能标记down
    (4)url_hash(通过客户端请求的url进行hash,再通过hash值来选择响应的后端服务器)
    每个请求按url的hash结果分配,使每个url定向到一个后端服务器

    upstream xxxx{
    server 192.168.1.1:8080;
    server 192.168.1.2:8080;
    server 192.168.1.3:8080;
    hash $request_url;
    }
  3. upstream 指令参数
    (1)max_conns
    限制每台serve的连接数,用户保护服务器过载,可以起到限流的作用
    upstream xxxx{
    server 192.168.1.1:8080 max_conns=2;
    server 192.168.1.2:8080 max_conns=2;
    server 192.168.1.3:8080 max_conns=2;
    }

    (2)slow_start
    商业版,需付费

    upstream xxxx{
    server 192.168.1.1:8080 weight=6 slow_start=60s;
    server 192.168.1.2:8080 weight=2;
    server 192.168.1.3:8080 weight=2;
    }

    (3)down
    用于标记某台服务器节点不可使用

    upstream xxxx{
    server 192.168.1.1:8080 weight=6;
    server 192.168.1.2:8080 down;
    server 192.168.1.3:8080 weight=2;
    }

    (4)backup(备胎)
    表示被标记的服务器节点是备用机,只有在其他服务器都凉凉的情况下,才会加入到集群,才会被用户访问到

    upstream xxxx{
    server 192.168.1.1:8080 weight=6;
    server 192.168.1.2:8080 backup;
    server 192.168.1.3:8080 weight=2;
    }

    (5)max_fails
    表示失败几次,则会判定为server已宕机,自动剔出集群服务。
    (6)fail_timeout
    表示失败的重试时间

    upstream xxxx{
    server 192.168.1.1:8080 weight=6;
    server 192.168.1.2:8080 max_fails=2 fail_timeout=20s;
    server 192.168.1.3:8080 weight=2;
    }

    与max_fails组合使用max_fails=2 fail_timeout=20s:
    代表在20秒内请求某一台服务器失败次数达到2此以后,则表示这台服务器已经挂了,随后的20秒内,都不会有新的请求到达这台挂了的服务器节点上,而是会请到正常的服务器节点上,20秒过后再有新的请求到挂掉的服务器是,如果还是失败,则会重复这个步骤,一直到恢复为止。

常用配置:

upstream pan{
    ip_hash;
    server 192.168.10.1:80 weight=1 max_fails=2 fail_timeout=20s;
    server 192.168.10.2:80 weight=2 max_fails=2 fail_timeout=20s;
    #内部加入weight参数,则表示权重寻址:表示访问两次8002,访问一次8001。循环下去
    #server 192.168.10.21:8001 weight=1;
    #server 192.168.10.21:8002 weight=2; 
    #fail_timeout和slow_start。fail_timeout表示服务请求超过多长时间,就认为该服气宕机了,slow_start表示继续监控该服务多长时间,如果正常则认为服务已恢复正常。注意slow_start参数不能与 hash,ip_hash和随机 负载平衡方法一起使用
    #server 192.168.10.21:5244 fail_timeout=5s slow_start=30s;
}

server {
    listen 80;
    server_name localhost;    

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
        proxy_pass http://pan ;
        # 上传的最大文件尺寸
        client_max_body_size 30000m;
    }
}