Eles se desconectam. O TCP não tem parte de protocolo para alterar o endereço IP para que os clientes não saibam que ele mudou de forma mágica. Uma nova conexão terá que ser estabelecida.
Temos alguns servidores PHP-FPM e, quando precisam de uma conexão de banco de dados, eles se conectam a um servidor HAProxy, que os seleciona para usar um servidor de banco de dados e a conexão é aberta. Quando, em seguida, desejamos realizar alguma manutenção nos servidores HAProxy (como alterações de configuração que exigem uma reinicialização HAProxy), o processo é o seguinte:
Como o passo 2 ocorre, o que acontecerá com as conexões abertas do mysql naquele ponto? De acordo com esta questão de Sessões TCP e Alterações de IP , as conexões serão canceladas. É este realmente o caso? Se sim, o que, se for o caso, pode ser feito para evitar que isso aconteça? A conexão pode de alguma forma ser forçada a usar o IP principal (não flutuante) do servidor?
Também temos uma configuração semelhante com dois servidores Nginx com o Keepalived sendo executado e planejamos fazer o processo equivalente. Se fizermos isso, a mesma pergunta se aplica - o que acontece com as conexões http existentes quando o IP passa para o outro servidor?
Agradeço sua ajuda.
Os endereços IP a serem usados para a conexão TCP são escolhidos pelo cliente quando a conexão é estabelecida. A escolha pode ser feita pela camada de aplicação ligando o socket a um IP específico antes de conectar, ou pelo kernel se a camada de aplicação não tiver feito uma escolha.
A escolha feita pelo kernel pode ser controlada de algumas maneiras diferentes. Um host que tenha um endereço IP estático e um endereço IP flutuante deve ser configurado para usar o endereço IP estático para conexões de saída. Se você quiser usar um IP apenas para conexões de entrada e não para conexões de saída, você pode atribuí-lo a uma interface fictícia.
Por padrão, o endereço IP escolhido pelo kernel é aquele atribuído à interface pela qual o pacote TCP SYN é enviado. Se você estiver usando o IPv6, você tem um controle mais detalhado, aqui estão alguns exemplos de comandos que podem ser usados no Linux:
/sbin/ip -6 addr change 2001:db8::234 dev eth0 preferred_lft 1
/sbin/ip -6 addr change 2001:db8::1 dev eth0 preferred_lft 0
O par de comandos acima usaria 2001:db8::234
para pacotes SYN enviados através de eth0
.
Tags nginx haproxy tcp tcpip keepalived