Configurar failover para balanceadores de carga de rede de passagem interna

Neste guia, há um exemplo que ensina a configurar o failover para um balanceador de carga de rede interno do Google Cloud. Antes de seguir este guia, conheça bem os seguintes tópicos:

Permissões

Para seguir este guia, você precisa criar instâncias e modificar uma rede em um projeto. É necessário ser proprietário ou editor de um projeto ou ter todos os papéis do IAM do Compute Engine a seguir:

Tarefa Papel necessário
Criar componentes do balanceador de carga, sub-redes e redes Administrador de rede
Adicionar e remover regras de firewall Administrador de segurança
Criar instâncias Administrador da instância do Compute

Para mais informações, consulte estes guias:

Instalação

Neste guia, mostramos como configurar e testar um balanceador de carga de rede de passagem interna que usa failover. Nas etapas desta seção, você fará as configurações do seguinte:

  1. Uma amostra de rede VPC com sub-redes personalizadas
  2. Regras de firewall que permitem conexões de entrada com VMs de back-end
  3. VMs de back-end:
    • Um back-end principal em um grupo de instâncias não gerenciadas na zona us-west1-a
    • Um back-end de failover em um grupo de instâncias não gerenciadas na zona us-west1-c
  4. Uma VM cliente para testar conexões e verificar o comportamento do failover
  5. Os componentes do balanceador de carga de rede de passagem interna a seguir:
    • uma verificação de integridade do serviço de back-end
    • Um serviço de back-end interno na região us-west1 para gerenciar a distribuição de conexões entre as VMs de back-end
    • Uma regra de encaminhamento interna e um endereço IP interno para o front-end do balanceador de carga

A arquitetura deste exemplo é a seguinte:

Exemplo de failover simples para um balanceador de carga de rede de passagem interna.
Exemplo simples de failover para um balanceador de carga de rede de passagem interna (clique para ampliar).

Como configurar uma rede, região e sub-rede

Neste exemplo, usamos a rede VPC, a região e a sub-rede a seguir:

  • Rede: uma rede VPC de modo personalizado denominada lb-network.

  • Região: a região é us-west1.

  • Sub-rede: a sub-rede, lb-subnet, usa o intervalo de IP 10.1.2.0/24.

Para criar o exemplo de rede e sub-rede, siga estas etapas.

Console

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Clique em Criar rede VPC.

  3. Informe um Nome de lb-network.

  4. Na seção Sub-redes:

    • Defina o Modo de criação de sub-rede como Personalizado.
    • Na seção Nova sub-rede, insira as informações a seguir:
      • Name: lb-subnet
      • Região: us-west1
      • Intervalo de endereços IP: 10.1.2.0/24
      • Clique em Concluído.
  5. Clique em Criar.

gcloud

  1. Crie a rede VPC personalizada:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Crie uma sub-rede na rede lb-network, região us-west1:

    gcloud compute networks subnets create lb-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

API

Faça uma solicitação POST ao método networks.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks

{
 "routingConfig": {
   "routingMode": "REGIONAL"
 },
 "name": "lb-network",
 "autoCreateSubnetworks": false
}

Faça uma solicitação POST ao método subnetworks.insert. Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks

{
 "name": "lb-subnet",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "ipCidrRange": "10.1.2.0/24",
 "privateIpGoogleAccess": false
}

Como configurar regras de firewall

Este exemplo usa as seguintes regras de firewall:

  • fw-allow-lb-subnet: uma regra de entrada, aplicável a todos os destinos na rede VPC, permitindo tráfego de origens no intervalo 10.1.2.0/24. Essa regra permite tráfego de entrada de qualquer origem em lb-subnet para as instâncias (VMs) submetidas a balanceamento de carga.

  • fw-allow-ssh: uma regra de entrada aplicada às instâncias cuja carga está sendo balanceada, que autoriza qualquer endereço a estabelecer conectividade SSH de entrada pela porta TCP 22. É possível escolher um intervalo de IP de origem mais restritivo nessa regra. Por exemplo, especifique os intervalos de IP dos sistemas em que você planeja iniciar sessões SSH. Neste exemplo, usamos a tag de destino allow-ssh para identificar as VMs às quais a regra de firewall se aplica.

  • fw-allow-health-check: uma regra de entrada, aplicável às instâncias cuja carga está sendo balanceada, que permite o tráfego dos sistemas de verificação de integridade do Google Cloud (130.211.0.0/22 e 35.191.0.0/16). Este exemplo usa a tag de destino allow-health-check para identificar as instâncias às quais ela será aplicada.

Sem essas regras de firewall, a regra padrão de negação de entrada bloqueará o tráfego que chega para as instâncias de back-end.

Console

  1. No Console do Google Cloud, acesse a página políticas de Firewall.

    Acesse as políticas de firewall

  2. Clique em Criar regra de firewall e insira as seguintes informações para criar a regra que permita o tráfego de sub-rede:

    • Name: fw-allow-lb-subnet
    • Rede: lb-network
    • Prioridade: 1000
    • Direção do tráfego: entrada
    • Ação se houver correspondência: permitir
    • Destinos: todas as instâncias na rede
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 10.1.2.0/24
    • Protocolos e portas: permitir todos
  3. Clique em Criar.

  4. Clique em Criar regra de firewall novamente para criar a regra e permitir conexões SSH de entrada:

    • Name: fw-allow-ssh
    • Rede: lb-network
    • Prioridade: 1000
    • Direção do tráfego: entrada
    • Ação se houver correspondência: permitir
    • Destinos: tags de destino especificadas
    • Tags de meta: allow-ssh
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 0.0.0.0/0
    • Protocolos e portas: escolha Protocolos e portas especificados e digite: tcp:22
  5. Clique em Criar.

  6. Clique em Criar regra de firewall pela terceira vez para criar uma regra que permita as verificações de integridade do Google Cloud:

    • Name: fw-allow-health-check
    • Rede: lb-network
    • Prioridade: 1000
    • Direção do tráfego: entrada
    • Ação se houver correspondência: permitir
    • Destinos: tags de destino especificadas
    • Tags de meta: allow-health-check
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 130.211.0.0/22 e 35.191.0.0/16
    • Protocolos e portas: permitir todos
  7. Clique em Criar.

gcloud

  1. Crie a regra de firewall fw-allow-lb-subnet para permitir a comunicação a partir da sub-rede:

    gcloud compute firewall-rules create fw-allow-lb-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. Crie a regra de firewall fw-allow-ssh que permita a conectividade SSH para VMs com a tag de rede allow-ssh. Se você omitir source-ranges, o Google Cloud interpretará que a regra autoriza a conexão proveniente de qualquer origem.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. Crie a regra fw-allow-health-check para permitir verificações de integridade do Google Cloud.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    

API

Crie a regra de firewall fw-allow-lb-subnet fazendo uma solicitação POST ao método firewalls.insert. Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-lb-subnet",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "10.1.2.0/24"
 ],
 "allowed": [
   {
     "IPProtocol": "tcp"
   },
   {
     "IPProtocol": "udp"
   },
   {
     "IPProtocol": "icmp"
   }
 ],
 "direction": "INGRESS",
 "logConfig": {
   "enable": false
 },
 "disabled": false
}

Crie a regra de firewall fw-allow-ssh fazendo uma solicitação POST ao método firewalls.insert. Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-ssh",
      "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "0.0.0.0/0"
 ],
 "targetTags": [
   "allow-ssh"
 ],
 "allowed": [
  {
    "IPProtocol": "tcp",
    "ports": [
      "22"
    ]
  }
 ],
"direction": "INGRESS",
"logConfig": {
  "enable": false
},
"disabled": false
}

Crie a regra de firewall fw-allow-health-check fazendo uma solicitação POST ao método firewalls.insert. Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-health-check",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "130.211.0.0/22",
   "35.191.0.0/16"
 ],
 "targetTags": [
   "allow-health-check"
 ],
 "allowed": [
   {
     "IPProtocol": "tcp"
   },
   {
     "IPProtocol": "udp"
   },
   {
     "IPProtocol": "icmp"
   }
 ],
 "direction": "INGRESS",
 "logConfig": {
   "enable": false
 },
 "disabled": false
}

Como criar VMs de back-end e grupos de instâncias

Nesta etapa, você criará as VMs de back-end e os grupos de instâncias não gerenciadas:

  • O grupo de instâncias ig-a em us-west1-a é um back-end principal com duas VMs:
    • vm-a1
    • vm-a2
  • O grupo de instâncias ig-c em us-west1-c é um back-end de failover com duas VMs:
    • vm-c1
    • vm-c2

Os back-ends primário e de failover são colocados em zonas separadas para facilitar o entendimento das instruções e para processar o failover no caso de uma zona ficar inativa.

Cada VM primária e de backup é configurada para executar um servidor da Web Apache nas portas TCP 80 e 443. Além disso, cada uma delas recebe um endereço IP interno na lb-subnet para acesso do cliente e um endereço IP externo temporário (público) para acesso SSH. Saiba mais sobre como remover endereços IP externos, em Como remover endereços IP externos de VMs de back-end.

Por padrão, o Apache é configurado para ser vinculado a qualquer endereço IP. Os balanceadores de carga de rede de passagem interna entregam pacotes preservando o endereço IP de destino.

Verifique se o software servidor em execução nas VMs primária e de backup faz detecções no endereço IP da regra de encaminhamento interna do balanceador de carga. Se você configurar várias regras de encaminhamento internas, verifique se o software detecta o endereço IP interno associado a cada uma delas. O endereço IP interno da regra de encaminhamento é o endereço IP de destino de um pacote entregue a uma VM de back-end por um balanceador de carga de rede de passagem interno.

Para simplificar as instruções, todas as VMs primárias e de backup executam o Debian GNU/Linux 10.

Console

Criar VMs de back-end

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar instâncias de VM

  2. Repita as etapas a seguir para criar quatro VMs. Use estas combinações de nome e zona.

    • Nome: vm-a1, zona: us-west1-a
    • Nome: vm-a2, zona: us-west1-a
    • Nome: vm-c1, zona: us-west1-c
    • Nome: vm-c2, zona: us-west1-c
  3. Clique em Criar instância.

  4. Defina o Nome como indicado na etapa 2.

  5. Em Região, escolha us-west1 e escolha uma Zona, como indicado na etapa 2.

  6. Na seção Disco de inicialização, verifique se a imagem selecionada é Debian GNU/Linux 10 (buster). Clique em Escolher para alterar a imagem, se necessário.

  7. Clique em Opções avançadas.

  8. Clique em Rede e configure os seguintes campos:

    1. Em Tags de rede, insira allow-health-check e allow-ssh.
    2. Em Interfaces de rede, selecione o seguinte:
      • Rede: lb-network
      • Sub-rede: lb-subnet
  9. Clique em Gerenciamento. Insira o script a seguir no campo Script de inicialização. que é o mesmo para as quatro VMs:

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2
    
  10. Clique em Criar.

Criar grupos de instâncias

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Repita as etapas a seguir para criar dois grupos de instâncias não gerenciadas com duas VMs cada. Use estas combinações.

    • Grupo de instâncias: ig-a, zona: us-west1-a, VMs: vm-a1 e vm-a2
    • Grupo de instâncias: ig-c, zona: us-west1-c, VMs: vm-c1 e vm-c2
  3. Clique em Criar grupo de instâncias.

  4. Clique em Novo grupo de instâncias não gerenciadas.

  5. Defina o Nome como indicado na etapa 2.

  6. Na seção Local, escolha us-west1 como Região e escolha uma Zona, conforme indicado na etapa 2.

  7. Em Rede, insira lb-network.

  8. Em Sub-rede, insira lb-subnet.

  9. Na seção Instâncias de VMs, adicione as VMs como indicado na etapa 2.

  10. Clique em Criar.

gcloud

  1. Para criar quatro VMs, execute o comando a seguir quatro vezes, usando as quatro combinações de VM_NAME e ZONE abaixo. O conteúdo do script é o mesmo para as quatro VMs.

    • VM_NAME de vm-a1 e ZONE de us-west1-a
    • VM_NAME de vm-a2 e ZONE de us-west1-a
    • VM_NAME de vm-c1 e ZONE de us-west1-c
    • VM_NAME de vm-c2 e ZONE de us-west1-c
    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
          apt-get update
          apt-get install apache2 -y
          a2ensite default-ssl
          a2enmod ssl
          vm_hostname="$(curl -H "Metadata-Flavor:Google" \
          http://metadata.google.internal/computeMetadata/v1/instance/name)"
          echo "Page served from: $vm_hostname" | \
          tee /var/www/html/index.html
          systemctl restart apache2'
    
  2. Crie os dois grupos de instâncias não gerenciadas em cada zona:

    gcloud compute instance-groups unmanaged create ig-a \
        --zone=us-west1-a
    gcloud compute instance-groups unmanaged create ig-c \
        --zone=us-west1-c
    
  3. Adicione as VMs aos grupos de instâncias apropriados:

    gcloud compute instance-groups unmanaged add-instances ig-a \
        --zone=us-west1-a \
        --instances=vm-a1,vm-a2
    gcloud compute instance-groups unmanaged add-instances ig-c \
        --zone=us-west1-c \
        --instances=vm-c1,vm-c2
    

API

Crie quatro VMs de back-end fazendo quatro solicitações POST ao método instances.insert.

Para as quatro VMs, use os seguintes nomes e zonas de VM:

  • VM_NAME de vm-a1 e ZONE de us-west1-a
  • VM_NAME de vm-a2 e ZONE de us-west1-a
  • VM_NAME de vm-c1 e ZONE de us-west1-c
  • VM_NAME de vm-c2 e ZONE de us-west1-c

Substitua:

  • PROJECT_ID: ID do projeto;
  • ZONE: a zona da instância;
  • DEBIAN_IMAGE_NAME: o nome da imagem do Debian da instância. O DEBIAN_IMAGE_NAME atual pode ser obtido executando o seguinte comando gcloud:

    gcloud compute images list \
     --filter="family=debian-10"
    

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
 "name": "VM_NAME",
 "tags": {
   "items": [
     "allow-health-check",
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "VM_NAME",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
       "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "metadata": {
   "items": [
     {
       "key": "startup-script",
       "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2"
     }
   ]
 },
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

Crie dois grupos de instâncias fazendo uma solicitação POST ao método instanceGroups.insert. Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups

{
 "name": "ig-a",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups

{
 "name": "ig-c",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

Adicione instâncias a cada grupo de instâncias fazendo uma solicitação POST para o método instanceGroups.addInstances. Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2"
   }
 ]
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2"
   }
 ]
}

Como criar uma VM cliente

No exemplo, é criada uma VM de cliente (vm-client) na mesma região do balanceador de carga. O cliente é usado para demonstrar o funcionamento do failover.

Console

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar instâncias de VM

  2. Clique em Criar instância.

  3. Defina o Nome como vm-client.

  4. Defina a Zona como us-west1-a.

  5. Clique em Opções avançadas.

  6. Clique em Rede e configure os seguintes campos:

    1. Em Tags de rede, insira allow-ssh.
    2. Em Interfaces de rede, selecione o seguinte:
      • Rede: lb-network
      • Sub-rede: lb-subnet
  7. Clique em Criar.

gcloud

A VM cliente pode estar em qualquer zona na mesma região que o balanceador de carga e usar qualquer sub-rede nessa região. No exemplo, o cliente está na zona us-west1-a e usa a mesma sub-rede das VMs principal e de backup.

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

Faça uma solicitação POST ao método instances.insert.

Substitua:

  • PROJECT_ID: ID do projeto
  • DEBIAN_IMAGE_NAME: o nome da imagem do Debian da instância. O DEBIAN_IMAGE_NAME atual pode ser obtido executando o seguinte comando gcloud:

    gcloud compute images list \
     --filter="family=debian-10"
    

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances

{
 "name": "vm-client",
 "tags": {
   "items": [
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "vm-client",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
       "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

Como configurar componentes do balanceador de carga

Estas etapas configuram todos os componentes do balanceador de carga de rede de passagem interno, começando com verificação de integridade e serviço de back-end e, em seguida, componentes de front-end:

  • Verificação de integridade: no exemplo, é usada uma verificação de integridade de HTTP que apenas busca uma resposta HTTP 200 (OK). Para mais informações, consulte a seção sobre verificações de integridade da visão geral do balanceador de carga de rede interno de passagem.

  • Serviço de back-end: como o exemplo transmite tráfego HTTP por meio do balanceador de carga interno, a configuração especifica TCP, e não UDP. Para ilustrar o failover, esse serviço de back-end tem uma proporção de failover de 0.75.

  • Regra de encaminhamento: neste exemplo, criamos uma regra de encaminhamento interna.

  • Endereço IP interno: neste exemplo, especificamos um endereço IP interno, 10.1.2.99, ao criarmos a regra de encaminhamento.

Console

Iniciar a configuração

  1. No console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Clique em Criar balanceador de carga.
  3. Em Tipo de balanceador de carga, selecione Balanceador de carga de rede (TCP/UDP/SSL) e clique em Próxima.
  4. Em Proxy ou passagem, selecione Balanceador de carga de passagem e clique em Próxima.
  5. Em Voltado ao público ou interno, selecione Interno e clique em Próxima.
  6. Clique em Configurar.

Configuração básica

  1. Defina o Nome como be-ilb.
  2. Defina a região como us-west1.
  3. Defina Rede como lb-network.
  4. Clique em Configuração de back-end e faça as alterações a seguir:
    1. Em Back-ends, na seção Novo item, selecione o grupo de instâncias ig-a. Certifique-se de que a opção Usar este grupo de instâncias como grupo de failover para backup não esteja marcada. Clique em Concluir.
    2. Clique em Adicionar back-end. Na seção Novo item que é exibida, selecione o grupo de instâncias ig-c. Marque a opção Usar este grupo de instâncias como grupo de failover para backup. Clique em Concluído.
    3. Em Verificação de integridade, escolha Criar outra verificação de integridade, insira as informações a seguir e clique em Salvar e continuar:
      • Name: hc-http-80
      • Protocolo: HTTP
      • Porta: 80
      • Protocolo de proxy: NONE
      • Caminho da solicitação: / Ao usar o Console do Google Cloud para criar o balanceador de carga, a verificação de integridade será global. Se você quiser criar uma verificação de integridade regional, use gcloud ou a API.
    4. Clique em Configurações avançadas. Na seção Política de failover, configure os itens a seguir:
      • Proporção de failover: 0.75
      • Marque a opção Ativar a redução da conexão em failover.
    5. Verifique se há uma marca de seleção azul ao lado de Configuração do back-end antes de continuar. Revise esta etapa se não houver marca.
  5. Clique em Configuração de front-end. Na seção Novo IP de front-end e porta, faça as seguintes alterações:
    1. Nome: fr-ilb
    2. Sub-rede: ilb-subnet
    3. Em IP interno, escolha Reservar um endereço IP interno estático, insira as informações a seguir e clique em Reservar:
      • Nome: ip-ilb
      • Endereço IP estático: Quero escolher
      • Endereço IP personalizado: 10.1.2.99
    4. Portas: escolha Individual e insira 80 no Número da porta.
    5. Verifique se há uma marca de seleção azul ao lado da Configuração de front-end antes de continuar. Revise esta etapa se não houver marca.
  6. Clique em Analisar e finalizar. Verifique suas configurações.
  7. Clique em Criar.

gcloud

  1. Crie uma nova verificação de integridade HTTP para testar a conectividade TCP com as VMs na porta 80.

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. Crie o serviço de back-end do tráfego HTTP:

    gcloud compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1 \
        --failover-ratio 0.75
    
  3. Adicione o back-end primário ao serviço de back-end:

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  4. Adicione o back-end de failover ao serviço de back-end:

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-c \
        --instance-group-zone=us-west1-c \
        --failover
    
  5. Crie uma regra de encaminhamento do serviço de back-end. Ao fazer isso, especifique 10.1.2.99 como IP interno na sub-rede.

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

Crie a verificação de integridade fazendo uma solicitação POST ao método regionHealthChecks.insert. Substitua PROJECT_ID pelo ID do projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks

{
"name": "hc-http-80",
"type": "HTTP",
"httpHealthCheck": {
  "port": 80
}
}

Crie um serviço de back-end regional fazendo uma solicitação POST ao método regionBackendServices.insert. Substitua PROJECT_ID pelo ID do projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices

{
"name": "be-ilb",
"backends": [
  {
    "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
    "balancingMode": "CONNECTION"
  },
  {
    "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c",
    "balancingMode": "CONNECTION"
    "failover": true
  }
],
"failoverPolicy": {
  "failoverRatio": 0.75
},
"healthChecks": [
  "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
],
"loadBalancingScheme": "INTERNAL",
"connectionDraining": {
  "drainingTimeoutSec": 0
 }
}

Crie a regra de firewall fazendo uma solicitação POST ao método forwardingRules.insert. Substitua PROJECT_ID pelo ID do projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
  "80", "8008", "8080", "8088"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
"networkTier": "PREMIUM"
}

Teste

Nos testes a seguir, veja como validar a configuração do balanceador de carga e conheça o comportamento esperado dele.

Procedimento de teste do cliente

Este procedimento interage com o balanceador de carga da VM cliente. Use-o para concluir os outros testes.

  1. Conecte-se à instância da VM cliente.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. Faça uma solicitação da Web para o balanceador de carga usando curl para contatar o endereço IP dele.

    curl http://10.1.2.99
    
  3. Observe o texto retornado pelo comando curl. O nome da VM de back-end que gera a resposta é exibido nesse texto. Por exemplo: Page served from: vm-a1.

Como testar o estado inicial

Depois de configurar o exemplo de balanceador de carga, todas as quatro VMs de back-end serão íntegras:

  • As duas VMs principais, vm-a1 e vm-a2
  • As duas VMs de backup, vm-c1 e vm-c2

Siga o procedimento de teste do cliente. Repita a segunda etapa algumas vezes. O comportamento esperado é que o tráfego seja exibido pelas duas VMs principais, vm-a1 e vm-a2, porque ambas estão íntegras. Você verá que cada VM principal exibe uma resposta quase que na metade do tempo. Isso acontece porque nenhuma afinidade de sessão foi configurada no balanceador de carga.

Como testar o failover

No teste a seguir, é simulada a falha de vm-a1 para que você veja comportamento do failover.

  1. Conecte-se à VM vm-a1.

    gcloud compute ssh vm-a1 --zone=us-west1-a
    
  2. Interrompa o servidor da Web Apache. Depois de 10 segundos, o Google Cloud considera a VM como não íntegra. A verificação de integridade hc-http-80 que você criou durante a configuração usa o intervalo de verificação padrão de cinco segundos e o limite de não integridade de duas sondagens com falha consecutivas.

    sudo apachectl stop
    
  3. Siga o procedimento de teste do cliente. Repita a segunda etapa algumas vezes. O comportamento esperado é que o tráfego seja exibido pelas duas VMs de backup, vm-c1 e vm-c2. Como apenas uma VM principal (vm-a2) está íntegra, a proporção entre VMs principais íntegras e totais é de 0.5. Esse número é menor que o limite de failover de 0.75. Portanto, o Google Cloud reconfigurou o pool ativo do balanceador de carga para usar as VMs de backup. Você verá cada VM de backup exibir uma resposta quase que na metade do tempo, desde que nenhuma afinidade de sessão tenha sido configurada para o balanceador de carga.

Como testar o failback

No teste a seguir, será reiniciado o servidor Apache em vm-a1 para simular o failback.

  1. Conecte-se à VM vm-a1.

    gcloud compute ssh vm-a1 --zone=us-west1-a
    
  2. Inicie o servidor da Web Apache e aguarde 10 segundos.

    sudo apachectl start
    
  3. Siga o procedimento de teste do cliente. Repita a segunda etapa algumas vezes. O comportamento esperado é que o tráfego seja exibido pelas duas VMs principais, vm-a1 e vm-a2. Quando ambas as VMs principais estão íntegras, a proporção entre as íntegras e totais é de 1.0, superior ao limite de failover de 0.75. Portanto, o Google Cloud configurou o pool ativo para voltar usar as VMs principais.

Como adicionar mais VMs de back-end

Nesta seção, mais VMs primárias e de backup são adicionadas ao balanceador de carga para ampliar o exemplo de configuração. Isso é feito ao criar mais dois grupos de instâncias de back-end para demonstrar que é possível distribuir VMs primárias e de backup entre várias zonas na mesma região:

  • Um terceiro grupo de instâncias, ig-d em us-west1-c, é exibido como um back-end principal com duas VMs:
    • vm-d1
    • vm-d2
  • Um quarto grupo de instâncias, ig-b em us-west1-a, é exibido como um back-end de failover com duas VMs:
    • vm-b1
    • vm-b2

A arquitetura modificada deste exemplo é assim:

Failover do balanceador de carga de rede de passagem interna de várias zonas.
Failover de balanceador de carga de rede de passagem interno de várias zonas (clique para ampliar)
.

Criar mais VMs e grupos de instâncias

Siga estas etapas para criar mais VMs primárias e de backup, além dos grupos de instâncias não gerenciadas correspondentes.

Console

Criar VMs de back-end

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar instâncias de VM

  2. Repita as etapas a seguir para criar quatro VMs. Use estas combinações de nome e zona.

    • Nome: vm-b1, zona: us-west1-a
    • Nome: vm-b2, zona: us-west1-a
    • Nome: vm-d1, zona: us-west1-c
    • Nome: vm-d2, zona: us-west1-c
  3. Clique em Criar instância.

  4. Defina o Nome como indicado na etapa 2.

  5. Em Região, escolha us-west1 e escolha uma Zona, como indicado na etapa 2.

  6. Na seção Disco de inicialização, verifique se a imagem selecionada é Debian GNU/Linux 10 (buster). Clique em Escolher para alterar a imagem, se necessário.

  7. Clique em Opções avançadas e faça as seguintes alterações:

    • Clique em Rede e adicione as seguintes tags de rede: allow-ssh e allow-health-check.
    • Clique no botão de editar em Interfaces de rede e faça as alterações a seguir. Depois, clique em Concluído:
      • Rede: lb-network
      • Sub-rede: lb-subnet
      • IP interno primário: temporário (automático)
      • IP externo: temporário
    • Clique em Gerenciamento. No campo Script de inicialização, copie e cole o conteúdo do script a seguir, que é o mesmo para as quatro VMs:

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
  8. Clique em Criar.

Criar grupos de instâncias

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Repita as etapas a seguir para criar dois grupos de instâncias não gerenciadas com duas VMs cada. Use estas combinações.

    • Grupo de instâncias: ig-b, zona: us-west1-a, VMs: vm-b1 e vm-b2
    • Grupo de instâncias: ig-d, zona: us-west1-c, VMs: vm-d1 e vm-d2
  3. Clique em Criar grupo de instâncias.

  4. Clique em Novo grupo de instâncias não gerenciadas.

  5. Defina o Nome como indicado na etapa 2.

  6. Na seção Local, escolha us-west1 como Região e escolha uma Zona, conforme indicado na etapa 2.

  7. Em Rede, insira lb-network.

  8. Em Sub-rede, insira lb-subnet.

  9. Na seção Instâncias de VMs, adicione as VMs como indicado na etapa 2.

  10. Clique em Criar.

gcloud

  1. Para criar quatro VMs, execute o comando a seguir quatro vezes, usando as quatro combinações de VM_NAME e ZONE abaixo. O conteúdo do script é o mesmo para as quatro VMs.

    • VM_NAME de vm-b1 e ZONE de us-west1-a
    • VM_NAME de vm-b2 e ZONE de us-west1-a
    • VM_NAME de vm-d1 e ZONE de us-west1-c
    • VM_NAME de vm-d2 e ZONE de us-west1-c
    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
          apt-get update
          apt-get install apache2 -y
          a2ensite default-ssl
          a2enmod ssl
          vm_hostname="$(curl -H "Metadata-Flavor:Google" \
          http://metadata.google.internal/computeMetadata/v1/instance/name)"
          echo "Page served from: $vm_hostname" | \
          tee /var/www/html/index.html
          systemctl restart apache2'
    
  2. Crie os dois grupos de instâncias não gerenciadas em cada zona:

    gcloud compute instance-groups unmanaged create ig-b \
        --zone=us-west1-a
    gcloud compute instance-groups unmanaged create ig-d \
        --zone=us-west1-c
    
  3. Adicione as VMs aos grupos de instâncias apropriados:

    gcloud compute instance-groups unmanaged add-instances ig-b \
        --zone=us-west1-a \
        --instances=vm-b1,vm-b2
    gcloud compute instance-groups unmanaged add-instances ig-d \
        --zone=us-west1-c \
        --instances=vm-d1,vm-d2
    

API

Crie quatro VMs de back-end fazendo quatro solicitações POST ao método instances.insert.

Para as quatro VMs, use os seguintes nomes e zonas de VM:

  • VM_NAME de vm-b1 e ZONE de us-west1-a
  • VM_NAME de vm-b2 e ZONE de us-west1-a
  • VM_NAME de vm-d1 e ZONE de us-west1-c
  • VM_NAME de vm-d2 e ZONE de us-west1-c

Substitua:

  • PROJECT_ID: ID do projeto
  • DEBIAN_IMAGE_NAME: o nome da imagem do Debian da instância. O DEBIAN_IMAGE_NAME atual pode ser obtido executando o seguinte comando gcloud:

    gcloud compute images list \
     --filter="family=debian-10"
    

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
 "name": "VM_NAME",
 "tags": {
   "items": [
     "allow-health-check",
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "VM_NAME",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
       "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "metadata": {
   "items": [
     {
       "key": "startup-script",
       "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2"
     }
   ]
 },
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

Crie dois grupos de instâncias fazendo uma solicitação POST ao método instanceGroups.insert. Substitua PROJECT_ID pelo ID do projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups

{
 "name": "ig-b",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups

{
 "name": "ig-d",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

Adicione instâncias a cada grupo de instâncias fazendo uma solicitação POST para o método instanceGroups.addInstances. Substitua PROJECT_ID pelo ID do projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-b/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-b1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-b2"
   }
 ]
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-d/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-d1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-d2"
   }
 ]
}

Como adicionar um back-end primário

Use este procedimento como um modelo para adicionar um grupo de instâncias não gerenciadas a um serviço de back-end do balanceador de carga de rede atual como back-end principal. No exemplo de configuração, o procedimento mostra como adicionar o grupo de instâncias ig-d como um back-end principal ao balanceador de carga be-ilb.

Console

  1. No Console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Na guia Balanceadores de carga, clique no nome de um balanceador de carga TCP ou UDP interno existente (be-ilb no exemplo).

  3. Clique em Editar .

  4. Em Configuração de back-end, clique em Adicionar back-end e selecione um grupo de instâncias não gerenciadas (ig-d no exemplo).

  5. Certifique-se de que a opção Usar este grupo de instâncias como grupo de failover para backup não esteja marcada.

  6. Clique em Concluído e em Atualizar.

gcloud

Use o comando gcloud a seguir para adicionar um back-end primário a um serviço de back-end do balanceador de carga de rede interno atual.

gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION

Substitua:

  • BACKEND_SERVICE_NAME: o nome do serviço de back-end do balanceador de carga. No exemplo, use be-ilb;
  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias a ser adicionado como back-end primário. No exemplo, use ig-d;
  • INSTANCE_GROUP_ZONE: a zona em que o grupo de instâncias é definido. No exemplo, use us-west1-c;
  • REGION: a região do balanceador de carga. No exemplo, use us-west1;

API

Adicione um back-end principal a um serviço de back-end existente com o método regionBackendServices.patch.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends":
  [
    {
      "balancingMode": "connection",
      "failover": false,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ]
}

Substitua:

  • PROJECT_ID: ID do projeto
  • REGION: a região do balanceador de carga. No exemplo, use us-west1;
  • BACKEND_SERVICE_NAME: o nome do serviço de back-end do balanceador de carga. No exemplo, use be-ilb;
  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias a ser adicionado como back-end primário. No exemplo, use ig-d;
  • INSTANCE_GROUP_ZONE é a zona em que o grupo de instâncias é definido. No exemplo, use us-west1-c;

Como adicionar um back-end de failover

Use este procedimento como um modelo para adicionar um grupo de instâncias não gerenciadas ao serviço de back-end de um balanceador de carga de rede atual como back-end de failover. No exemplo de configuração, o procedimento mostra como adicionar o grupo de instâncias ig-b como um back-end de failover ao balanceador de carga be-ilb.

Console

  1. No Console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Na guia Balanceadores de carga, clique no nome de um balanceador de carga existente do tipo TCP/UDP (interno) (neste exemplo, be-ilb).

  3. Clique em Editar .

  4. Em Configuração de back-end, clique em Adicionar back-end e selecione um grupo de instâncias não gerenciadas (ig-b no exemplo).

  5. Marque a opção Usar este grupo de instâncias como grupo de failover para backup.

  6. Clique em Concluído e em Atualizar.

gcloud

Use o comando gcloud a seguir para adicionar um back-end de failover a um serviço de back-end do balanceador de carga de rede interno atual.

gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION \
   --failover

Substitua:

  • BACKEND_SERVICE_NAME: o nome do serviço de back-end do balanceador de carga. No exemplo, use be-ilb;
  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias a ser adicionado como back-end primário. No exemplo, use ig-b;
  • INSTANCE_GROUP_ZONE: a zona em que o grupo de instâncias é definido. No exemplo, use us-west1-a;
  • REGION é a região do balanceador de carga. No exemplo, use us-west1;

API

Adicione um back-end de failover a um serviço de back-end existente com o método regionBackendServices.patch.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends": 
  [
    {
      "balancingMode": "connection",
      "failover": true,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ]
}

Substitua:

  • PROJECT_ID: ID do projeto
  • BACKEND_SERVICE_NAME: o nome do serviço de back-end do balanceador de carga. No exemplo, use be-ilb;
  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias a ser adicionado como back-end primário. No exemplo, use ig-b;
  • INSTANCE_GROUP_ZONE: a zona em que o grupo de instâncias é definido. No exemplo, use us-west1-a;
  • REGION: a região do balanceador de carga. No exemplo, use us-west1;

Como converter um back-end primário ou de failover

É possível converter um back-end primário em um de failover ou vice-versa sem precisar remover o grupo de instâncias do serviço de back-end do balanceador de carga de rede interno.

Console

  1. No Console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Na guia Balanceadores de carga, clique no nome de um balanceador de carga existente do tipo TCP/UDP (interno).

  3. Clique em Editar .

  4. Na Configuração de back-end, clique no nome de um dos grupos de instâncias de back-end. Em seguida, faça o seguinte:

    • Para converter o grupo de instâncias em um back-end de failover, marque a opção Usar este grupo de instâncias como grupo de failover para backup.
    • Para converter o grupo de instâncias em um back-end primário, desmarque a opção Usar este grupo de instâncias como grupo de failover para backup.
  5. Clique em Concluído e em Atualizar.

gcloud

Use o comando gcloud a seguir para converter um back-end principal em um back-end de failover:

gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION \
   --failover

Use o comando gcloud a seguir para converter um back-end de failover em um back-end principal:

gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION \
   --no-failover

Substitua:

  • BACKEND_SERVICE_NAME: o nome do serviço de back-end do balanceador de carga
  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias a ser adicionado como back-end primário
  • INSTANCE_GROUP_ZONE: a zona em que o grupo de instâncias é definido
  • REGION: a região do balanceador de carga

API

Converter um back-end principal em um back-over de failover ou vice-versa usando o método regionBackendServices.patch.

Para converter um back-end primário em um de failover:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends": 
  [
    {
      "failover": true,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ]
}

Para converter um back-end de failover em um primário:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends": 
  [
    {
      "failover": false,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ],
}

Substitua:

  • PROJECT_ID: ID do projeto
  • BACKEND_SERVICE_NAME: o nome do serviço de back-end do balanceador de carga
  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias a ser adicionado como back-end primário
  • INSTANCE_GROUP_ZONE: a zona em que o grupo de instâncias é definido
  • REGION: a região do balanceador de carga

Como configurar políticas de failover

Nesta seção, descrevemos como gerenciar uma política de failover de um serviço de back-end do balanceador de carga de rede interno. Uma política de failover consiste no seguinte:

  • Proporção de failover
  • Descarte do tráfego quando todas as VMs de back-end não forem íntegras
  • Redução da conexão em failover

Para mais informações sobre os parâmetros de uma política de failover, consulte:

Como definir uma política de failover

Nas instruções a seguir, descrevemos como definir a política de failover de um balanceador de carga de rede de passagem interna existente.

Console

Para definir uma política de failover usando o Console do Google Cloud, é necessário ter pelo menos um back-end de failover.

  1. No Console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Na guia Balanceadores de carga, clique no nome de um balanceador de carga existente do tipo TCP/UDP (interno).

  3. Clique em Editar .

  4. Verifique se você tem pelo menos um back-end de failover. É preciso que em pelo menos um dos back-ends do balanceador de carga a opção Usar este grupo de instâncias como grupo de failover para backup esteja marcada.

  5. Clique em Configurações avançadas.

    • Em Política de failover, defina a Proporção de failover como um valor entre 0.0 e 1.0, inclusive.
    • Marque a caixa ao lado de Ativar descarte de tráfego se você quiser descartar o tráfego quando todas as VMs ativas e todas as de backup não forem íntegras.
    • Marque a caixa ao lado de Ativar a redução da conexão em failover se você quiser encerrar as conexões atuais rapidamente durante o failover.
  6. Clique em Analisar e finalizar e em Atualizar.

gcloud

Para definir uma política de failover usando a CLI gcloud, atualize o serviço de back-end do balanceador de carga:

gcloud compute backend-services update BACKEND_SERVICE_NAME \
   --region REGION \
   --failover-ratio FAILOVER_RATIO \
   --drop-traffic-if-unhealthy \
   --no-connection-drain-on-failover

Substitua:

  • BACKEND_SERVICE_NAME: o nome do serviço de back-end do balanceador de carga. No exemplo, use be-ilb;
  • REGION: a região do balanceador de carga. No exemplo, use us-west1;
  • FAILOVER_RATIO: a proporção de failover. Os valores possíveis estão entre 0.0 e 1.0, inclusive. No exemplo, use 0.75;
  • --drop-traffic-if-unhealthy instruirá o balanceador de carga a descartar o tráfego quando todas as VMs principais e de backup não estiverem íntegras. Mude esse valor para --no-drop-traffic-if-unhealthy se você quiser distribuir o tráfego entre todas as VMs principais quando todas as VMs de back-end não estiverem íntegras;
  • --no-connection-drain-on-failover instrui o balanceador de carga a encerrar as conexões TCP existentes rapidamente durante o failover. Use --connection-drain-on-failover para ativar a diminuição da conexão durante o failover.

API

Use o método regionBackendServices.patch para definir a política de failover.

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "failoverPolicy":
  {
    "failoverRatio": FAILOVER_RATIO,
    "dropTrafficIfUnhealthy": [true|false],
    "disableConnectionDrainOnFailover": [true|false]
  }
}

Substitua:

  • PROJECT_ID: ID do projeto
  • REGION: a região do balanceador de carga
  • BACKEND_SERVICE_NAME: o nome do serviço de back-end do balanceador de carga
  • FAILOVER_RATIO: a proporção de failover. Os valores possíveis estão entre 0.0 e 1.0, inclusive.
  • Definir dropTrafficIfUnhealthy como true instruirá o balanceador de carga a descartar o tráfego quando todas as VMs principais e de backup não estiverem íntegras. Defina como false se você quiser distribuir o tráfego entre todas as VMs principais quando todas as VMs de back-end não estiverem íntegras;
  • Definir disableConnectionDrainOnFailover como true instruirá o balanceador de carga a encerrar as conexões TCP existentes rapidamente ao fazer um failover. Defina como false para ativar a diminuição da conexão durante o failover.

Como visualizar uma política de failover

As instruções a seguir descrevem como visualizar a política de failover atual de um balanceador de carga de rede de passagem interna.

Console

O console do Google Cloud mostra as configurações de política de failover atuais quando você edita um balanceador de carga de rede de passagem interna. Consulte Como definir uma política de failover para mais instruções.

gcloud

Para listar as configurações da política de failover usando a CLI gcloud, use o seguinte comando: As configurações não definidas em uma política de failover utilizam os valores padrão.

gcloud compute backend-services describe BACKEND_SERVICE_NAME \
   --region REGION \
   --format="get(failoverPolicy)"

Substitua:

  • BACKEND_SERVICE_NAME: o nome do serviço de back-end do balanceador de carga
  • REGION: a região do balanceador de carga

API

Use o método regionBackendServices.get para visualizar a política de failover.

A resposta à solicitação de API mostra a política de failover. Veja um exemplo abaixo.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

Substitua:

  • PROJECT_ID: ID do projeto
  • REGION: a região do balanceador de carga
  • BACKEND_SERVICE_NAME: o nome do serviço de back-end do balanceador de carga
{
...
"failoverPolicy": {
  "disableConnectionDrainOnFailover": false,
  "dropTrafficIfUnhealthy": false,
  "failoverRatio": 0.75
...
}

A seguir