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;
}