Configurar balanceamento de carga ponderado

Neste guia, fornecemos instruções de como usar um serviço de back-end regional para criar uma implantação ponderada do balanceador de carga de rede de passagem externa para cada instância de máquina virtual (VM).

Neste tutorial, você criará um grupo com três instâncias de VM e atribuirá pesos a cada uma delas. Crie uma verificação de integridade HTTP para relatar pesos da instância de back-end. O balanceamento de carga ponderado é ativado no serviço de back-end com a política do balanceador de carga de região administrativa como WEIGHTED_MAGLEV.

Antes de começar

Criar regras de firewall, rede e sub-redes VPC

Crie uma rede VPC, uma sub-rede e uma entrada que permitam regras de firewall para permitir conexões com as VMs de back-end do seu balanceador de carga.

  1. crie uma rede e uma sub-rede VPC.

    a. Para criar a rede VPC, execute o seguinte comando gcloud compute networks create:

    gcloud compute networks create NETWORK_NAME --subnet-mode custom
    

    b. Neste exemplo, o intervalo de endereços IPv4 principal da sub-rede é 10.10.0.0/24. Para criar a sub-rede, execute o comando gcloud compute networks subnets create:

    gcloud compute networks subnets create SUBNET_NAME \
      --network=NETWORK_NAME \
      --range=10.10.0.0/24 \
      --region=us-central1
    

    Substitua:

    • NETWORK_NAME: o nome da rede VPC que será criada.
    • SUBNET_NAME: o nome da sub-rede a ser criada.
  2. Crie uma regra de firewall de entrada permitida para permitir que os pacotes enviados para as portas TCP 80 e 443 de destino sejam entregues às VMs de back-end. Neste exemplo, a regra de firewall permite conexões de qualquer endereço IP de origem. A regra de firewall se aplica a VMs com a tag de rede network-lb-tag.

    Para criar a regra de firewall, execute o comando gcloud compute firewall-rules create:

    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
       --direction=INGRESS \
       --priority=1000 \
       --network=NETWORK_NAME \
       --action=ALLOW \
       --rules=tcp:80,tcp:443 \
       --source-ranges=0.0.0.0/0 \
       --target-tags=network-lb-tag
    

    Substitua FIREWALL_RULE_NAME pelo nome da regra de firewall a ser criada.

Criar instâncias de VM e atribuir pesos

Crie três instâncias de VM e atribua pesos:

  1. Configure três instâncias de VM de back-end para retornar os pesos no cabeçalho X-Load-Balancing-Endpoint-Weight com respostas HTTP. Para este tutorial, configure uma instância de back-end para informar um peso de zero, uma segunda instância de back-end para informar um peso de 100 e uma terceira instância de back-end para informar um peso de 900.

    Para criar as instâncias, execute o comando gcloud compute instances create:

    gcloud compute instances create instance-0 \
      --zone=us-central1-a \
      --tags=network-lb-tag \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --subnet=SUBNET_NAME \
      --metadata=load-balancing-weight=0,startup-script='#! /bin/bash
      apt-get update
      apt-get install apache2 -y
      ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      lb_weight="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)"
      echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \
      tee /etc/apache2/conf-enabled/headers.conf
      systemctl restart apache2'
    
    gcloud compute instances create instance-100 \
      --zone=us-central1-a \
      --tags=network-lb-tag \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --subnet=SUBNET_NAME \
      --metadata=load-balancing-weight=100,startup-script='#! /bin/bash
      apt-get update
      apt-get install apache2 -y
      ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      lb_weight="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)"
      echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \
      tee /etc/apache2/conf-enabled/headers.conf
      systemctl restart apache2'
    
    gcloud compute instances create instance-900 \
      --zone=us-central1-a \
      --tags=network-lb-tag \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --subnet=SUBNET_NAME \
      --metadata=load-balancing-weight=900,startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://169.254.169.254/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        lb_weight="$(curl -H "Metadata-Flavor:Google" \
        http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)"
        echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \
        tee /etc/apache2/conf-enabled/headers.conf
        systemctl restart apache2'
    

Criar um grupo de instâncias

Neste tutorial, você fornece instruções para criar um grupo de instâncias não gerenciadas contendo todas as três instâncias de VM(instance-0, instance-100 e instance-900).

  • Para criar o grupo de instâncias, execute o comando gcloud compute instance-groups unmanaged create:

    gcloud compute instance-groups unmanaged create INSTANCE_GROUP \
      --zone=us-central1-a
    
    gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \
      --zone=us-central1-a \
      --instances=instance-0,instance-100,instance-900
    

    Substitua INSTANCE_GROUP pelo nome do grupo de instâncias a ser criado.

Crie uma verificação de integridade HTTP.

Neste tutorial, você fornece instruções para criar uma verificação de integridade HTTP para ler a resposta HTTP que contém o peso da VM de back-end.

  • Para criar a verificação de integridade HTTP, execute o comando gcloud compute health-checks create:

    gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \
      --region=us-central1
    

    Substitua HTTP_HEALTH_CHECK_NAME pelo nome da verificação de integridade HTTP a ser criada.

Criar um serviço de back-end

Veja no exemplo a seguir como criar um serviço de back-end externo regional configurado para usar o balanceamento de carga ponderado.

  1. Crie um serviço de back-end com a verificação de integridade HTTP e defina a política do balanceador de carga de localidade como WEIGHTED_MAGLEV.

    • Para criar o serviço de back-end, execute o comando gcloud compute backend-services create:

      gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=external \
        --protocol=tcp \
        --region=us-central1 \
        --health-checks=HTTP_HEALTH_CHECK_NAME \
        --health-checks-region=us-central1 \
        --locality-lb-policy=WEIGHTED_MAGLEV
      

      Substitua BACKEND_SERVICE_NAME pelo nome do serviço de back-end a ser criado.

  2. Adicione o grupo de instâncias principal ao serviço de back-end.

    • Para adicionar o grupo de instâncias, execute o comando gcloud compute backend-services add-backend:

      gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --instance-group=INSTANCE_GROUP \
        --instance-group-zone=us-central1-a \
        --region=us-central1
      
  3. Reservar um endereço IP externo regional para o balanceador de carga.

    • Para reservar um ou mais endereços IP, execute o comando gcloud compute addresses create:

      gcloud compute addresses create ADDRESS_NAME \
       --region us-central1
      

      Substitua ADDRESS_NAME pelo nome do endereço IP a ser criado.

      Use o comando compute addresses describe para ver o resultado: Anote o endereço IP externo estático reservado (IP_ADDRESS).

      gcloud compute addresses describe ADDRESS_NAME
      
  4. Crie uma regra de encaminhamento usando o endereço IP externo regional reservado IP_ADDRESS. Conecte a regra de encaminhamento ao serviço de back-end.

    • Para criar a regra de encaminhamento, execute o comando gcloud compute forwarding-rules create:

      gcloud compute forwarding-rules create FORWARDING_RULE \
        --region=us-central1 \
        --ports=80 \
        --address=IP_ADDRESS \
        --backend-service=BACKEND_SERVICE_NAME
      

      Substitua:

      FORWARDING_RULE: o nome da regra de encaminhamento a ser criada.

      IP_ADDRESS: o endereço IP a ser atribuído à instância. Use o endereço IP externo estático reservado, não o nome do endereço.

Verificar pesos de back-end usando a API de serviço de back-end

Verifique se os pesos do back-end são informados corretamente à verificação de integridade de HTTP.

A saída é esta:

backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name}
status:
  healthStatus:
  - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
    forwardingRuleIp: 34.135.46.66
    healthState: HEALTHY
    instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0
    ipAddress: 10.10.0.5
    port: 80
    weight: '0'
  - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
    forwardingRuleIp: 34.135.46.66
    healthState: HEALTHY
    instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100
    ipAddress: 10.10.0.6
    port: 80
    weight: '100'
  - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
    forwardingRuleIp: 34.135.46.66
    healthState: HEALTHY
    instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900
    ipAddress: 10.10.0.7
    port: 80
    weight: '900'
  kind: compute#backendServiceGroupHealth