Não consegui encontrar uma solução para o problema, então esta é a minha pergunta.
Digamos que eu tenha 3 servidores, 2 deles são servidores upstream e 1 é um balanceador de carga.
Estas são minhas configurações básicas
Servidores upstream
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Balanceador de carga
worker_processes auto;
worker_rlimit_nofile 100000;
error_log off;
events {
worker_connections 5000;
multi_accept on;
use epoll;
}
http {
upstream myapp1 {
server 138.197.122.195;
server 138.197.122.293;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
}
O que eu quero alcançar é enviar / redirecionar solicitações de usuários para os servidores upstream usando o recurso de balanceamento de carga round robin do nginx. Os upstreams então servirão conteúdo diretamente aos usuários.
O papel do balanceador de carga aqui não é reduzir a carga para upstreams por proxy, mas distribuir igualmente solicitações para eles. No entanto, com essas configurações, todas as solicitações & respostas passará pelo balanceador de carga, consuma sua largura de banda. Existe outra maneira de arredondar as solicitações de redirecionamento robin com o NGINX? Por favor ajude.
A razão pela qual eu quero fazer isso é que eu tenho uma largura de banda limitada para um balanceador de carga decente (alto custo), portanto, não posso escalar efetivamente. Por exemplo, digamos que 3 servidores tenham 100mbps de largura de banda cada, se um usuário consumir 1mbps, o balanceador de carga será um gargalo se houver 101 usuários. Se eu puder distribuir o tráfego igualmente para ambas as upstream, o sistema pode servir até 200 usuários teoricamente.
Na maioria dos tópicos semelhantes, encontrei pessoas usando o método DNS round robin. Eu testei, mas não é confiável por causa do cache de registros na própria hierarquia do DNS, bem como pelo cache e reutilização de endereços do lado do cliente.