Назад | Перейти на главную страницу

NginX поражает только один бэкэнд с включенным ip_hash…?

Настройка, которую мы пытаемся оценить, довольно проста - 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 ...?