nginx:WSS 负载均衡器:故障服务器没有退出轮换,为什么?

nginx:WSS 负载均衡器:故障服务器没有退出轮换,为什么?

使用当前的 nginx 1.6.2 将 wss (websockets) 负载平衡到两台服务器。我们使用了一些粘性,如下所示。

这个配置运行良好,直到其中一个上游服务器离线。

问题:当其中一个上游服务器离线时,nginx 会发现它已离线,但会继续每隔 8 到 12 秒尝试使用它。我们尝试调整 fail_timeout,但没有任何效果。即使我们将其设置为 100,它的行为也像设置为 5 或 10 一样。注意:我们正在平衡 websocket 流量。

结果:几秒钟内,所有请求都转到剩余的在线服务器,但每隔约 10 秒,它就会尝试连接到宕机的服务器。这会导致一个或多个客户端出现长时间(400-1000 毫秒)暂停。

我们需要能够使服务器离线(为了升级等),并让 nginx 避开该服务器直到我们将其恢复。

我们还尝试将上游服务器标记为关闭,重新加载配置,但行为仍然如所述。

我们开始猜测其中一些功能可能无法按预期在 websockets 上运行?

解决办法是什么?

worker_processes  1;    

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream websocketserver {
      hash $request_uri;
      server 192.168.97.102:3842 max_fails=1 fail_timeout=5s;
      server 192.168.97.202:3842 max_fails=1 fail_timeout=5s;
    }

    server {
        listen       127.0.0.1:3841;
        listen       127.0.0.1:3843 ssl;

        ssl_certificate      cert.cer;
        ssl_certificate_key  cert.key;

        ssl_protocols SSLv3 TLSv1;
        ssl_ciphers HIGH:!aNULL:!MD5;

        location / {

          proxy_pass http://websocketserver;

          proxy_next_upstream     error timeout invalid_header http_500;
          proxy_connect_timeout   2;
          proxy_read_timeout      86400;

          # WebSocket support (nginx 1.4)
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";    
        }
    }
}

答案1

找到了答案。

问题设置:在 Windows 上运行 1.6.x(这是为了原型设计,而不是生产)

正常运行设置:Centos 1.7.9

我们怀疑问题在于 Windows 上的某些模块或类似的东西无法正常工作。

相关内容