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ê consulte o documento sobre o balanceamento de carga na nuvem ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).
Figura 1. O fluxo de trabalho de escolher um endpoint de destino com o balanceador de carga de aplicativo externo global.
Topologia e casos de uso do Codelab
Figura 2. Topologia de roteamento do balanceador de carga HTTP
Neste laboratório de código, 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 com suporte do balanceador de carga baseado no Envoy. Depois de implantar, você vai gerar uma carga simulada e verificar se as configurações definidas estão funcionando corretamente.
O que você vai aprender
- Como configurar o ServiceLbPolicy para ajustar o balanceador de carga.
O que é necessário
- Conhecimento sobre o balanceamento de carga HTTPS externo. A primeira metade deste codelab é bastante semelhante ao codelab sobre o balanceador de carga HTTPs externo com gerenciamento de tráfego avançado (Envoy) (https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Recomendamos fazer isso primeiro.
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, você vai criar 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. 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 de instâncias gerenciadas 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 de instâncias gerenciadas que faz referência a um modelo de instância.
Os grupos de instâncias gerenciadas podem ser regionais ou zonais no escopo. Neste exercício, vamos criar grupos de instâncias gerenciadas por zona.
Nesta seção, você encontra um script de inicialização pré-criado que será referenciado na criação da instância. Esse script de inicialização instala e ativa os recursos do servidor da Web que vamos usar para simular um aplicativo da Web. Confira este 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 você pode verificar se os modelos de instância foram criados com 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 o seguinte comando do 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 o seguinte:
Página veiculada em: us-east1-a-mig-ww2h
Para garantir que os servidores da Web estejam funcionando corretamente, acesse 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 na Web no navegador para garantir que o servidor da Web esteja em execução. Isso pode levar um minuto para começar. Na página "Instâncias de VM" em "Compute Engine", selecione uma instância criada pelo grupo e clique no IP externo (público).
Ou, em seu navegador, navegue até http://<IP_Address>
5. Configurar o balanceador de carga
Criar verificação de integridade
Primeiro, precisamos criar uma verificação de integridade básica para garantir que nossos serviços estejam funcionando. Vamos criar uma verificação de integridade básica, mas 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
Nesta etapa, você precisará reservar um endereço IP estático disponível globalmente que será anexado posteriormente ao balanceador de carga.
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 que foi 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 de instâncias gerenciadas 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 um 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 que você criou.
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 mapeia 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, é possível 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, você precisa gerar alguma carga. Para isso, vamos criar uma nova VM para simular a carga.
Crie Siege-vm
Agora você vai criar a siege-vm que vai usar 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 ele for criado, 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 de instâncias gerenciadas.
Stop the Siege (em inglês)
Agora que você demonstrou que a divisão avançada de tráfego está funcionando, é hora de interromper o cerco. Volte ao terminal SSH de siege-vm e pressione CTRL+C para interromper a execução do siege.
7. Configurar a política de balanceamento de carga do serviço
Criar uma política de balanceador de carga de serviço
Agora que a configuração básica foi concluída, vamos criar uma política de Service Lb e testar os recursos avançados. Como 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 sinta-se à 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 o seguinte comando gcloud:
No Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
Saída
NAME http-policy
Anexar a política de LB do serviço ao serviço de back-end
Agora vamos anexar a nova política ao serviço de back-end acima.
No Cloud Shell
gcloud beta compute backend-services update east-backend-service \ --service-lb-policy=http-policy --global
8. Tweak Backend Health
A nova política service lb foi aplicada ao seu serviço de back-end. Tecnicamente, você pode pular para a limpeza diretamente. No entanto, como parte do codelab, também vamos fazer alguns ajustes de produção para mostrar como a nova política funciona.
O recurso de diminuição da capacidade automática remove automaticamente um MIG de back-end do balanceador de carga quando o número total de back-ends saudáveis cai abaixo de um limite (25%). Para testar esse recurso, vamos usar o SSH nas VMs em us-east1-b-mig e torná-las inativas. Com o limite de 25%, você vai precisar usar SSH em quatro das VMs e encerrar o servidor Apache.
Para isso, escolha quatro VMs e execute SSH para elas. Para isso, clique no SSH para iniciar um terminal e se conectar. Em seguida, execute o comando abaixo.
sudo apachectl stop
Nesse ponto, o recurso de esgotamento automático da capacidade será acionado, e a us-east1-b-mig não vai receber novas solicitações.
9. Verificar se o recurso de diminuição automática de capacidade está funcionando
Reiniciar o Cerco
Para verificar o novo recurso, vamos reutilizar a VM de teste. Vamos usar SSH para acessar a VM criada na etapa anterior. Depois que ele for criado, 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.
Stop the Siege (em inglês)
Agora que você demonstrou que a divisão avançada de tráfego está funcionando, é hora de interromper o cerco. Para fazer isso, volte ao terminal SSH do siege-vm e pressione CTRL+C para interromper a execução do siege.
10. Etapas de limpeza
Agora que terminamos o ambiente do laboratório, é hora de desmontá-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
- Criação de um balanceador de carga de aplicativo externo com a política de balanceamento de carga de serviço.
- Configure seu serviço de back-end com o recurso de drenagem de capacidade automática.
Próximas etapas
- Teste outros recursos fornecidos pela política de balanceamento de carga do serviço.