Просто настройте HAProxy в первый раз в качестве единого балансировщика нагрузки, балансирующего 2 сервера, на каждом из которых работают Varnish и Nginx.
Вот файл cfg:
global
#uid 99
#gid 99
daemon
stats socket /var/run/haproxy.stat mode 600 level admin
maxconn 40000
ulimit-n 81000
pidfile /var/run/haproxy.pid
defaults
mode http
contimeout 4000
clitimeout 42000
srvtimeout 43000
balance roundrobin
listen webfarm 91.227.223.61:80
mode http
stats enable
stats auth admin:password
balance roundrobin
cookie web insert indirect nocache
option httpclose
option forwardfor
option httpchk HEAD /check.txt HTTP/1.0
server webA 91.227.223.58:80 cookie A check
server webB 91.227.221.121:80 cookie B check
option forwardfor except 91.227.223.61
reqadd X-Forwarded-Proto:\ https
reqadd FRONT_END_HTTPS:\ on
listen stats :7777
stats enable
stats uri /
option httpclose
stats auth admin:password
Проблема в том, что это работает только с localhost. Если я сделаю curl 91.227.223.61
с локального компьютера страница загружается нормально. На любом другом компьютере я жду несколько секунд, пока не истечет время ожидания страницы.
Похоже, что ни на одном из серверов нет брандмауэра (пока), и я пробовал iptables -F
на каждой машине.
У меня та же проблема. Мой HAProxy работал (подтверждено с помощью curl) локально. Команда
iptables -P INPUT ACCEPT && iptables -P OUTPUT ACCEPT
исправил мою проблему!
Для журналов просто используйте log 127.0.0.1 local0
(без фильтрации по notice
) и убедитесь, что ваш syslogd прослушивает сокет UDP (например: syslogd -r
). Пожалуйста, также добавьте опцию httplog, чтобы получить журнал полного запроса.
То, что вы описываете, заставляет меня задуматься о трех возможностях:
Журналы сообщат вам об этом. Кстати, вы пробовали с curl -i
или telnet
чтобы увидеть, что возвращает сервер?
Кроме того, когда вы получите эту конфигурацию, замените "option httpclose" на "option http-server-close", который будет поддерживать HTTP keep-alive на стороне клиента (я предполагаю, что вы используете 1.4 или 1.5-dev) , что приводит к повышению производительности и снижению задержки.
может быть iptables -F
недостаточно. Пытаться iptables -P INPUT ACCEPT && iptables -P OUTPUT ACCEPT