美文网首页
Nginx负载均衡小知识

Nginx负载均衡小知识

作者: 超人也害羞 | 来源:发表于2020-04-30 01:11 被阅读0次

Nginx 负载均衡配置

Nginx 重试次数限制

Nginx 超时重试

Nginx 负载均衡

负载均衡策略

  • round-robin 轮循(默认方法)
  • least-connected
  • ip-hash

栗子1(轮循)

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

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

栗子2(least-connected)

优点: 流量分配更公平.

缺点: 相对round-robin,需要去维护和计算各server的连接.

upstream myapp1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

栗子3(ip-hash)

根据请求客户端的ip进行hash找到对应的server.

特点是同一个ip发出的请求都由同一个server处理.(如果有这样特殊的场景可以采用)

缺点: 真实情况是容易造成各server的负载不一致.比如,只有一个人使用,就算机器很多,只会有一台机器服务.或者一个用户请求一个极耗内存的操作,比如说导出报表,所有请求都打到这台机器,那么这台机器很有可能会挂.若还有nginx超时重试等机器,可能还会有更严重的问题.

upstream myapp1 {
    ip_hash;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

负载均衡之权重

nginx可以指定各server流量分配的权重,如下配置,如果有5个request,会分配个srv1 3个请求.

 upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
        server srv3.example.com;
    }

Nginx超时重试策略

重试次数配置,防止无意义的重试。

业务场景: 为什么需要重试或者为什么要限制重试策略. 举一个栗子, 有一个实时导出报表的操作,需要生成一个超大的excel,需要大量的内存资源,并且耗时,如果请求处理时间超时了,而触发了nginx的重试策略,那么就会导致重复的请求打到相同或不同机器上,轻则浪费资源,重则导致机器宕机的蔓延.

proxy_next_upstream_tries 1;

Ningx转移配置

proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;

上面的配置表示,如果后端服务器如下情况,将会把请求转发到下一台后端服务器上。

  • error - 在连接到一个服务器,发送一个请求,或者读取应答时发生错误。
  • timeout - 在连接到服务器,转发请求或者读取应答时发生超时。
  • invalid_header - 服务器返回空的或者错误的应答。
  • http_502 - 服务器返回502代码。
  • http_504 - 服务器返回504代码。

nginx完整配置

upstream tomcats {
        server 10.11.32.96;
        server 10.11.32.97;
  }

server {
        listen       80 default_server;
        server_name  10.11.32.96;
        root         /usr/share/nginx/html;
         location / {
           proxy_pass http://tomcats;
                proxy_connect_timeout 100s;
                proxy_read_timeout 120s;
                proxy_send_timeout 300s;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_buffer_size 256k;
                proxy_buffers 4 256k;
                proxy_busy_buffers_size 256k;
                proxy_temp_file_write_size 256k;
                proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
                proxy_max_temp_file_size 128m;
                #重试次数配置,防止无意义的重试。
                proxy_next_upstream_tries 1;
       }

        # Load configuration files for the default server block.
       # include /etc/nginx/default.d/*.conf;
    
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

相关文章

网友评论

      本文标题:Nginx负载均衡小知识

      本文链接:https://www.haomeiwen.com/subject/hhkawhtx.html