O balanceamento de carga TCP NGINX é ip-sticky quando deveria ser aleatório, por solicitação

O balanceamento de carga TCP NGINX é ip-sticky quando deveria ser aleatório, por solicitação

Eu tenho um servidor NGINX sendo usado como balanceador de carga TCP. O padrão é o balanceamento de carga round-robin, então minha expectativa é que, para um determinado IP do cliente, toda vez que eles atingirem o endpoint, eles obtenham um servidor upstream de back-end diferente para cada solicitação. Mas, em vez disso, o que está acontecendo é que eles sempre obtêm o mesmo servidor upstream, e cadadistintoo IP do cliente está obtendo um servidor upstream distinto. Isso é ruim porque meus clientes geram muito tráfego e estão causando pontos de acesso porque qualquer cliente pode utilizar apenas um servidor upstream. Parece girar lentamente um determinado IP do cliente nos servidores upstream; novamente, quero atribuir aleatoriamente cada solicitação a um upstream por solicitação.

Como posso fazer com que o NGINX atribua aleatoriamente o servidor upstream paracada pedido? Tentei a palavra-chave aleatória e não teve efeito. Qualquer ajuda seria muito apreciada.

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;
    }

    
}

Responder1

Porque você deve parar de usar o nginx como balanceador de carga TCPpara outros servidores Webe mude-o para um proxy reverso HTTP completo, o que é. Dessa forma, você obterá o RR por solicitação, que deseja (com conexões persistentes desativadas por padrão), em vez da distribuição da sessão TCP.

informação relacionada