У меня есть два сервера Websocket, которые работают с Zookeeper
& 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 секунд простоя между перенаправлениями.
Что мне не хватает?
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;
}