Pools de destino

Um recurso de Pool de destino define um grupo de instâncias que receberá o tráfego das regras de encaminhamento. Quando uma regra de encaminhamento direciona o tráfego para um pool de destino, o Google Compute Engine seleciona uma instância desses pools com base em um hash do IP e da porta de origem e do IP e da porta de destino. Consulte Algoritmo de distribuição de carga para saber mais sobre como o tráfego é distribuído para instâncias.

Os pools de destino só podem ser usados com regras de encaminhamento que lidem com tráfego TCP e UDP. Para todos os outros protocolos, crie uma instância de destino. Crie um pool de destino para usá-lo com uma regra de encaminhamento. Cada projeto pode ter até 50 pools de destino. Um pool de destino só pode ter uma verificação de integridade. O balanceamento de carga de rede só oferece suporte a httpHealthChecks.

O balanceamento de carga de rede é compatível com o Autoescalador do Compute Engine. Isso permite que os usuários realizem escalonamento automático nos grupos de instâncias de um pool de destino com base no uso da CPU ou em métricas personalizadas do Stackdriver Monitoring. Para mais informações, consulte Escalonamento com base em balanceamento de carga de rede.

Propriedades do pool de destino

Um pool de destino é composto das seguintes propriedades:

name
[Obrigatório] O nome deste pool de destino. O nome deve ser único neste projeto, com 1 a 63 caracteres no total e corresponder à expressão regular: [a-z]([-a-z0-9]*[a-z0-9])?, o que significa que o primeiro caractere deve ser uma letra minúscula e todos os outros caracteres seguintes devem ser um traço, uma letra minúscula ou um dígito, exceto o último caractere, que não pode ser um traço.
description
[Opcional] Uma descrição definida pelo usuário deste pool de destino.
region

[Obrigatório] O URL totalmente qualificado da região onde esse pool de destino deve residir. Deve ser a mesma região onde as instâncias desejadas residirão. Por exemplo:

"region" : "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]"
healthChecks[ ]

[Opcional] Uma lista opcional de verificações de integridade para este pool de destino. Apenas uma verificação de integridade pode ser vinculada a um determinado pool de destino. Consulte Verificação de integridade para mais informações.

instances[ ]

[Obrigatório] Uma lista de URLs de instância que devem lidar com o tráfego para este pool de destino. Todas as instâncias devem residir na mesma região do pool de destino, mas as instâncias podem pertencer a diferentes zonas dentro de uma única região. Por exemplo:

"instances" : [
  "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE]",
  "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE-2]"
]

sessionAffinity

[Opcional] Controla o método usado para selecionar uma instância de máquina virtual de back-end. Você só pode definir esse valor durante a criação do pool de destino. Uma vez definido, ele não pode ser modificado. O método de hash seleciona um back-end com base em um subconjunto dos 5 valores a seguir:

  • IP de origem/destino
  • Porta de origem/destino
  • Protocolo de camada 4 (TCP, UDP)

Os possíveis hashes são:

NONE (ou seja, nenhum hash especificado) (padrão)
Hash de 5 tuplas, que usa os IPs de origem e destino, as portas de origem e destino e o protocolo. Cada nova conexão pode acabar em qualquer instância, mas todo o tráfego para uma determinada conexão permanecerá na mesma instância, caso ela continue íntegra.
CLIENT_IP_PROTO
Hash de 3 tuplas, que usa os IPs de origem e destino e o protocolo. Todas as conexões de um cliente acabarão na mesma instância, desde que usem o mesmo protocolo e a instância permaneça íntegra.
CLIENT_IP
Hash de 2 tuplas, que usa os IPs de origem e destino. Todas as conexões de um cliente acabarão na mesma instância, independentemente do protocolo, desde que a instância permaneça íntegra.

O hash de 5 tuplas proporciona uma boa distribuição do tráfego em muitas máquinas virtuais. No entanto, uma segunda sessão do mesmo cliente pode chegar a uma instância diferente porque a porta de origem pode mudar. Se você quiser que todas as sessões do mesmo cliente cheguem ao mesmo back-end, desde que ele permaneça íntegro, é possível especificar as opções CLIENT_IP_PROTO ou CLIENT_IP.

Em geral, se você selecionar o método de 3 ou 2 tuplas, ele oferecerá uma afinidade de sessão melhor do que o método padrão de 5 tuplas, mas o tráfego em geral poderá não ser distribuído de forma tão uniforme.

Pacotes UDP fragmentados: se você está fazendo balanceamento de carga de tráfego UDP que provavelmente será fragmentado, defina a afinidade da sessão como CLIENT_IP_PROTO ou CLIENT_IP. Não use NONE (hash de 5 tuplas). Isso ocorre porque os fragmentos UDP, além do primeiro, não carregam o número da porta e o balanceador de carga poderá descartar os fragmentos sem a porta. Consulte Balanceamento de carga e pacotes UDP fragmentados para mais informações.

Cuidado: se uma grande parte dos seus clientes está atrás de um servidor proxy, você não deve usar CLIENT_IP_PROTO nem CLIENT_IP . Usá-los acabaria enviando todo o tráfego desses clientes para a mesma instância.

backupPool

[Opcional] Um URL totalmente qualificado para outro recurso de pool de destino. Também é necessário definir failoverRatio para usar este recurso. Se a proporção de máquinas virtuais íntegras no pool de destino principal ficar abaixo de failoverRatio, o Google Compute Engine enviará tráfego para o pool de backup. Você só pode fornecer um pool de backup por pool de destino principal. O pool de backup deve estar na mesma região do pool de destino principal. Se a proporção de máquinas virtuais íntegras no pool de destino principal ficar abaixo da taxa de failover configurada, o Google Compute Engine usará as seguintes regras para encaminhar o tráfego.

  1. Se um pool de destino principal é declarado não íntegro (está abaixo da proporção de failover), o tráfego é enviado para as instâncias íntegras no pool de backup.
  2. Se o pool de destino principal é declarado não íntegro, mas não há instâncias íntegras remanescentes no pool de backup, o tráfego é enviado para as instâncias íntegras remanescentes no pool principal.
  3. Se o pool principal não é íntegro e não há instâncias íntegras remanescentes em nenhum dos pools, o tráfego é enviado a todas as instâncias no pool principal para que não seja descartado.
  4. Se o pool principal não contém instâncias e nenhuma das instâncias no pool de backup é íntegra, o tráfego é encaminhado para todas as instâncias do pool de backup para que não seja descartado.

No máximo, apenas um nível de failover é suportado. Por exemplo, se o pool de destino A tem um pool de backup B e o pool de backup B tem um pool de backup C, o tráfego destinado ao pool de destino A só pode chegar ao pool de backup B, e não ao C.

Observação: se você pretende usar pools de destino de backup, defina verificações de integridade, pois os pools de destino de backup não funcionarão corretamente sem que elas estejam ativadas.

failoverRatio

[Opcional] Uma flutuação entre 0.0 e 1.0, que determina quando este pool de destino é declarado não íntegro. Por exemplo, se este valor é definido como .1, este pool de destino é declarado não íntegro se o número de instâncias íntegras é inferior a .1 (10%). Se a taxa de failover é 0.0, pelo menos um back-end deve estar íntegro para que o pool seja considerado íntegro. Se a taxa de failover é 1.0, todas as instâncias devem estar íntegras para que o pool seja considerado íntegro. Esse valor deve ser definido se o campo backupPool for definido.

O diagrama abaixo ajuda a visualizar como a taxa de failover e pool de backup trabalham em conjunto:

Visualização de taxa de failover e pools de backup

Adicionar um pool de destino

Para adicionar um pool de destino usando gcloud compute, utilize o comando target-pools create:

gcloud compute target-pools create TARGET_POOL \
    [--backup-pool BACKUP_POOL] \
    [--description DESCRIPTION] \
    [--failover-ratio FAILOVER_RATIO] \
    [--http-health-check HEALTH_CHECK] \
    [--session-affinity SESSION_AFFINITY; default="NONE"]

Para criar um pool de destino na API, faça uma solicitação HTTP POST para o seguinte URI:

https://www.googleapis.com/v1/compute/projects/[PROJECT_ID]/regions/[REGION]/targetPools

{
  "name": name,
  "instances": [
     "https://www.googleapis.com/v1/compute/project/[PROJECT_ID]/[ZONE]/[ZONE]/instances/[INSTANCE]",
     "https://www.googleapis.com/v1/compute/project/[PROJECT_ID]/[ZONE]/[ZONE]/instances/[INSTANCE-2]",
  ]
}

Adicionar ou remover uma instância de um pool de destino

Para adicionar instâncias a um pool de destino usando gcloud compute, utilize o comando target-pools add-instances:

gcloud compute target-pools add-instances TARGET_POOL \
    --instances INSTANCE,[INSTANCE,...]

Para remover instâncias, use o comando target-pools remove-instances:

gcloud compute target-pools remove-instances TARGET_POOL \
    --instances INSTANCE,[INSTANCE,...]

Na API, envie uma solicitação POST para os seguintes URIs:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/removeInstance
https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/addInstance

O corpo da solicitação deve incluir URIs totalmente qualificados para as instâncias que você quer adicionar ou remover:

{
 "instances": [
    {"instance": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE]"},
    {"instance": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE-2]"}
  ]
}

Para mais informações, consulte a documentação de referência da API relativa aos métodos targetPools.addInstance e targetPools.removeInstance.

Listar pools de destino

Para listar pools de destino existentes usando gcloud compute, utilize o comando target-pools list:

gcloud compute target-pools list

Para ter um resultado mais detalhado, use o comando describe e especifique o nome de um pool:

gcloud compute target-pools describe TARGET_POOL

Na API, envie uma solicitação GET para o seguinte URI:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools

Receber um pool de destino

Para receber informações sobre um único pool de destino usando gcloud compute, utilize o comando target-pools describe:

gcloud compute target-pools describe TARGET_POOL

Na API, envie uma solicitação GET vazia para o seguinte URI:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]

Saber o status de integridade das instâncias

Para verificar o status de integridade atual de uma ou de todas as instâncias no pool de destino, utilize o comando gcloud compute target-pools get-health.

Para verificar a integridade atual de uma ou de todas as instâncias no pool de destino usando gcloud compute, utilize o comando target-pools get-health:

gcloud compute target-pools get-health TARGET_POOL \
    [--fields FIELDS [FIELDS ...]] \
    [--format FORMAT; default="yaml"] \
    [--limit LIMIT] \
    [--raw-links] \
    [--sort-by SORT_BY]

O comando retorna o status de integridade como determinado pela verificação de integridade definida, íntegro ou não íntegro.

Na API, faça uma solicitação HTTP POST para o seguinte URI com a instância especificada no corpo da solicitação:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/getHealth

{
  "instance": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE]"
}

Excluir um pool de destino

Para excluir um pool de destino, primeiro verifique se não há nenhuma regra de encaminhamento que faça referência a ele. Se uma regra estiver fazendo referência ao pool de destino, será preciso excluir essa regra para remover a referência.

Para excluir um pool de destino com gcloud compute, use o comando target-pools delete:

gcloud compute target-pools delete TARGET_POOL

Na API, envie uma solicitação DELETE vazia para o seguinte URI:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]

Adicionar ou remover uma verificação de integridade de um pool de destino

Objetos de verificação de integridade são recursos globais autônomos que podem ser associados ou desassociados de qualquer pool de destino.

Se um pool de destino não tiver nenhuma verificação de integridade associada, o Compute Engine Google tratará todas as instâncias como íntegras e enviará o tráfego para todas as instâncias no pool de destino. No entanto, se você consultar o status de integridade de um pool de destino sem uma verificação de integridade, o status será retornado como unhealthy para indicar que o pool de destino não tem uma verificação de integridade. Recomendamos que os pools de destino tenham verificações de integridade associadas para ajudar a gerenciar as instâncias.

Para adicionar uma verificação de integridade a um pool de destino com gcloud compute, use o comando target-pools add-health-checks:

gcloud compute target-pools add-health-checks TARGET_POOL \
    --http-health-check HEALTH_CHECK

Para remover uma verificação de integridade, use o comando target-pools remove-health-checks:

gcloud compute target-pools remove-health-checks TARGET_POOL \
  --http-health-check HEALTH_CHECK

Para associar ou desassociar uma verificação de integridade usando a API, faça uma solicitação HTTP POST aos URIs apropriados:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/removeHealthCheck
https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/addHealthCheck

O corpo da solicitação precisa conter a verificação de integridade a ser associada ou dissociada:

{
  "healthCheck": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/HEALTH_CHECK"
}

Para saber mais, consulte a documentação de referência da API relativa a targetPools.addHealthCheck e targetPools.removeHealthCheck.

Adicionar ou remover um pool de destino de backup

Ao criar um pool de destino, você pode optar por aplicar um pool de destino de backup que recebe tráfego se o pool de destino principal se tornar não íntegro.

Se você nunca configurou um pool de destino de backup, configure também as verificações de integridade para que o recurso funcione corretamente.

Para atualizar o recurso de um pool de backup com gcloud compute, use o comando target-pools set-backup:

gcloud compute target-pools set-backup TARGET_POOL \
    --backup-pool BACKUP_POOL \
    --failover-ratio FAILOVER_RATIO

Para fazer uma solicitação a fim de atualizar ou remover um pool de backup com a API, envie uma solicitação POST para o seguinte URI:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/setBackup?failoverRatio=FAILOVER

{
  "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/BACKUP_POOL"
}

Se você definir um destino vazio ou não definir uma taxa de failover, o comportamento do pool de backup será desativado para este pool de destino.

Para mais informações, consulte a documentação de referência da API relativa a targetPools.setBackup.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine