Codelab: otimizações avançadas de balanceamento de carga

1. Introdução

Este é o codelab de otimizações avançadas de balanceamento de carga.

Neste codelab, você vai aprender a configurar opções avançadas de balanceamento de carga para o balanceador de carga de aplicativo externo global. Antes de começar, recomendamos que você confira o documento sobre o balanceamento de carga na nuvem ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

c3fb1d3f027e8640.png

Figura 1. O fluxo de trabalho de escolha de um endpoint de destino com o balanceador de carga de aplicativo externo global.

Topologia e casos de uso do codelab

2f7368df335d3de9.png

Figura 2. Topologia de roteamento do balanceador de carga HTTP

Neste codelab, você vai configurar dois grupos gerenciados de instâncias. Você vai criar um balanceador de carga HTTPS externo global. O balanceador de carga vai usar vários recursos da lista de recursos avançados compatíveis com o balanceador de carga baseado no Envoy. Depois da implantação, gere uma carga simulada e verifique se as configurações definidas estão funcionando corretamente.

O que você vai aprender

  • Como configurar a ServiceLbPolicy para ajustar o balanceador de carga.

O que é necessário

2. Antes de começar

No Cloud Shell, verifique se o ID do projeto está configurado.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

Ativar APIs

Ative todos os serviços necessários

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com
gcloud services enable networkservices.googleapis.com

3. criar a rede VPC

Crie uma rede VPC

No Cloud Shell

gcloud compute networks create httplbs --subnet-mode=auto

Saída

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs].
NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
httplbs  AUTO         REGIONAL

Criar regras de firewall da VPC

Depois de criar a VPC, crie uma regra de firewall. A regra de firewall será usada para permitir que todos os IPs acessem o IP externo do site do aplicativo de teste na porta 80 para tráfego http.

No Cloud Shell

gcloud compute firewall-rules create httplb-allow-http-rule \
--allow tcp:80 \
--network httplbs \
--source-ranges 0.0.0.0/0 \
--priority 700

Saída

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule].
Creating firewall...done.
NAME                    NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
httplb-allow-http-rule  httplbs  INGRESS    700       tcp:80        False

Neste codelab, vamos ajustar a integridade das VMs. Por isso, também vamos criar regras de firewall para permitir o SSH.

No Cloud Shell

gcloud compute firewall-rules create fw-allow-ssh \
    --network=httplbs \
    --action=allow \
    --direction=ingress \
    --target-tags=allow-ssh \
    --rules=tcp:22

Saída

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh].
Creating firewall...done.
NAME          NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
fw-allow-ssh  httplbs  INGRESS    1000      tcp:22        False

4. Configurar os grupos gerenciados de instâncias

Você precisa configurar grupos gerenciados de instâncias que incluem os padrões para recursos de back-end usados pelo balanceador de carga HTTP. Primeiro, vamos criar modelos de instância que definem a configuração das VMs a serem criadas em cada região. Em seguida, para um back-end em cada região, vamos criar um grupo gerenciado de instâncias que faz referência a um modelo de instância.

Os grupos gerenciados de instâncias podem ser zonais ou regionais no escopo. Neste exercício prático, vamos criar grupos gerenciados de instâncias zonais.

Nesta seção, você pode conferir um script de inicialização pré-criado que será referenciado na criação da instância. Esse script de inicialização instala e ativa recursos de servidor da Web que serão usados para simular um aplicativo da Web. Se quiser, analise o script.

Criar os modelos de instância

A primeira etapa é criar um modelo de instância.

No Cloud Shell

gcloud compute instance-templates create test-template \
   --network=httplbs \
   --tags=allow-ssh,http-server \
   --image-family=debian-9 \
   --image-project=debian-cloud \
   --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://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2'

Saída

NAME           MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template  n1-standard-1               2021-11-09T09:24:35.275-08:00

Agora, verifique se os modelos de instância foram criados com sucesso usando o seguinte comando gcloud:

No Cloud Shell

gcloud compute instance-templates list

Saída

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template         n1-standard-1         2021-11-09T09:24:35.275-08:00

Criar os grupos de instâncias

Agora precisamos criar um grupo gerenciado de instâncias com base nos modelos de instância criados anteriormente.

No Cloud Shell

gcloud compute instance-groups managed create us-east1-a-mig \
--size=1 \
--template=test-template \
--zone=us-east1-a

Saída

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig].
NAME            LOCATION    SCOPE  BASE_INSTANCE_NAME   SIZE  TARGET_SIZE  INSTANCE_TEMPLATE  AUTOSCALED
us-east1-a-mig  us-east1-a  zone   us-east1-a-mig       0     1            test-template      no

No Cloud Shell

gcloud compute instance-groups managed create us-east1-b-mig \
--size=5 \
--template=test-template \
--zone=us-east1-b

Saída

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig].
NAME            LOCATION    SCOPE  BASE_INSTANCE_NAME   SIZE  TARGET_SIZE  INSTANCE_TEMPLATE  AUTOSCALED
us-east1-b-mig  us-east1-b  zone   us-east1-b-mig       0     5            test-template      no

Podemos verificar se os grupos de instâncias foram criados com sucesso usando o seguinte comando gcloud:

No Cloud Shell

gcloud compute instance-groups list

Saída

NAME                  LOCATION      SCOPE   NETWORK         MANAGED INSTANCES
us-east1-a-mig        us-east1-a    zone    httplbs          Yes      1
us-east1-b-mig        us-east1-b    zone    httplbs          Yes      5

Verificar a funcionalidade do servidor da Web

Cada instância é configurada para executar um servidor da Web Apache com um script PHP simples que renderiza algo como:

Página veiculada de: us-east1-a-mig-ww2h

Para garantir que os servidores da Web estejam funcionando corretamente, navegue até Compute Engine -> Instâncias de VM. Verifique se as novas instâncias (por exemplo, us-east1-a-mig-xxx) foram criadas de acordo com as definições do grupo de instâncias.

Agora, faça uma solicitação da Web no navegador para garantir que o servidor da Web esteja em execução. Isso pode levar um minuto para iniciar. Na página "Instâncias de VM" do Compute Engine, selecione uma instância criada pelo grupo de instâncias e clique no IP externo (público) dela.

Ou, no navegador, acesse http://<IP_Address>

5. Configurar o balanceador de carga

Criar verificação de integridade

Primeiro, crie uma verificação de integridade básica para garantir que os serviços estejam funcionando corretamente. Vamos criar uma verificação de integridade básica. Há muitas outras personalizações avançadas disponíveis.

No Cloud Shell

gcloud compute health-checks create http http-basic-check \
    --port 80

Saída

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check].
NAME              PROTOCOL
http-basic-check  HTTP

Reservar endereço IP externo

Para esta etapa, é necessário reservar um endereço IP estático disponível globalmente que será anexado ao balanceador de carga mais tarde.

No Cloud Shell

gcloud compute addresses create lb-ipv4-2 \
    --ip-version=IPV4 \
    --global

Saída

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].

Anote o endereço IP reservado.

gcloud compute addresses describe lb-ipv4-2 \
    --format="get(address)" \
    --global

Criar serviços de back-end

Agora precisamos criar um serviço de back-end para os grupos gerenciados de instâncias que criamos anteriormente.

No Cloud Shell

gcloud compute backend-services create east-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

Saída

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service].
NAME                  BACKENDS  PROTOCOL
east-backend-service            HTTP

Adicionar MIGs aos serviços de back-end

Agora que criamos os serviços de back-end, precisamos adicionar os grupos gerenciados de instâncias criados anteriormente a cada serviço de back-end.

No Cloud Shell

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global

No Cloud Shell

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global

Para verificar se os back-ends foram adicionados, execute o comando a seguir.

No Cloud Shell

gcloud compute backend-services list

Saída

NAME                  BACKENDS                                                                                               PROTOCOL
east-backend-service  us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig  HTTP

Criar mapa de URL

Agora vamos criar um mapa de URLs.

gcloud compute url-maps create web-map-http \
    --default-service=east-backend-service \
    --global

Saída

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http].
NAME          DEFAULT_SERVICE
web-map-http  backendServices/east-backend-service

Criar front-end HTTP

A etapa final na criação do balanceador de carga é criar o front-end. Isso vai mapear o endereço IP reservado anteriormente para o mapa de URL do balanceador de carga criado.

No Cloud Shell

gcloud compute target-http-proxies create http-lb-proxy-adv \
    --url-map=web-map-http

Saída

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv].
NAME               URL_MAP
http-lb-proxy-adv  web-map-http

Em seguida, crie uma regra de encaminhamento global que mapeie o endereço IP reservado anteriormente para o proxy HTTP.

No Cloud Shell

gcloud compute forwarding-rules create http-content-rule \
    --load-balancing-scheme EXTERNAL_MANAGED \
    --address=lb-ipv4-2 \
    --global \
    --target-http-proxy=http-lb-proxy-adv \
    --ports=80

Neste ponto, você pode confirmar se o balanceador de carga está funcionando com o endereço IP que você anotou anteriormente.

6. Verificar se o balanceador de carga está funcionando

Para verificar se o recurso de balanceamento de carga está funcionando, gere alguma carga. Para isso, vamos criar uma nova VM para simular a carga.

Criar siege-vm

Agora você vai criar a siege-vm, que será usada para gerar carga.

No Cloud Shell

gcloud compute instances create siege-vm \
    --network=httplbs \
    --zone=us-east1-a \
    --machine-type=e2-medium \
    --tags=allow-ssh,http-server \
    --metadata=startup-script='sudo apt-get -y install siege'

Saída

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm].
NAME      ZONE             MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
siege-vm  us-central1-ir1  e2-medium                  10.132.0.15  34.143.20.68  RUNNING

Em seguida, use o SSH na VM criada. Depois que ela for criada, clique em SSH para iniciar um terminal e se conectar.

Depois de se conectar, execute o comando a seguir para gerar carga. Use o endereço IP que você reservou anteriormente para o balanceador de carga HTTP externo.

No Cloud Shell

siege -c 20 http://$lb-ipv4-2

Saída

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

Verificar a distribuição de carga

Agora que o Siege está em execução, é hora de verificar se o tráfego está sendo distribuído igualmente aos dois grupos gerenciados de instâncias.

Interromper o cerco

Agora que você demonstrou que a divisão avançada de tráfego está funcionando, é hora de interromper o cerco. Para isso, volte ao terminal SSH da instância siege-vm e pressione CTRL+C para interromper a execução do siege.

7. Configurar política de LB de serviço

Criar uma política de LB de serviço

Agora que a configuração básica foi concluída, vamos criar uma política de balanceamento de carga de serviço e testar os recursos avançados. Por exemplo, vamos configurar o serviço para usar algumas configurações avançadas de balanceamento de carga. Neste exemplo, vamos criar uma política para testar o recurso de redução automática de capacidade. Mas fique à vontade para testar outros recursos.

No Cloud Shell

gcloud beta network-services service-lb-policies create http-policy \
    --auto-capacity-drain --location=global

Podemos verificar se a política foi criada com sucesso usando o seguinte comando gcloud:

No Cloud Shell

gcloud beta network-services service-lb-policies list --location=global

Saída

NAME
http-policy

Anexar política de balanceador de carga de serviço ao serviço de back-end

Agora vamos anexar a nova política ao serviço de back-end atual acima.

No Cloud Shell

gcloud beta compute backend-services update east-backend-service \
    --service-lb-policy=http-policy --global

8. Ajustar a integridade do back-end

Neste ponto, a nova política de balanceamento de carga de serviço foi aplicada ao seu serviço de back-end. Portanto, tecnicamente, você pode pular direto para a revisão dos dados. Mas, como parte do codelab, também vamos fazer alguns ajustes adicionais de produção para mostrar como a nova política funciona.

O recurso de diminuição automática da capacidade remove automaticamente um MIG de back-end do balanceador de carga quando o número total de back-ends íntegros cai abaixo de um determinado limite (25%). Para testar esse recurso, vamos acessar as VMs em us-east1-b-mig por SSH e deixá-las em estado não íntegro. Com o limite de 25%, você precisará usar SSH em quatro das VMs e desligar o servidor Apache.

Para isso, escolha quatro VMs e faça SSH nelas clicando em "SSH" para iniciar um terminal e se conectar. Em seguida, execute o comando abaixo.

sudo apachectl stop

Nesse momento, o recurso de redução automática da capacidade será acionado, e us-east1-b-mig não receberá novas solicitações.

9. Verificar se o recurso de redução automática de capacidade está funcionando

Reiniciar o Siege

Para verificar o novo recurso, vamos reutilizar a VM de cerco. Vamos usar SSH para acessar a VM criada na etapa anterior. Depois que ela for criada, clique em SSH para iniciar um terminal e se conectar.

Depois de se conectar, execute o comando a seguir para gerar carga. Use o endereço IP que você reservou anteriormente para o balanceador de carga HTTP externo.

No Cloud Shell

siege -c 20 http://$lb-ipv4-2

Saída

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

Nesse ponto, você vai notar que todas as solicitações são enviadas para us-east1-a-mig.

Interromper o cerco

Agora que você demonstrou que a divisão avançada de tráfego está funcionando, é hora de interromper o cerco. Para isso, volte ao terminal SSH da instância siege-vm e pressione CTRL+C para interromper a execução do siege.

10. Etapas de limpeza

Agora que terminamos de usar o ambiente do laboratório, é hora de desativá-lo. Execute os comandos a seguir para excluir o ambiente de teste.

No Cloud Shell

gcloud compute instances delete siege-vm --zone=us-east1-a

gcloud compute forwarding-rules delete http-content-rule --global
gcloud compute target-http-proxies delete http-lb-proxy-adv

gcloud compute url-maps delete web-map-http

gcloud compute backend-services delete east-backend-service --global

gcloud compute addresses delete lb-ipv4-2 --global
gcloud compute health-checks delete http-basic-check 

gcloud beta network-services service-lb-policies delete http-policy --location=global

gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a
gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b

gcloud compute instance-templates delete test-template 

gcloud compute firewall-rules delete httplb-allow-http-rule
gcloud compute firewall-rules delete fw-allow-ssh

gcloud compute networks delete httplbs 

11. Parabéns!

Parabéns por concluir o codelab.

O que vimos

  • Como criar um balanceador de carga de aplicativo externo com uma política de balanceamento de carga de serviço.
  • Configure o serviço de back-end com o recurso de diminuição automática de capacidade.

Próximas etapas

  • Teste outros recursos fornecidos pela política de balanceamento de carga de serviço.