Настройка, которую мы пытаемся оценить, довольно проста - NginX на одной машине (в настоящее время 1vCPU, 2GB RAM), два back-end Tomcats на двух разных машинах. Основная конфигурация выглядит следующим образом:
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;
}
Мы пробовали бежать ab -c10 -n20
с 3 разных машин (3 разных общедоступных IP-адреса - 2 разных города, 3 разных интернет-провайдера, но в пределах одной страны) одновременно.
Независимо от того, что я изменил или пробовал в конфигурации (epoll yes / no, multi_accept on / off, keep-alive 0 /! = 0, перезапуск, удаление var / cache / nginx ...), был поражен только один сервер Tomcat , и всегда первым по порядку в списке апстрима, так как я тоже пытался изменить порядок.
Для немного большего контекста - эти два Tomcats обслуживают динамически генерируемые двоичные файлы (двоичные на запрос, размером 60–200 КБ), и время ответа не очень быстрое.
когда ip_hash
отключен, запросы распределяются на оба бэкенда. Значит, что-то не так с нашими тестами или конфигурацией NginX ...?