A drenagem de ligações é um processo que garante que os pedidos existentes em curso têm tempo para serem concluídos quando uma instância de máquina virtual (VM) é removida de um grupo de instâncias ou quando um ponto final é removido de grupos de pontos finais de rede (NEGs) que estão no âmbito zonal.
As informações nesta página aplicam-se apenas a grupos de instâncias e aos seguintes tipos de NEGs que são zonais no âmbito:
A drenagem da ligação começa sempre que faz o seguinte:
- Remover manualmente uma VM de um grupo de instâncias.
- Remove uma instância de um grupo de instâncias gerido através de uma chamada
resize()
,deleteInstances()
,recreateInstances()
ouabandonInstances()
. - Remover uma NIC dinâmica de uma VM que faz parte de um back-end do grupo de instâncias.
- Remover um grupo de instâncias ou um NEG de um serviço de back-end. Esta opção não é suportada para balanceadores de carga de rede de encaminhamento interno e balanceadores de carga de rede de encaminhamento externo.
- Trusted Cloud elimina uma instância como parte do redimensionamento automático.
- Faz uma atualização ao grupo de instâncias gerido através do atualizador do grupo de instâncias gerido.
- Remover manualmente um ponto final de um NEG zonal.
A drenagem de ligações não se aplica quando desliga um back-end (grupo de instâncias ou NEG zonal) do serviço de back-end de um balanceador de carga.
Como funciona a drenagem da ligação
Para ativar a drenagem da ligação, define um tempo limite de drenagem da ligação no serviço de back-end. A duração do limite de tempo tem de estar compreendida entre 0 e 3600 segundos, inclusive.
A instância pode demorar até 60 segundos a ser terminada após a duração do limite de tempo especificada.
Segue-se uma lista de especificações sobre a drenagem de ligações:
A drenagem de ligações está disponível para serviços de back-end que fazem parte dos seguintes balanceadores de carga:
- Balanceador de carga de aplicações externo
- Balanceador de carga de aplicações interno
- Balanceador de carga de rede de proxy externo
- Balanceador de carga de rede de proxy interno
- Balanceador de carga de rede de passagem interno
- Balanceador de carga de rede de encaminhamento externo baseado em serviço de back-end
Os balanceadores de carga de rede de encaminhamento interno e os balanceadores de carga de rede de encaminhamento externo suportam a drenagem de ligações para TCP, UDP e outros protocolos não TCP.
A drenagem de ligações também está disponível para serviços de back-end que fazem parte das implementações da malha de serviços na nuvem.
Quando é definido um limite de tempo de esgotamento de ligações e uma instância é removida do grupo de instâncias ou um ponto final é removido de um NEG zonal, os balanceadores de carga e a malha de serviços na nuvem comportam-se da seguinte forma:Trusted Cloud
Não são enviadas novas associações para a instância ou o ponto final removido.
Equilibradores de carga de aplicações: durante o período especificado do limite de tempo, os pedidos existentes à VM ou ao ponto final marcado para remoção têm tempo para serem concluídos. O balanceador de carga não envia novas ligações a esta VM ou a este ponto final. Quando a duração do limite de tempo é atingida, o equilibrador de carga deixa de enviar todo o tráfego para a VM ou o ponto final removido.
Balanceadores de carga de rede de proxy: durante a duração especificada do limite de tempo, as ligações TCP existentes à VM ou ao ponto final marcado para remoção continuam a funcionar durante o período de esgotamento de ligações configurado. O equilibrador de carga não envia novas ligações a esta VM nem a este ponto final. Quando a duração do limite de tempo é atingida, as ligações TCP existentes à VM ou ao ponto final removido permanecem ativas, e o proxy fecha todas as ligações TCP existentes no prazo de 10 minutos, que é o limite de tempo de inatividade predefinido.
Balanceadores de carga de rede de passagem: durante a duração especificada do limite de tempo de esgotamento da ligação, os pacotes pertencentes a ligações existentes são encaminhados para a VM ou o ponto final marcado para remoção. Quando a duração do limite de tempo é atingida, a entrada de conntrack para a VM ou o ponto final removido é removida. Qualquer pacote não SYN de uma ligação existente leva à criação de uma nova entrada conntrack para o back-end em bom estado. Quando o pacote vai para um novo back-end em bom estado, o back-end envia um RST ao cliente, uma vez que não tem nenhum registo do pacote que acabou de receber. Os balanceadores de carga de rede de encaminhamento interno e externo não enviam um TCP-RST nem um TCP-FIN para terminar as ligações existentes após o tempo limite de esgotamento de ligações expirar.
Se ativar a drenagem de ligações em vários serviços de back-end que partilham os mesmos grupos de instâncias ou NEGs, é usado o maior valor de limite de tempo. Por exemplo, suponhamos que o mesmo grupo de instâncias ou NEG zonal é um back-end para dois serviços de back-end, em que um serviço de back-end tem um limite de tempo limite de esgotamento de ligações de 100 segundos e o outro serviço de back-end tem um limite de tempo limite de esgotamento de ligações de 200 segundos.O Google Cloud Load Balancing usa 200 segundos como o limite de tempo limite de esgotamento de ligações eficaz antes de as terminar. Trusted Cloud Se o back-end for um grupo de instâncias gerido, as operações que eliminam a instância são atrasadas, pelo menos, 200 segundos.
Se não definir um limite de tempo limite de esgotamento de ligações ou se o limite de tempo limite de esgotamento de ligações estiver definido como zero (0), Trusted Cloud termina as ligações existentes na instância ou no ponto final removido o mais rapidamente possível.
Se estiver a usar o agrupamento de ligações, pode ver que os novos pedidos, que usam uma ligação estabelecida anteriormente, continuam a ser recebidos em VMs que estão a ser esgotadas, o que causa erros de ligação quando essas VMs são eliminadas.
Ative a drenagem de ligações
Para ativar a drenagem de ligações, conclua os passos seguintes.
Consola
Atualize um balanceador de carga
- Aceda à página Balanceamento de carga na Trusted Cloud consola.
Aceda a Balanceamento de carga - No separador Equilibradores de carga, para o equilibrador de carga que quer atualizar, clique em more_vert e, de seguida, em Editar .
- Clique em Configuração de back-end.
- No painel Configuração de back-end, clique em .
- Na parte inferior do painel Editar serviço de back-end, clique em Configurações avançadas.
- No campo Limite de tempo de esgotamento da ligação, introduza um valor de
0
a3600
. Uma definição de0
desativa a drenagem da ligação.
gcloud
Ative a drenagem de ligações num serviço de back-end novo ou existente através da flag --connection-draining-timeout
. Os exemplos seguintes demonstram como alterar o limite de tempo da eliminação gradual de ligações:
Para um balanceador de carga regional existente:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
Substitua os marcadores de posição por valores válidos:
BACKEND_SERVICE
: o serviço de back-end que está a atualizarREGION
: se aplicável, a região do serviço de back-end que está a atualizarCONNECTION_TIMEOUT_SECS
: o número de segundos a aguardar antes de as ligações existentes a instâncias ou pontos finais serem terminadas, entre0
e3600
segundos, inclusive. Uma definição de0
desativa a drenagem da ligação. O tempo limite de drenagem da ligação aplica-se a todos os back-ends do serviço de back-end.Também pode usar o comando
gcloud compute backend-services edit
para atualizar um serviço de back-end existente.
API
Para ativar a drenagem de ligações na API ao criar ou atualizar uma instância ou um ponto final, faça um pedido ao URI da API respetivo para incluir o campo connectionDraining
no corpo do pedido. Os exemplos seguintes
demonstram como definir esse atributo editando um serviço de back-end
existente. Para obter informações sobre outros atributos obrigatórios, consulte a documentação de cada equilibrador de carga.
Para um balanceador de carga regional existente:
PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/backendServices { "name": "BACKEND_SERVICE", "connectionDraining": { "drainingTimeoutSec": CONNECTION_TIMEOUT_SECS } }
Substitua o seguinte:
PROJECT_ID
: o ID do projeto que contém o balanceador de carga ou a implementação do Cloud Service MeshBACKEND_SERVICE
: o serviço de back-end usado pelo balanceador de carga ou pela implementação do Cloud Service MeshCONNECTION_TIMEOUT_SECS
: o número de segundos a aguardar antes de as instâncias ou os pontos finais serem removidos do grupo de instâncias ou do NEG, entre 0 e 3600 segundos, inclusive. Esta duração do limite de tempo aplica-se a todos os grupos de instâncias ou NEGs referenciados pelo serviço de back-end.
O que se segue?
Para obter informações gerais sobre os serviços de back-end, consulte a vista geral dos serviços de back-end.