Назад | Перейти на главную страницу

HAProxy работает только для localhost

Просто настройте 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, чтобы получить журнал полного запроса.

То, что вы описываете, заставляет меня задуматься о трех возможностях:

  • соединение заблокировано где-то еще и даже не доходит до haproxy
  • сервер не может ответить на имя хоста, отличное от localhost, и закрывает соединение.
  • сервер отвечает перенаправлением на местоположение, недоступное для curl (например, localhost: 12345), в результате чего curl пытается выполнить несколько попыток и потерпит неудачу.

Журналы сообщат вам об этом. Кстати, вы пробовали с 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