Я использую HAProxy для балансировки нагрузки входящих запросов на моих двух внутренних серверах Tomcat. В файле конфигурации, когда я указываю HAProxy для прослушивания того же компьютера, на котором установлен HAProxy, все в порядке, и он начинает работать как шарм. Мне нужен HAProxy для прослушивания виртуального IP-адреса на другом компьютере (чтобы я мог установить другой LB в качестве аварийного переключения), но когда я настраиваю HAProxy для этого, я получаю эту ошибку при запуске HAProxy:
не может привязать сокет для прокси http_proxy. Прерывание.
вот мой файл конфигурации:
global
maxconn 4096 # Total Max Connections. This is dependent on ulimit
daemon
nbproc 4
defaults
mode http
clitimeout 60000
srvtimeout 30000
contimeout 4000
option httpclose # Disable Keepalive
listen http_proxy 10.0.5.99:80 #the virtual IP I want to listen to
mode http
stats enable
stats auth xxx:xxx
balance source # Load Balancing algorithm
option httpchk
option forwardfor # This sets X-Forwarded-For
## Define your servers to balance
server web1 10.0.5.102:8080 weight 1 maxconn 512 check
server web2 10.0.5.103:8080 weight 1 maxconn 512 check
Я использую CentOS 5.1, установленную на некоторых виртуальных машинах. Необходимо сказать, что я полностью остановил службу iptables на удаленном компьютере, и проблема все еще существует. Я предполагаю, что что-то мешает haproxy на удаленной машине. Любые идеи?
Вы также можете разрешить процессу связываться с нелокальным (то есть несуществующим IP), добавив net.ipv4.ip_nonlocal_bind=1
к /etc/sysctl.conf
и бег sysctl -p
. Но что такое sysadmin1138: вы можете посмотреть, как вы спроектировали аварийное переключение.
При выполнении конфигурации аварийного переключения, как вы говорите, вы хотите, я обнаружил, что лучше позволить механизму кластеризации обрабатывать перемещение IP-адресов, чем каким-либо образом делать это в HAProxy. Вы настраиваете виртуальный IP-адрес для перемещения между узлами, а затем настраиваете его, чтобы служба (HAproxy) следовала за этим виртуальным IP. Затем вы настраиваете HAProxy для прослушивания только виртуального IP. Это работает, потому что это программное обеспечение для кластеризации который запускает и останавливает процесс HAproxy по мере его перемещения, вы не делаете этого из обычных служб.
Вы получаете сообщение об ошибке, потому что haproxy пытается прослушивать несуществующий IP-адрес. Похоже, вы запускаете процесс haproxy до того, как VIP будет назначен машине.
Одно из решений - прослушивать все интерфейсы 0.0.0.0
. Затем вы можете ограничить доступ к VIP, используя iptables
если нужно.
Другой вариант - прослушивать VIP, но вам нужно убедиться, что VIP существует при запуске haproxy. Это можно сделать, разрешив программному обеспечению кластеризации (например, keepalived) запускать haproxy для вас, когда оно получает VIP.
См. Ответы выше о настройке net.ipv4.ip_nonlocal_bind=1
.
Если это не сработает, проверьте, есть ли у вас уже существующая служба, прослушивающая порт, к которому вы пытаетесь привязаться, с помощью sudo lsof -i :80
.