Estou trabalhando há anos com outros balanceadores de carga, então esperava que os balanceadores de carga do GCP funcionassem da mesma maneira que os outros ao usar configurações de persistência de sessão.
Infelizmente, a ativação de persistência de sessão para back-ends no GCP LB parece não enviar todas as solicitações de um determinado cliente para um único servidor de back-end (nem usando cookies ou opções de persistência de sessão IP)
É um bug / comportamento conhecido ou algo que eu possa resolver sozinho?
Eu fiz este teste rápido:
- Eu criei um novo HTTP LB e atribuí um novo IP externo a ele.
- Eu indiquei um serviço de back-end para um grupo de instâncias com 2 instâncias.
- Como meu servidor de back-end está executando o apache e o mod_php, criei um script PHP simples (chamado get_up.php) para mostrar o endereço IP do servidor (veja o código abaixo)
- Finalmente, eu corri um script de curl rápido dentro de um loop, apontando para o $ LBIP / get_ip.php para ver o que acontece.
Se eu fizer o mesmo, digamos, no Rackspace, obtenho sempre o mesmo IP que o resultado, mas no GCP eu vejo que posso acessar qualquer um dos meus dois servidores backend aleatoriamente.
Este é o meu script de teste PHP:
<?php
$realIP = file_get_contents("http://ipecho.net/plain");
echo "My Ip is " . $realIP;
echo "\n";
?>
E este é o meu teste:
➜ ~ while true; do curl -b cookie.txt -c cookie.txt $IP/get_ip.php; sleep 1 ; done
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 104.197.18.77
My Ip is 104.197.18.77
My Ip is 104.197.18.77
My Ip is 35.193.16.20
My Ip is 104.197.18.77
My Ip is 35.193.16.20
My Ip is 35.193.16.20
My Ip is 104.197.138.72
- Editar - Enrole o comando para enviar cookies, com base no comentário do BillThor. Mesmos resultados.
- Editar - Detalhes da solução.
A persistência de sessão funciona bem quando é usada com grupos de instâncias de zona única. Eu tive que sacrificar o uso de grupos de instâncias multi-zona até que isso fosse resolvido.