使用 nginx 实现主动/被动反向代理

使用 nginx 实现主动/被动反向代理

Zookeeper我有两个 Websocket 服务器,以主动/被动的方式工作Curator,如果一个服务器出现故障,那么第二个后端服务器就会启动。

我按照以下方式配置它:

upstream backend  {
  server 172.31.9.1:8080 max_fails=1 fail_timeout=5s;
  server 172.31.9.0:8080 max_fails=1 fail_timeout=5s;
}

server {
    listen 443;

    # host name to respond to
    server_name xxxxxx.compute.amazonaws.com;

    ssl on;
    ssl_certificate /etc/ssl/certs/wildcard.dev.xxxx.net.crt;
    ssl_certificate_key /etc/ssl/certs/wildcard.dev.xxxx.net.key;

    location / {
        # switch off logging
        access_log off;

        proxy_pass http://backend;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

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

我预期的是,当主动服务器和被动服务器切换位置时,​​Nginx 将花费 5 秒钟来识别故障并将所有流量重定向到主动服务器。

实际情况是,需要长达 25 秒的时间来识别活动服务器并切换所有流量。

在真实情况下,我可以处理重定向之间最多 10 秒的停机时间。

我错过了什么?

答案1

fail_timeout来自NGINX文档:

套:

  • 在指定的时间内,与服务器通信的尝试失败次数达到指定次数,则认为服务器不可用;
  • 以及服务器被视为不可用的时间段。

因此设置为 5 意味着总共 10 秒(5 秒超时,5 秒等待再次联系)

顺便说一下,的默认值max_fails已经是 1,所以您不需要设置它。


如果您确实想要主动/被动设置,则应使用以下配置:

upstream backend  {
  server 172.31.9.1:8080;
  server 172.31.9.0:8080 backup;
}

相关内容