NginX 仅命中一个启用了 ip_hash 的后端……?

NginX 仅命中一个启用了 ip_hash 的后端……?

我们要评估的设置非常简单 - 一台机器上安装 NginX(目前为 1vCPU、2GB RAM),两台独立机器上安装两个后端 Tomcat。核心配置如下:

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 个不同的 ISP,尽管在同一个国家/地区)运行。

无论我在配置中更改或尝试什么(epoll yes/no、multi_accept on/off、keep-alive 0 / !=0、重新启动、删除var/cache/nginx……),只有一个后端 Tomcat 被命中,并且始终是上游列表中按顺序排列的第一个,因为我也尝试更改顺序。

更详细的信息如下:这两个 Tomcat 提供动态生成的二进制文件(每个请求一个二进制文件,大小为 60 - 200KB),响应时间不是很快。

禁用时ip_hash,请求将分布在两个后端。所以,我们的测试或 NginX 配置一定有问题……?

相关内容