[LB] Balanceamento com pacote HAproxy quebra conexões
-
Pessoal,
Estou testando as duas formas de balanceamento de aplicações em camada 4 e 7 utilizando o pfSense, a ferramenta nativa do PF (Load Balance) e o pacote HAproxy, ambas com VIP CARP, tudo sincronizado entre os dois PF, etc.
Uma das vantagem do HAproxy no meu cenário é que o mesmo tem configurações de sticky connections que podem ser definidas exclusivamente para cada pools, o Load Balance padrão faz isso apenas de forma global. Além da mais algoritmos de balanceamento.
O problema que eu estou enfrentando no HAproxy é que as conexões estabelecidas da rede WAN para a LAN são quebradas quando ocorre a migração do VIP ou restart do pfMaster. Diferente do Load Balance padrão, o qual mantém as conexões mesmo migrando o VIP.
O seguinte teste é realizado: Conexão externa utilizando SSH no IP do VIP, o mesmo é um frontend do HAproxy e faz o balanceamento para os servidores do backend, tudo funciona ok ATÉ que ocorra a migração do VIP, neste instante a conexão é quebrada.
Já tentei utilizando o HAproxy sem o pfSense + keepalived + conntrackd e nada.
Alguém tem alguma sugestão?
-
Eu acho que o haproxy não tem tranferência de tabela de estados de conexão igual o pfsense faz na camada 4.
Acredito que só funcionaria se existisse uma forma de guardar isso em um banco acessado pelos dois.Outra dica importante do Haproxy é que ele funciona perfeito apenas com um processador marcado. Escolhendo mais de um, ele vai bem até falhar um dos servidores web.
-
Deve ser isso mesmo, visto que, as conexões de saída, que utilizam apenas os VIPS do pf para chegar até a WAN nunca sofrem problema quando ocorre indisponibilidade. Já a entrada, que é interceptada pelo HAproxy, ocorre.
Não achei uma documentação mais avançada do serviço de Load Balance padrão, sabe se existe ou tem somente este:
https://doc.pfsense.org/index.php/Inbound_Load_BalancingEdit:
https://forum.pfsense.org/index.php?topic=64358.msg349367#msg349367
"Packages like HAproxy also have an internal state associated with their connections and even if the configuration is sync'd to the secondary and the states move over, the HAproxy instance on the secondary has no way to obtain that connection information from the master's HAproxy daemon."