使用 nginx 的负载平衡比单节点的 RPS 更低

Load balancing with nginx lower RPS than single node

我为 4 个区块链客户端设置了一个 nginx 负载均衡器,并且通过负载均衡器使用 k6 进行负载测试时每秒获得的请求数比我针对单个节点时所做的要少。所有节点都对等量的流量做出响应,其中 none 个节点的响应速度似乎比下一个慢。

负载平衡器是使用 bitnami nginx helm chart 设置的,区块链客户端 运行 在它们自己的 VM 上。

**nginx.conf**

    # Based on https://www.nginx.com/resources/wiki/start/topics/examples/full/#nginx-conf
    # user              www www;  ## Default: nobody;

    load_module modules/ngx_http_geoip2_module.so;
    load_module modules/ngx_stream_geoip2_module.so;

    worker_processes  auto;
    error_log         "/opt/bitnami/nginx/logs/error.log";
    pid               "/opt/bitnami/nginx/tmp/nginx.pid";

    events {
        worker_connections  1024;
    }

    http {
        include       mime.types;
        default_type  application/octet-stream;
        log_format    main '$remote_addr - $remote_user [$time_local] '
                          '"$request" $status  $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        access_log    "/opt/bitnami/nginx/logs/access.log";
        add_header    X-Frame-Options SAMEORIGIN;

        client_body_temp_path  "/opt/bitnami/nginx/tmp/client_body" 1 2;
        proxy_temp_path        "/opt/bitnami/nginx/tmp/proxy" 1 2;
        fastcgi_temp_path      "/opt/bitnami/nginx/tmp/fastcgi" 1 2;
        scgi_temp_path         "/opt/bitnami/nginx/tmp/scgi" 1 2;
        uwsgi_temp_path        "/opt/bitnami/nginx/tmp/uwsgi" 1 2;

        sendfile           on;
        tcp_nopush         on;
        tcp_nodelay        off;
        gzip               on;
        gzip_http_version  1.0;
        gzip_comp_level    2;
        gzip_proxied       any;
        gzip_types         text/plain text/css application/javascript text/xml application/xml+rss;
        keepalive_timeout  65;
        ssl_protocols      TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers        HIGH:!aNULL:!MD5;
        client_max_body_size 80M;
        server_tokens off;

        include  "/opt/bitnami/nginx/conf/server_blocks/*.conf";
    }

**serverBlock**

upstream backend {
  server 1.2.3.4:8000;
  server 2.2.3.4:8000;
  server 3.2.3.4:8000;
  server 4.2.3.4:8000;
}
server {
  listen 0.0.0.0:8080;
  location / {
      proxy_pass http://backend;
  }

  location /status {
    stub_status on;
    access_log   off;
    allow 127.0.0.1;
    deny all;
  }
}

从 nginx 指标或检查容器的资源使用情况来看,没有什么突出的。

有没有人对调试此问题的下一步或罪魁祸首有什么建议?

感谢您的帮助。

最终根本不是 nginx,因为我错误地认为它是瓶颈。设置一个 hello world 的小例子,在负载测试之后,它指出了我 API 网关中的真正瓶颈。