HAProxy não pode ligar o socket para proxy em uma máquina remota

3

Estou usando o HAProxy para balancear a carga das solicitações recebidas em meus dois servidores de back-end do tomcat. No arquivo de configuração quando eu especificar HAProxy para ouvir a mesma máquina em que o HAProxy está instalado, tudo está bem e começa a funcionar como um encanto. Eu preciso HAProxy para ouvir um IP virtual em outra máquina (para que eu possa instalar outro LB como failover), mas quando eu configurar HAProxy para fazer isso, eu recebo este erro ao iniciar o HAProxy:

cannot bind socket for proxy http_proxy. Aborting.

aqui está o meu arquivo de configuração:

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

Estou usando o CentOS 5.1 instalado em algumas máquinas virtuais. É necessário dizer que parei completamente o serviço iptables na máquina remota e o problema ainda está lá. Eu suponho que algo está interferindo no haproxy na máquina remota. Alguma idéia?

    
por SJ.Jafari 07.04.2012 / 13:40

4 respostas

6

Você também pode permitir que um processo seja vinculado a um IP não local (ou seja, inexistente) adicionando net.ipv4.ip_nonlocal_bind=1 a /etc/sysctl.conf e executando sysctl -p . Mas o que sysadmin1138 é válido: você pode querer ver como você arquitetou seu failover.

    
por 07.04.2012 / 14:48
3

Ao fazer uma configuração de failover como você diz que você quer, descobri que é melhor deixar o mecanismo de clustering lidar com a movimentação de endereços IP em vez de fazê-lo de alguma forma em HAProxy. Você configura o endereço IP virtual para mover-se entre os nós e, em seguida, configura-o para que um serviço (HAproxy) siga esse IP virtual. Você então configura o HAProxy para escutar somente o IP virtual. Isso funciona porque é o software de clustering que inicia e interrompe o processo do HAproxy enquanto ele se move, você não o faz dos serviços normais.

    
por 07.04.2012 / 14:27
2

Você está recebendo o erro porque o haproxy tenta escutar em um endereço IP inexistente. Parece que você está iniciando o processo haproxy antes que o VIP seja atribuído à máquina.

Uma solução é ouvir em todas as interfaces 0.0.0.0 . Você pode restringir o acesso ao VIP usando iptables , se necessário.

Outra opção é ouvir o VIP, mas você precisa ter certeza de que o VIP existe ao iniciar o haproxy. Isso pode ser feito permitindo que o software de armazenamento em cluster (como keepalived) inicie o haproxy para você quando ele adquire o VIP.

    
por 07.04.2012 / 14:31
0

Veja as respostas acima sobre a configuração de net.ipv4.ip_nonlocal_bind=1 .

Se isso não funcionar, verifique se você já tem um serviço existente ouvindo na porta que está tentando associar, com sudo lsof -i :80 .

    
por 21.02.2016 / 07:16