A configuração que estamos tentando avaliar é bastante simples: o NginX em uma máquina (atualmente 1vCPU, 2 GB de RAM) e dois Tomcats de back-end em duas máquinas separadas. Configuração principal da seguinte forma:
worker_processes 1;
events {
worker_connections 2048;
use epoll;
# multi_accept on;
}
http {
# define load-balancing upstream
upstream tomcatUpstream {
ip_hash;
server 192.168.xx.51:8080;
server 192.168.xx.52:8080;
}
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 0; # 45;
# keepalive_requests 4096;
reset_timedout_connection on;
client_body_timeout 30;
send_timeout 15;
}
Tentamos executar ab -c10 -n20
de 3 máquinas diferentes (3 IPs públicos diferentes - 2 cidades diferentes, 3 ISPs diferentes, embora dentro do mesmo país) ao mesmo tempo.
Não importa o que eu mudei ou tentei dentro da configuração (epoll sim / não, multi_accept ativado / desativado, keep-alive 0 /! = 0, reiniciar, excluindo var / cache / nginx ...), somente um back-end Tomcat foi atingido, e sempre o primeiro por ordem na lista upstream, como eu tentei mudar a ordem também.
Para um pouco mais de contexto - esses dois Tomcats servem arquivos binários gerados dinamicamente (binário por solicitação, 60 - 200 KB de tamanho) e os tempos de resposta não são muito rápidos.
Quando ip_hash
está desativado, as solicitações são distribuídas em ambos os backends. Então, deve haver algo errado com nossos testes ou configuração do NginX ...?