Eu tenho um balanceador de carga IPVS L4 com configuração de balanceadores enviados L7. Digamos que um dos meus balanceadores L4 fique inativo e, graças ao hashing consistente, o tráfego que agora é tratado (graças ao BGP) por outro balanceador L4 seja proxy para o mesmo nó L7.
Isso deve funcionar sem problemas e eu acho que é uma configuração comum.
O problema está nas conexões de longa duração. Quando o novo nó L4 recebe o tráfego (apenas dados - pacotes ACK/PUSH) e nenhum pacote SYN foi recebido pelo nó, o nó apenas envia o pacote RST para o cliente que encerra a conexão. A imagem abaixo ilustra isso.
Isso não deveria estar acontecendo e minha pergunta é: existe uma maneira (uma configuração do sysctl ou algo assim) que seja a razão para isso? Eu sei que talvez possa descartar pacotes RST usando iptables, mas isso não parece certo.
Responder1
Na verdade, existe uma variável sysctl net.ipv4.vs.sloppy_tcp
para este problema específico (https://lore.kernel.org/patchwork/patch/386081/?fbclid=IwAR17t0jEvRSlvZFch1Lz_CDMjYOzUluuNGQmiyKequZK1Vq4kI75vezWEGs) que resolve isso.
O grande obrigado vai para Patric Shuff, que me ajudou a descobrir isso (ótima apresentação sobre esse assunto -https://www.usenix.org/conference/lisa16/conference-program/presentation/shuff).