Este tutorial explica como usar o balanceamento de carga com um grupo de instâncias gerenciadas regional para redirecionar o tráfego de instâncias de VM ocupadas ou indisponíveis, permitindo fornecer alta disponibilidade mesmo durante uma interrupção zonal.
Um grupo regional de instâncias gerenciadas distribui um aplicativo em várias instâncias em diversas zonas. Um balanceador de carga global direciona o tráfego em várias regiões por meio de um único endereço IP. Ao usar esses dois serviços para distribuir seu aplicativo em diversas zonas, você pode ajudar a garantir que seu aplicativo esteja disponível mesmo em casos extremos, como uma interrupção zonal.
Os balanceadores de carga podem ser usados para direcionar uma variedade de 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 ainda é 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 Tipos de Cloud Load Balancing .
Este tutorial inclui etapas detalhadas para iniciar um aplicativo Web em um grupo de instâncias gerenciadas regionalmente, configurar o acesso à rede, criar um balanceador de carga para direcionar o tráfego para o aplicativo Web e observar o balanceador de carga simulando uma interrupção zonal. Dependendo da sua experiência com esses recursos, este tutorial leva cerca de 45 minutos para ser concluído.
Objetivos
- Inicie um aplicativo Web de demonstração em um grupo de instâncias gerenciadas regionalmente.
- Configure um balanceador de carga global que direcione o tráfego HTTP em diversas zonas.
- Observe os efeitos do balanceador de carga simulando uma interrupção zonal.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Compute Engine
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, 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.
-
Make sure 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.
-
Make sure that billing is enabled for your Google Cloud project.
Arquitetura de aplicativo
O aplicativo inclui os seguintes componentes do Compute Engine:
- Rede VPC : uma rede virtual dentro Google Cloud que pode fornecer conectividade global através de suas próprias rotas e regras de firewall.
- Regra de firewall : a Google CloudO firewall permite permitir ou negar tráfego para suas instâncias.
- Modelo de instância : um modelo usado para criar cada instância de VM no grupo de instâncias gerenciadas.
- Grupo regional de instâncias gerenciadas : um grupo de instâncias de VM que executam o mesmo aplicativo em diversas zonas.
- Endereço IP externo estático global : um endereço IP estático acessível em redes externas e que pode ser anexado a um recurso global.
- Balanceador de carga global : um balanceador de carga que permite que instâncias de back-end sejam distribuídas em várias regiões. Use um balanceador de carga global quando seus usuários precisarem de acesso aos mesmos aplicativos e conteúdos e você quiser fornecer acesso usando um único endereço IP anycast.
- Verificação de integridade : uma política usada pelo balanceador de carga para avaliar a capacidade de resposta do aplicativo em cada instância de VM.
Iniciando o aplicativo da web
Este tutorial usa um aplicativo da web armazenado no GitHub. Se quiser saber mais sobre como o aplicativo foi implementado, consulte o repositório GoogleCloudPlatform/python-docs-samples no GitHub.
Inicie o aplicativo Web em cada VM em um grupo de instâncias incluindo um script de inicialização em um modelo de instância. Além disso, execute o grupo de instâncias em uma rede VPC dedicada para evitar que as regras de firewall deste tutorial interfiram em quaisquer recursos existentes em execução no seu projeto.
Crie uma rede VPC
O uso de uma rede VPC protege os recursos existentes no seu projeto contra serem afetados pelos recursos que você criará para este tutorial. Uma rede VPC também é necessária para restringir o tráfego de entrada para que ele passe pelo balanceador de carga.
Crie uma rede VPC para encapsular as regras de firewall para o aplicativo Web de demonstração:
No console do Google Cloud, acesse a página de redes VPC .
Clique em Criar rede VPC .
Em Nome , insira
web-app-vpc
.Defina o modo de criação de sub-rede como Automático .
Na parte inferior da página, clique em Criar .
Aguarde até que a rede VPC termine de ser criada antes de continuar.
Crie uma regra de firewall
Após a criação da rede VPC, configure uma regra de firewall para permitir o tráfego HTTP para a rede VPC:
No console do Google Cloud, acesse a página Firewalls .
Clique em Criar regra de firewall .
No campo Nome , insira
allow-web-app-http
.Defina Rede como
web-app-vpc
.Em Destinos , selecione Todas as instâncias na rede .
Defina o filtro de origem para
IPv4 ranges
.Em Intervalos de IP de origem , insira
0.0.0.0/0
para permitir acesso a todos os endereços IP.Em Protocolos e portas , faça o seguinte:
- Selecione Protocolos e portas especificados .
- Selecione TCP .
- No campo Portas , insira
80
para permitir acesso ao tráfego HTTP .
Clique em Criar .
Crie um modelo de instância
Crie um modelo que você usará para criar um grupo de instâncias de VM. Cada instância criada a partir do modelo inicia um aplicativo Web de demonstração por meio de um script de inicialização.
No console do Google Cloud, acesse a página Modelos de instância .
Clique em Criar modelo de instância .
Em Nome , insira
load-balancing-web-app-template
.Em Machine configuration , defina o Machine type como
e2-micro
.Em Firewall , selecione Permitir tráfego HTTP .
Expanda a seção Opções avançadas .
Expanda a seção Gerenciamento .
Na seção Automação , insira o seguinte script de inicialização:
sudo apt update && sudo apt -y install git gunicorn3 python3-pip git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/compute/managed-instances/demo sudo pip3 install -r requirements.txt sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
O script obtém, instala e inicia o aplicativo Web quando a instância da VM é inicializada.
Expanda a seção Rede .
Na seção Interfaces de rede , clique em Adicionar uma interface de rede e selecione a rede
web-app-vpc
. Isso força cada instância criada com este modelo a ser executada na rede criada anteriormente.Clique em Criar .
Aguarde até que o modelo termine de ser criado antes de continuar.
Criar um grupo regional de instâncias gerenciadas
Para executar o aplicativo Web, use o modelo de instância para criar um grupo de instâncias gerenciadas regionalmente:
No console do Google Cloud, acesse a página Grupos de instâncias .
Clique em Criar grupo de instâncias .
Selecione Novo grupo gerenciado de instâncias (sem estado) ."
Para Nome , insira
load-balancing-web-app-group
.Para Modelo de instância , selecione
load-balancing-web-app-template
.Defina Número de instâncias como
6
. Se este campo estiver desativado, desative primeiro o escalonamento automático.Para Localização , selecione Zonas múltiplas .
Para Região , selecione us-central1 .
Para Zonas , selecione as seguintes zonas na lista suspensa:
- us-central1-b
- us-central1-c
- us-central1-f
Selecione Permitir redistribuição de instâncias .
Para o modo de escalonamento automático , selecione Desativado: não escalonar automaticamente .
Clique em Criar . Isso redireciona você de volta para a página Grupos de instâncias .
Para verificar se suas instâncias estão executando o aplicativo Web de demonstração corretamente:
- Na página Grupos de instâncias , clique em
load-balancing-web-app-group
para ver as instâncias nesse grupo. Em IP externo , clique em um endereço IP para conectar essa instância. Uma nova guia do navegador é aberta exibindo o aplicativo web de demonstração:
Quando terminar, feche a guia do navegador do aplicativo web de demonstração.
- Na página Grupos de instâncias , clique em
Configurando o balanceador de carga
Para usar um balanceador de carga para direcionar o tráfego para seu aplicativo Web, você deve reservar um endereço IP externo para receber todo o tráfego de entrada. Em seguida, crie um balanceador de carga que aceite o 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 do usuário. O Compute Engine preserva endereços IP estáticos mesmo se você alterar ou excluir qualquer afiliado Google Cloud recursos. Isso permite que o aplicativo Web sempre tenha o mesmo ponto de entrada, mesmo que outras partes do aplicativo Web possam mudar.
No console do Google Cloud, acesse a página de endereços IP .
Clique em Reservar endereço IP estático externo .
No campo Nome , insira
web-app-ipv4
.Defina a versão IP como IPv4 .
Defina Tipo como Global .
Clique em Reservar .
Crie um balanceador de carga
Esta seção explica as etapas necessárias para criar um balanceador de carga global que direciona o tráfego HTTP.
Este balanceador de carga usa um front-end para receber o tráfego de entrada e um back-end para distribuir esse tráfego para instâncias íntegras. Como o balanceador de carga é composto por vários componentes, essa tarefa é dividida em diversas partes:
- Configuração de back-end
- Configuração de front-end
- Revise e finalize
Conclua todas as etapas para criar o balanceador de carga.
Inicie sua configuração
No console do Google Cloud, acesse a página Balanceamento de carga .
- Clique em Criar balanceador de carga .
- Para Tipo de balanceador de carga , selecione Application Load Balancer (HTTP/HTTPS) e clique em Avançar .
- Para Face pública ou interna , selecione Face pública (externa) e clique em Avançar .
- Para implantação global ou de região única , selecione Melhor para cargas de trabalho globais e clique em Avançar .
- Para geração do balanceador de carga , selecione Balanceador de carga de aplicativo externo global e clique em Avançar .
- Clique em Configurar .
Configuração básica
- Em Load balancer name , insira
web-app-load-balancer
.
Configuração de back-end
- No painel esquerdo da página Criar balanceador de carga de aplicativo externo global , clique em Configuração de back-end .
- Clique em Criar ou selecione serviços de back-end e buckets de back-end para abrir um menu suspenso. Clique em Serviços de back-end e em Criar um serviço de back-end .
- Na nova janela, para o Nome do aplicativo back-end, insira
web-app-backend
. - Defina o grupo de instâncias como
load-balancing-web-app-group
. - Defina os números das portas como
80
. Isso permite o tráfego HTTP entre o balanceador de carga e o grupo de instâncias. - Em Modo de balanceamento , selecione Utilização .
- Clique em Concluído para criar o backend.
Crie a verificação de integridade do back-end do balanceador de carga:
- Em Verificação de integridade , selecione Criar uma verificação de integridade (ou Criar outra verificação de integridade ) no menu suspenso. Uma nova janela é aberta.
- Na nova janela em Name , insira
web-app-load-balancer-check
. - Defina o protocolo como HTTP .
- Em Porta , insira
80
. - Para este tutorial, defina o caminho da solicitação como
/health
, que é um caminho ao qual o aplicativo Web de demonstração está configurado para responder. Defina os seguintes critérios de integridade :
- Defina o intervalo de verificação para
3
segundos. Isso define a quantidade de tempo desde o início de uma sondagem até o início da próxima. - Defina o tempo limite para
3
segundos. Isso define a quantidade de tempo que Google Cloud aguarda uma resposta a uma sonda. Seu valor deve ser menor ou igual ao intervalo de verificação. - Defina Limiar Saudável para
2
sucessos consecutivos. Isso define o número de análises sequenciais que devem ser bem-sucedidas para que a instância seja considerada íntegra. - Defina Limite Insalubre para
2
falhas consecutivas. Isso define o número de análises sequenciais que devem falhar para que a instância seja considerada não íntegra.
- Defina o intervalo de verificação para
Clique em Salvar e continue a criar a verificação de integridade.
Clique em Criar para criar o serviço de back-end.
Configuração de front-end
- No painel esquerdo da página Criar balanceador de carga de aplicativo externo global , clique em Configuração de front-end .
- Na página de configuração do Frontend , em Name , insira
web-app-ipv4-frontend
. - Defina o protocolo como
HTTP
. - Defina a versão IP para
IPv4
. - Defina o endereço IP como
web-app-ipv4
. - Defina a porta como
80
. - Clique em Concluído para criar o frontend.
Revise e finalize
Verifique suas configurações de balanceamento de carga antes de criar o balanceador de carga:
- No painel esquerdo da página Criar balanceador de carga de aplicativo externo global , clique em Revisar e finalizar .
Na página Revisar e finalizar , verifique as seguintes configurações de back-end :
- O serviço de back-end é
web-app-backend
. - O protocolo Endpoint é
HTTP
. - A verificação de integridade é
web-app-load-balancer-check
. - O grupo de instâncias é
load-balancing-web-app-group
.
- O serviço de back-end é
Na mesma página, verifique se o Frontend usa um endereço IP com protocolo
HTTP
.
No painel esquerdo da página Criar balanceador de carga de aplicativo externo global , clique em Criar para concluir a criação do balanceador de carga.
Talvez seja necessário aguardar alguns minutos para que o balanceador de carga termine de ser criado.
Simulando uma interrupção zonal
Você 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 em uma zona especificada a relatar um status não íntegro no caminho da solicitação /health
. Quando essas instâncias relatam um status não íntegro, elas falham na verificação de integridade do balanceamento de carga, solicitando que o balanceador de carga pare de direcionar o tráfego para essas instâncias.
Monitore para quais zonas o balanceador de carga está direcionando o tráfego.
No console do Google Cloud, acesse Cloud Shell .
O Cloud Shell é aberto em um painel do console do Google Cloud. Pode levar alguns segundos para a sessão inicializar.
Salve o endereço IP externo estático do seu balanceador de carga:
Obtenha o endereço IP externo da regra de encaminhamento de front-end do balanceador de carga digitando o seguinte comando em seu terminal:
gcloud compute forwarding-rules describe web-app-ipv4-frontend --global
Copie
EXTERNAl_IP_ADDRESS
da saída:IPAddress: EXTERNAl_IP_ADDRESS ...
Crie uma variável bash local:
export LOAD_BALANCER_IP=EXTERNAl_IP_ADDRESS
onde
EXTERNAl_IP_ADDRESS
é o endereço IP externo que você copiou.
Para monitorar para quais zonas o balanceador de carga está direcionando 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 done
Este script tenta continuamente se conectar ao aplicativo Web por meio do endereço IP do front-end do balanceador de carga e exibe em qual zona o aplicativo Web está sendo executado para cada conexã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 estiver em execução, comece a simular a interrupção 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
onde
PROJECT_ID
é o ID do projeto atual, que é exibido em cada nova linha no Cloud Shell:user@cloudshell:~ (PROJECT_ID)$
Crie uma variável bash local para a zona que você deseja desabilitar. 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. Esse script faz com que as instâncias do aplicativo Web de demonstração na zona desabilitada gerem respostas não íntegras para a verificação de integridade do balanceador de carga. Respostas não íntegras solicitam que o balanceador de carga direcione o tráfego para longe dessas 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 pequeno atraso, o balanceador de carga para de direcionar o tráfego para as zonas não íntegras, de modo que a saída da primeira janela do terminal para de listar 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
Isso indica que o balanceador de carga está direcionando o tráfego apenas para instâncias íntegras e responsivas.
Mantenha ambos os terminais abertos.
No segundo terminal, crie uma variável bash local para a zona que você deseja 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. Esse script faz com que as instâncias do aplicativo Web de demonstração na zona habilitada produzam respostas íntegras para a verificação de integridade do balanceador de carga. Respostas íntegras solicitam que o balanceador de carga comece a distribuir o tráfego de volta para essas 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
Depois de alguns minutos, a saída da primeira janela do terminal lista 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
Isso indica que o balanceador de carga está direcionando novamente o tráfego de entrada para todas as zonas.
Feche ambos os terminais quando terminar.
(Opcional) Restringindo o tráfego de entrada
Ao criar o grupo de instâncias gerenciadas regionalmente, você poderá acessar cada instância diretamente por meio de seu endereço IP temporário externo. No entanto, agora que você preparou um balanceador de carga e um endereço IP externo estático, talvez queira modificar o firewall da rede para que o tráfego de entrada passe pelo balanceador de carga.
Se você quiser restringir o tráfego de entrada para o balanceador de carga, modifique o firewall da rede para desabilitar o endereço IP externo temporário para cada instância.
Edite a regra de firewall para restringir o tráfego HTTP para que o aplicativo Web só possa ser acessado usando o balanceador de carga:
No console do Google Cloud, acesse a página Firewalls .
Em Nome , clique em
allow-web-app-http
.Clique em Editar .
Modifique os intervalos de IP de origem para permitir apenas sondagens de verificação de integridade:
- Exclua
0.0.0.0/0
. - Na mesma linha, insira
130.211.0.0/22
e pressione Tab . - Na mesma linha, insira
35.191.0.0/16
e pressione Tab .
- Exclua
Clique em Salvar .
Verifique se não é possível conectar-se ao aplicativo Web usando o endereço IP externo efêmero para uma instância específica:
No console do Google Cloud, acesse a página Grupos de instâncias .
Clique em
load-balancing-web-app-group
para ver as instâncias nesse grupo.Em IP externo , clique em um endereço IP para conectar essa instância. Uma nova guia do navegador é aberta, mas o aplicativo Web não abre. (Eventualmente, a página mostrará um erro de tempo limite).
Quando terminar, feche a guia do navegador da instância.
Verifique se você pode se conectar ao aplicativo Web usando o balanceador de carga:
No console do Google Cloud, acesse a página Balanceamento de carga .
Em Name , clique em
web-app-load-balancer
para expandir o balanceador de carga que você acabou de criar.Para se conectar ao aplicativo da web por meio de endereços IP estáticos externos, procure em Frontend e IP:Port e copie o endereço IP. Em seguida, abra uma nova guia do navegador e cole o endereço IP na barra de endereços. Isso deve exibir o aplicativo web de demonstração:
Observe que, sempre que você atualiza a página, o balanceador de carga se conecta a diferentes instâncias em zonas diferentes. Isso acontece porque você não está se conectando diretamente a uma instância; você está se conectando ao balanceador de carga, que seleciona a instância para a qual você será redirecionado.
Quando terminar, feche a guia do navegador do aplicativo web de demonstração.
Limpar
Depois de concluir o tutorial, você poderá limpar os recursos criados para que eles parem de usar a cota e de incorrer em cobranças. As seções a seguir descrevem como excluir ou desativar esses recursos.
Se você criou um projeto separado para este tutorial, exclua o projeto inteiro. Caso contrário, se o projeto tiver recursos que você deseja manter, exclua apenas os recursos criados neste tutorial.
Excluindo 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.
Excluindo recursos específicos
Excluindo o balanceador de carga
No console do Google Cloud, acesse a página Balanceamento de carga .
Clique na caixa de seleção ao lado de
web-app-load-balancer
.Clique em
Excluir na parte superior da página.Na nova janela, marque todas as caixas de seleção. Em seguida, clique em Excluir balanceador de carga e recursos selecionados para confirmar a exclusão.
Excluindo o endereço IP externo estático
No console do Google Cloud, acesse a página Endereços IP externos .
Clique na caixa de seleção ao lado de
web-app-ipv4
.Clique em
Liberar endereço estático na parte superior da página. Na nova janela, clique em Excluir para confirmar a exclusão.
Excluindo 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.
Excluindo o modelo de instância
No console do Google Cloud, acesse a página Modelos de instância .
Clique na caixa de seleção ao lado de
load-balancing-web-app-template
.Clique em
Excluir na parte superior da página. Na nova janela, clique em Excluir para confirmar a exclusão.
Excluindo a rede VPC
No console do Google Cloud, acesse a página de redes VPC .
Clique em
web-app-vpc
.Clique em
Excluir na parte superior da página. Na nova janela, clique em Excluir para confirmar a exclusão.
O que vem a seguir
- Tente outro tutorial:
- Saiba mais sobre grupos de instâncias gerenciadas .
- Saiba mais sobre balanceamento de carga .
- Saiba mais sobre como otimizar a latência de aplicativos com balanceamento de carga .
- Saiba mais sobre como projetar sistemas robustos .
- Saiba mais sobre como criar aplicativos da Web escaláveis e resilientes em Google Cloud .