NGINX TCP Load Balancing ist IP-sticky, wenn es zufällig sein sollte, pro Anfrage

NGINX TCP Load Balancing ist IP-sticky, wenn es zufällig sein sollte, pro Anfrage

Ich habe einen NGINX-Server, der als TCP-Load Balancer verwendet wird. Er ist standardmäßig auf Round-Robin-Load-Balancing eingestellt, daher gehe ich davon aus, dass für eine bestimmte Client-IP jedes Mal, wenn sie den Endpunkt erreichen, für jede Anfrage ein anderer Backend-Upstream-Server bereitgestellt wird. Stattdessen wird jedes Mal derselbe Upstream-Server bereitgestellt, und jedesunterscheidbarDie Client-IP erhält einen eigenen Upstream-Server. Das ist schlecht, weil meine Clients viel Datenverkehr erzeugen und es dadurch zu Hotspots kommt, weil jeder Client nur einen Upstream-Server nutzen kann. Es scheint, als würde eine bestimmte Client-IP langsam zwischen den Upstream-Servern rotieren; ich möchte wiederum, dass jede Anfrage zufällig einem Upstream pro Anfrage zugewiesen wird.

Wie kann ich NGINX dazu bringen, den Upstream-Server zufällig zuzuweisen fürjede Anfrage? Ich habe das zufällige Schlüsselwort ausprobiert, aber das hatte keinen Effekt. Für jede Hilfe wäre ich sehr dankbar.

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

stream {

    upstream api_backend_http {
        server node1.mydomain.com:80;
        server node2.mydomain.com:80;
        server node6.mydomain.com:80;
        server node14.mydomain.com:80;
        server node18.mydomain.com:80;
        server node19.mydomain.com:80;
        server node21.mydomain.com:80;
        server node22.mydomain.com:80;
        server node24.mydomain.com:80;
    }

    upstream api_backend_https {
        server node1.mydomain.com:443;
        server node2.mydomain.com:443;
        server node6.mydomain.com:443;
        server node14.mydomain.com:443;
        server node18.mydomain.com:443;
        server node19.mydomain.com:443;
        server node21.mydomain.com:443;
        server node22.mydomain.com:443;
        server node24.mydomain.com:443;
    }

    server {
        listen            80;
        proxy_pass        api_backend_http;
        proxy_buffer_size 16k;
        proxy_connect_timeout 1s;
    }

    server {
        listen            443;
        proxy_pass        api_backend_https;
        proxy_buffer_size 16k;
        proxy_connect_timeout 1s;
    }

    
}

Antwort1

Weil Sie aufhören sollten, nginx als TCP-Load Balancer zu verwendenfür andere Webserverund wandeln Sie es in einen vollwertigen HTTP-Reverse-Proxy um, was es auch ist. Auf diese Weise erhalten Sie den gewünschten RR pro Anforderung (mit standardmäßig deaktivierten dauerhaften Verbindungen) anstelle der TCP-Sitzungsverteilung.

verwandte Informationen