Eu tenho o haproxy configurado com keepalived para balanceamento de carga e failover de IP de um cluster percona, e como funciona muito bem, eu gostaria de usar o mesmo lb / failover para outro serviço / daemon.
Eu configurei o haproxy desta maneira:
listen my_service 0.0.0.0:4567
mode tcp
balance leastconn
option tcpka
contimeout 500000
clitimeout 500000
srvtimeout 500000
server host1 xxx.xxx.xxx.xx1:4567 check port 4567 inter 5000 rise 3 fall 3
server host2 xxx.xxx.xxx.xx2:4567 check port 4567 inter 5000 rise 3 fall 3
O balanceamento de carga funciona bem, mas o serviço vê o IP do balanceador de carga em vez dos IPs reais dos clientes. No modo http, é muito fácil passar o haproxy pelo IP remoto, mas como faço no modo tcp? Isso é crítico devido à natureza do serviço necessário para carregar o equilíbrio.
Obrigado! Vito
load-balancing
haproxy
Vito Botta
fonte
fonte
Respostas:
Apenas para referências futuras, keepalived é uma solução para failover e não balanceamento de carga (talvez você queira dizer LVS?). o modo proxy transparente do HAProxy não tem nada a ver com nenhuma maneira especial de enviar o IP original, que seria o modo HTTP não transparente normal, no qual você pode usar um cabeçalho HTTP padronizado para isso.
Na minha opinião, a resposta correta à pergunta original é: Você pode compilar o suporte a proxy transparente no HAProxy em um kernel Linux habilitado para TPROXY. Isso, juntamente com a versão de suporte TPROXY adequada + a configuração do iptables na mesma máquina, permite um suporte a proxy TCP totalmente transparente e real. Isso significa que os servidores back-end NÃO precisam de nenhuma configuração especial.
Observe que, na verdade, essa não é a configuração recomendada para o HAProxy e só deve ser usada se você precisar absolutamente.
fonte
Aparentemente, existe algum tipo de modo "transparente" para a haproxia que eu nunca olhei ou que queira saber, que você poderia tentar. Caso contrário, você precisará ensinar o que o serviço de back-end é sobre a maneira especial da haproxy de enviar o IP original ("PROXY blahblah") e solicitar que o serviço retire o IP original.
Por que você está se incomodando com haproxy? Você já manteve a manutenção no local e também faz o balanceamento de carga transparente adequado.
fonte
O uso
send-proxy
em sua configuração (por servidor) fornecerá o IP de origem original no lado do servidor de recebimento, mesmo no modo TCP. Isso requer HAProxy 1.5+.Você pode encontrar mais informações sobre o Proxy Protocol na documentação HAProxy .
fonte
Você pode definir o HAProxy como modo NAT, que ainda usa o modo TCP na camada 4, mas torna o IP transparente.
Por outro lado, o Modo Transparente HAPorxy usa o modo HTTP na Camada 7, que não atinge o seu ponto, porque já existe uma
forwardfor
opção no modo HTTP.fonte
Essa configuração funcionou para mim. O IP de origem pode ser recuperado em $ _SERVER ['HTTP_X_FORWARDED_FOR']:
fonte