我有一个 nginx docker 容器,balancer
它充当 3 个 nginx docker 容器的平衡器server_1
,,server_2
。server_3
负载平衡工作正常,它以根据指定方法的方式访问所有服务器。但是,当我使用 停止第一台服务器时docker stop server_1
,我得到了504
,即使其他服务器仍在运行。
我的平衡器默认文件如下所示:
# don't redirect proxy
proxy_redirect off;
upstream app {
least_conn;
server webserver_1;
server webserver_2;
server webserver_3;
}
server {
listen 80;
location / {
proxy_pass http://app;
proxy_next_upstream error timeout invalid_header http_500 http_504;
# proxy_set_header Host localhost;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我尝试fail_timeout=10s max_fails=1
在指令中添加三台服务器upstream
,但没有成功。我也尝试添加指令proxy_next_upstream_tries 2;
,但这也没有帮助。
如果您需要更多信息,请告诉我。
答案1
您使用的是哪种类型的 docker 网络?我想知道请求超时的原因。有防火墙规则吗?
对于负载平衡来说,通常“依赖”超时是不好的。当主机(容器)不可用(例如“没有到主机的路由”)或连接重置(容器可用,但服务未运行)时,情况会更好。
答案2
我的经验是,它只是按照负载平衡方法使用所有 3 台服务器,但不会将服务器标记为关闭。