Este tutorial explica como usar o equilíbrio de carga com um grupo de instâncias gerido regional para redirecionar o tráfego de instâncias de VMs ocupadas ou indisponíveis, o que lhe permite oferecer alta disponibilidade mesmo durante uma interrupção zonal.
Um grupo de instâncias gerido regional distribui uma aplicação em várias instâncias em várias zonas. Um balanceador de carga global direciona o tráfego em várias regiões através de um único endereço IP. Ao usar estes dois serviços para distribuir a sua aplicação em várias zonas, pode ajudar a garantir que a aplicação está disponível mesmo em casos extremos, como uma interrupção zonal.
Os balanceadores de carga podem ser usados para direcionar vários tipos de tráfego. Este tutorial mostra como criar um balanceador de carga global que direciona o tráfego HTTP externo, mas grande parte do conteúdo deste tutorial continua a ser relevante para outros tipos de balanceadores de carga. Para saber mais sobre outros tipos de tráfego que podem ser direcionados com um balanceador de carga, consulte o artigo Tipos de Cloud Load Balancing.
Este tutorial inclui passos detalhados para lançar uma aplicação Web num grupo de instâncias gerido regional, configurar o acesso à rede, criar um equilibrador de carga para direcionar o tráfego para a aplicação Web e observar o equilibrador de carga simulando uma indisponibilidade zonal. Consoante a sua experiência com estas funcionalidades, este tutorial demora cerca de 45 minutos a concluir.
Objetivos
- Inicie uma aplicação Web de demonstração num grupo de instâncias gerido regional.
- Configure um balanceador de carga global que direcione o tráfego HTTP em várias zonas.
- Observe os efeitos do balanceador de carga simulando uma indisponibilidade zonal.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- Compute Engine
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Arquitetura de aplicações
A aplicação inclui os seguintes componentes do Compute Engine:
- Rede VPC: uma rede virtual no Google Cloud que pode fornecer conetividade global através das suas próprias regras de firewall e trajetos.
- Regra de firewall: a Google Cloud uma firewall permite-lhe permitir ou negar tráfego para as suas instâncias.
- Modelo de instância: um modelo usado para criar cada instância de VM no grupo de instâncias gerido.
- Grupo de instâncias geridas regional: um grupo de instâncias de VM que executam a mesma aplicação em várias zonas.
- Endereço IP externo estático global: um endereço IP estático acessível em redes externas e que pode ser associado a um recurso global.
- Balanceador de carga global: um balanceador de carga que permite que as instâncias de back-end sejam distribuídas por várias regiões. Use um balanceador de carga global quando os seus utilizadores precisarem de acesso às mesmas aplicações e conteúdo, e quiser fornecer acesso através de um único endereço IP anycast.
- Verificação de estado: uma política usada pelo equilibrador de carga para avaliar a capacidade de resposta da aplicação em cada instância de VM.
Iniciar a aplicação Web
Este tutorial usa uma aplicação Web armazenada no GitHub. Se quiser saber mais sobre como a aplicação foi implementada, consulte o repositório GoogleCloudPlatform/python-docs-samples no GitHub.
Inicie a aplicação Web em todas as VMs num grupo de instâncias incluindo um script de arranque num modelo de instância. Além disso, execute o grupo de instâncias numa rede VPC dedicada para evitar que as regras de firewall deste tutorial interfiram com os recursos existentes em execução no seu projeto.
Crie uma rede de VPC
A utilização de uma rede VPC protege os recursos existentes no seu projeto contra a influência dos recursos que vai criar para este tutorial. Também é necessária uma rede VPC para restringir o tráfego de entrada, de modo que este tenha de passar pelo equilibrador de carga.
Crie uma rede da VPC para encapsular as regras de firewall para a aplicação Web de demonstração:
Na Google Cloud consola, aceda à página Redes VPC.
Clique em Criar rede de VPC.
Em Nome, introduza
web-app-vpc
.Defina o Subnet creation mode (Modo de criação de sub-rede) como Custom (Personalizado).
Crie uma nova sub-rede da seguinte forma:
- Na secção Sub-redes, defina o campo Nome e introduza
web-app-vpc-subnet
. - No menu pendente Região, selecione us-central1.
- Certifique-se de que a opção Tipo de pilha de IP está definida como IPv4.
- Na secção Intervalo IPv4 principal, introduza o intervalo IPv4
10.2.0.0/24
.
- Na secção Sub-redes, defina o campo Nome e introduza
Na parte inferior da página, clique em Criar.
Aguarde até que a rede VPC seja criada antes de continuar.
Crie uma regra de firewall
Depois de criar a rede da VPC, configure uma regra de firewall para permitir o tráfego HTTP para a rede da VPC:
Na Google Cloud consola, aceda à página Firewalls.
Clique em Criar regra de firewall.
No campo Nome, introduza
allow-web-app-http
.Defina Rede como
web-app-vpc
.Certifique-se de que as seguintes opções estão definidas conforme indicado:
- A opção Direção do tráfego está definida como Entrada.
- A opção Ação na correspondência está definida como Permitir.
No menu pendente Alvos, selecione Todas as instâncias na rede.
Defina o Filtro de origem como
IPv4 ranges
.No campo Intervalos de IPs de origem, introduza
130.211.0.0/22, 35.191.0.0/16
para permitir verificações de funcionamento do equilibrador de carga.Em Protocolos e portas, faça o seguinte:
- Selecione Protocolos e portas especificados.
- Selecione TCP.
- No campo Portas, introduza
80
para permitir o acesso ao tráfego HTTP.
Clique em Criar.
Crie um modelo de instância
Crie um modelo que vai usar para criar um grupo de instâncias de VM. Cada instância criada a partir do modelo inicia uma aplicação Web de demonstração através de um script de arranque.
Na Google Cloud consola, aceda à página Modelos de instâncias.
Clique em Criar modelo de instância.
Em Nome, introduza
load-balancing-web-app-template
.Em Configuração da máquina, defina o Tipo de máquina como
e2-medium
.Clique na secção Opções avançadas para a expandir.
Clique na secção Rede e faça o seguinte:
- Na secção Interfaces de rede, elimine as interfaces de rede existentes clicando no ícone junto às mesmas.
- Clique em Adicionar uma interface de rede e, de seguida, selecione a
web-app-vpc
rede. Isto força cada instância criada com este modelo a ser executada na rede criada anteriormente. - No menu pendente Sub-rede, selecione
web-app-vpc-subnet
. - Clique em Concluído.
Clique na secção Gestão e faça o seguinte:
Na secção Automatização, introduza o seguinte script de arranque:
apt-get update apt-get -y install git python3-pip python3-venv git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git python3 -m venv venv ./venv/bin/pip3 install -Ur ./python-docs-samples/compute/managed-instances/demo/requirements.txt ./venv/bin/pip3 install gunicorn ./venv/bin/gunicorn --bind 0.0.0.0:80 app:app --daemon --chdir ./python-docs-samples/compute/managed-instances/demo
O script obtém, instala e inicia a aplicação Web quando uma instância de VM é iniciada.
Deixe os valores predefinidos para as outras opções.
Clique em Criar.
Aguarde até que o modelo seja criado antes de continuar.
Crie um grupo de instâncias gerido regional
Para executar a aplicação Web, use o modelo de instância para criar um grupo de instâncias gerido regional:
Na Google Cloud consola, aceda à página Grupos de instâncias.
Clique em Criar grupo de instâncias.
Em Nome, introduza
load-balancing-web-app-group
.Para Modelo de instância, selecione
load-balancing-web-app-template
.Defina o Número de instâncias como
6
. Se este campo estiver desativado, desative primeiro o ajuste de escala automático.Para desativar o ajuste de escala automático, aceda à secção Ajuste de escala automático. No menu pendente Modo de ajuste de escala automático, selecione Desativado: não ajustar a escala automaticamente.
Em Localização, selecione Várias zonas.
Para Região, selecione us-central1.
Para Zonas, selecione as seguintes zonas na lista pendente:
- us-central1-b
- us-central1-c
- us-central1-f
Deixe os valores predefinidos para as outras opções.
Clique em Criar. Esta ação redireciona novamente para a página Grupos de instâncias.
Pode ter de aguardar alguns minutos até que todas as instâncias no grupo estejam em execução.
Configurar o balanceador de carga
Para usar um balanceador de carga para direcionar o tráfego para a sua aplicação Web, tem de reservar um endereço IP externo para receber todo o tráfego recebido. Em seguida, crie um equilibrador de carga que aceite tráfego desse endereço IP e redirecione esse tráfego para o grupo de instâncias.
Reserve um endereço IP estático
Use um endereço IP externo estático global para fornecer ao balanceador de carga um único ponto de entrada para receber todo o tráfego de utilizadores. O Compute Engine preserva os endereços IP estáticos, mesmo que altere ou elimine quaisquer Google Cloud recursos afiliados. Isto permite que a aplicação Web tenha sempre o mesmo ponto de entrada, mesmo que outras partes da aplicação Web possam mudar.
Na Google Cloud consola, aceda à página Endereços IP.
Clique em Reservar endereço IP estático externo.
No campo Nome, introduza
web-app-ipv4
.Defina a versão do IP como IPv4.
Defina o Tipo como Global.
Clique em Reservar.
Crie um balanceador de carga
Esta secção explica os passos necessários para criar um balanceador de carga global que direcione o tráfego HTTP.
Este equilibrador de carga usa um front-end para receber tráfego de entrada e um back-end para distribuir este tráfego a instâncias em bom estado. Uma vez que o equilibrador de carga é composto por vários componentes, esta tarefa está dividida em cinco partes:
- Selecione o tipo de balanceador de carga
- Dê um nome ao balanceador de carga
- Configure a interface
- Configure o back-end
- Reveja e finalize
Conclua todas as partes para criar o balanceador de carga.
Selecione o tipo de balanceador de carga
Na Google Cloud consola, aceda à página Equilíbrio de carga.
- Clique em Criar equilibrador de carga.
- Em Tipo de balanceador de carga, selecione Balanceador de carga de aplicações (HTTP/HTTPS) e clique em Seguinte.
- Para Público ou interno, selecione Público (externo) e clique em Seguinte.
- Para a Implementação global ou de região única, selecione Melhor para cargas de trabalho globais e clique em Seguinte.
- Para Geração do balanceador de carga, selecione Balanceador de carga de aplicações externo global e clique em Seguinte.
- Clique em Configurar.
Dê um nome ao balanceador de carga
- No painel esquerdo, em Nome do equilibrador de carga, introduza
web-app-load-balancer
.
Configure a interface
- Na página Configuração do frontend, em Nome, introduza
web-app-ipv4-frontend
. - Defina o Protocolo como
HTTP
. - Defina a versão do IP como
IPv4
. - Defina o endereço IP como
web-app-ipv4
. - Defina a Porta para
80
. - Clique em Concluído para criar o frontend.
Configure o back-end
- No painel esquerdo, clique em Configuração de back-end.
- Clique no menu pendente Serviços de back-end e contentores de back-end para abrir um menu e, de seguida, clique em Criar um serviço de back-end.
- Na nova janela, para o Nome do serviço de back-end, introduza
web-app-backend
. - Na secção Back-ends, faça o seguinte:
- Defina Grupo de instâncias como
load-balancing-web-app-group
. - Defina Transferir números como
80
. Isto permite o tráfego HTTP entre o balanceador de carga e o grupo de instâncias. - Em Modo de equilíbrio, selecione Utilização.
- Clique em Concluído.
- Defina Grupo de instâncias como
Crie a verificação de funcionamento para o back-end do balanceador de carga da seguinte forma:
- Clique no menu pendente Verificação de funcionamento e, de seguida, clique em Criar uma verificação de funcionamento. É aberta uma nova janela.
- Na nova janela, em Nome, introduza
web-app-load-balancer-check
. - Defina o Protocolo como HTTP.
- Em Porta, introduza
80
. - Para este tutorial, defina o Caminho do pedido como
/health
, que é um caminho que a aplicação Web de demonstração está configurada para responder. Defina os seguintes critérios de estado:
- Defina o Intervalo de verificação para
3
segundos. Isto define a quantidade de tempo desde o início de uma sondagem até ao início da seguinte. - Defina o Limite de tempo para
3
segundos. Isto define o período de tempo que Google Cloud aguarda uma resposta a uma sondagem. O valor tem de ser inferior ou igual ao intervalo de verificação. - Defina o Limite saudável para
2
sucessos consecutivos. Isto define o número de sondagens sequenciais que têm de ser bem-sucedidas para que a instância seja considerada em bom estado. - Defina o limite não saudável para
2
falhas consecutivas. Este parâmetro define o número de sondagens sequenciais que têm de falhar para que a instância seja considerada não saudável.
- Defina o Intervalo de verificação para
Clique em Criar para criar a verificação de funcionamento.
Deixe os valores predefinidos para as outras opções.
Clique em Criar para criar o serviço de back-end.
Reveja e finalize
Valide as definições de equilíbrio de carga antes de criar o equilibrador de carga:
- No painel do lado esquerdo da página Criar Application Load Balancer externo global, clique em Rever e finalizar.
Na página Reveja e finalize, verifique se o Frontend usa um endereço IP com um Protocolo de
HTTP
.Na mesma página, verifique as seguintes definições de backend:
- O serviço de back-end está
web-app-backend
. - O protocolo de ponto final é
HTTP
. - A verificação de funcionamento está
web-app-load-balancer-check
. - O grupo de instâncias está
load-balancing-web-app-group
.
- O serviço de back-end está
Clique em Criar para concluir a criação do balanceador de carga.
Pode ter de aguardar alguns minutos para que o balanceador de carga termine a criação.
Teste o balanceador de carga
Confirme se consegue estabelecer ligação à aplicação Web através do balanceador de carga da seguinte forma:
Na Google Cloud consola, aceda à página Equilíbrio de carga.
Na coluna Nome, clique em
web-app-load-balancer
para expandir o balanceador de carga que acabou de criar.Para estabelecer ligação à app Web através dos endereços IP estáticos externos, faça o seguinte:
- Na secção Frontend, copie o endereço IP apresentado na coluna IP:Port.
Abra um novo separador do navegador e cole o endereço IP na barra de endereço. Deve apresentar a aplicação Web de demonstração:
Repare que, sempre que atualiza a página, o balanceador de carga liga-se a diferentes instâncias em diferentes zonas. Isto acontece porque não está a estabelecer ligação diretamente a uma instância, mas sim ao balanceador de carga, que seleciona a instância para a qual é redirecionado.
Quando terminar, feche o separador do navegador da aplicação Web de demonstração.
Simular uma indisponibilidade zonal
Pode observar a funcionalidade do balanceador de carga simulando a indisponibilidade generalizada de uma interrupção zonal. Esta simulação funciona forçando todas as instâncias localizadas numa zona especificada a comunicar um estado não saudável no caminho do pedido /health
. Quando estas instâncias comunicam um estado não saudável,
falham na verificação de estado do equilíbrio de carga, o que leva o equilibrador de carga a
parar de direcionar tráfego para estas instâncias.
Monitorize para que zonas o balanceador de carga está a direcionar o tráfego.
Na Google Cloud consola, aceda ao Cloud Shell.
O Cloud Shell é aberto num painel da Google Cloud consola. A sessão pode demorar alguns segundos a ser inicializada.
Guarde o endereço IP externo estático do balanceador de carga da seguinte forma:
Obtenha o endereço IP externo da regra de encaminhamento do front-end do balanceador de carga introduzindo o seguinte comando no terminal:
gcloud compute forwarding-rules describe web-app-ipv4-frontend --global
O resultado tem o seguinte aspeto. Copie o
EXTERNAl_IP_ADDRESS
do resultado.IPAddress: EXTERNAl_IP_ADDRESS ...
Crie uma variável bash local:
export LOAD_BALANCER_IP=EXTERNAl_IP_ADDRESS
Substitua
EXTERNAl_IP_ADDRESS
pelo endereço IP externo que copiou.
Para monitorizar para que zonas o balanceador de carga está a direcionar o tráfego, execute o seguinte script bash:
while true do BODY=$(curl -s "$LOAD_BALANCER_IP") NAME=$(echo -n "$BODY" | grep "load-balancing-web-app-group" | perl -pe 's/.+?load-balancing-web-app-group-(.+?)<.+/\1/') ZONE=$(echo -n "$BODY" | grep "us-" | perl -pe 's/.+?(us-.+?)<.+/\1/') echo $ZONE sleep 2 # Wait for 2 seconds done
Este script tenta continuamente estabelecer ligação à aplicação Web através do endereço IP do front-end do balanceador de carga e indica a zona a partir da qual a aplicação Web está a ser executada para cada ligação.
A saída resultante deve incluir as zonas
us-central1-b
,us-central1-c
eus-central1-f
:us-central1-f us-central1-b us-central1-c us-central1-f us-central1-f us-central1-c us-central1-f us-central1-c us-central1-c
Mantenha este terminal aberto.
Enquanto o monitor está em execução, comece a simular a indisponibilidade zonal.
- No Cloud Shell, abra uma segunda sessão de terminal clicando no botão Adicionar.
Crie uma variável bash local para o ID do projeto:
export PROJECT_ID=PROJECT_ID
em que
PROJECT_ID
é o ID do projeto do seu projeto atual, que é apresentado em cada nova linha no Cloud Shell:user@cloudshell:~ (PROJECT_ID)$
Crie uma variável bash local para a zona que quer desativar. Para simular uma falha da zona
us-central1-f
, use o seguinte comando:export DISABLE_ZONE=us-central1-f
Em seguida, execute o seguinte script bash. Este script faz com que as instâncias da aplicação Web de demonstração na zona desativada produzam respostas não saudáveis à verificação de estado do balanceador de carga. As respostas não saudáveis pedem ao balanceador de carga para direcionar o tráfego para longe destas instâncias.
export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --filter="zone:($DISABLE_ZONE)" --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "load-balancing-web-app-group") for i in $MACHINES; do NAME=$(echo "$i" | cut -f1 -d,) IP=$(echo "$i" | cut -f2 -d,) echo "Simulating zonal failure for zone $DISABLE_ZONE, instance $NAME" curl -q -s "http://$IP/makeUnhealthy" >/dev/null --retry 2 done
Após um breve atraso, o balanceador de carga deixa de direcionar o tráfego para as zonas não saudáveis, pelo que o resultado da primeira janela de terminal deixa de apresentar a zona
us-central1-f
:us-central1-c us-central1-c us-central1-c us-central1-b us-central1-b us-central1-c us-central1-b us-central1-c us-central1-c
Isto indica que o balanceador de carga está a direcionar o tráfego apenas para as instâncias em bom estado e responsivas.
Mantenha ambos os terminais abertos.
No segundo terminal, crie uma variável bash local para a zona que quer restaurar. Para restaurar o tráfego para a zona
us-central1-f
, use o seguinte comando:export ENABLE_ZONE=us-central1-f
Em seguida, execute o seguinte script bash. Este script faz com que as instâncias da aplicação Web de demonstração na zona ativada produzam respostas saudáveis à verificação de estado do balanceador de carga. As respostas saudáveis pedem ao equilibrador de carga para começar a distribuir o tráfego novamente para estas instâncias.
export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --filter="zone:($ENABLE_ZONE)" --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "load-balancing-web-app-group") for i in $MACHINES; do NAME=$(echo "$i" | cut -f1 -d,) IP=$(echo "$i" | cut -f2 -d,) echo "Simulating zonal restoration for zone $ENABLE_ZONE, instance $NAME" curl -q -s "http://$IP/makeHealthy" >/dev/null --retry 2 done
Após alguns minutos, o resultado da primeira janela do terminal apresenta gradualmente a zona
us-central1-f
novamente:us-central1-b us-central1-b us-central1-c us-central1-f us-central1-c us-central1-c us-central1-b us-central1-c us-central1-f
Isto indica que o balanceador de carga está a direcionar novamente o tráfego recebido para todas as zonas.
Feche ambos os terminais quando terminar.
Limpar
Depois de concluir o tutorial, pode limpar os recursos que criou para que deixem de usar a quota e incorrer em custos. As secções seguintes descrevem como eliminar ou desativar estes recursos.
Se criou um projeto separado para este tutorial, elimine o projeto completo. Caso contrário, se o projeto tiver recursos que quer manter, elimine apenas os recursos criados neste tutorial.
Eliminar o projeto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Eliminar recursos específicos
As secções seguintes descrevem como eliminar os recursos específicos que criou durante este tutorial.
Eliminar o balanceador de carga
Na Google Cloud consola, aceda à página Equilíbrio de carga.
Clique na caixa de verificação junto a
web-app-load-balancer
.Clique em
Eliminar na parte superior da página.Na nova janela, selecione todas as caixas de verificação. Em seguida, clique em Eliminar equilibrador de carga e recursos selecionados para confirmar a eliminação.
Eliminar o endereço IP externo estático
Aguarde até que o balanceador de carga seja eliminado antes de eliminar o endereço IP externo estático.
Na Google Cloud consola, aceda à página Endereços IP externos.
Clique na caixa de verificação junto a
web-app-ipv4
.Clique em Libertar endereço estático na parte superior da página. Na nova janela, clique em Lançar para confirmar o lançamento.
Eliminar o grupo de instâncias
Aguarde até que o balanceador de carga seja eliminado antes de eliminar o grupo de instâncias.
- In the Google Cloud console, go to the Instance groups page.
-
Select the checkbox for
your
load-balancing-web-app-group
instance group. - To delete the instance group, click Delete.
Eliminar o modelo de instância
Tem de concluir a eliminação do grupo de instâncias antes de eliminar o modelo de instância. Não pode eliminar um modelo de instância se um grupo de instâncias gerido o estiver a usar.
Na Google Cloud consola, aceda à página Modelos de instâncias.
Clique na caixa de verificação junto a
load-balancing-web-app-template
.Clique em
Eliminar na parte superior da página. Na nova janela, clique em Eliminar para confirmar a eliminação.
Eliminar a rede de VPC
Tem de terminar a eliminação do grupo de instâncias antes de eliminar a rede VPC. Não pode eliminar uma rede VPC se outros recursos ainda a usarem.
Na Google Cloud consola, aceda à página Redes VPC.
Clique em
web-app-vpc
.Clique em
Eliminar rede VPC na parte superior da página. Na nova janela, clique em Eliminar para confirmar a eliminação.
O que se segue?
- Experimente outro tutorial:
- Saiba mais acerca dos grupos de instâncias geridos.
- Saiba mais sobre o equilíbrio de carga.
- Saiba mais sobre como otimizar a latência das aplicações com o equilíbrio de carga.
- Saiba mais sobre como criar sistemas robustos.
- Saiba mais sobre como criar aplicações Web escaláveis e resilientes no Google Cloud.