Neste tutorial interativo, aprenda a usar a recuperação automática para criar apps de alta disponibilidade no Compute Engine.
Aplicativos altamente disponíveis são projetados para apresentar latência e tempo de inatividade mínimos. A disponibilidade é comprometida quando um aplicativo congela ou falha. Os usuários de um aplicativo comprometido podem observar latência ou tempo de inatividade altos.
A recuperação automática permite que os aplicativos comprometidos sejam reiniciados automaticamente. Ela detecta as instâncias que falharam e as recria automaticamente para que os usuários sejam atendidos novamente. Assim, você não precisa mais ajustar manualmente seu aplicativo para que ele volte a funcionar após uma falha.
Objetivos
- Configurar uma verificação de integridade e uma política de recuperação automática.
- Configurar um serviço da Web de demonstração em um grupo de instâncias gerenciadas.
- Simular falhas na verificação de integridade e acompanhar o processo de recuperação automática.
Custos
Neste tutorial, há componentes faturáveis do Google Cloud, como estes:- Compute Engine
Antes de começar
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
Enable the Compute Engine API.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
Enable the Compute Engine API.
Se você preferir trabalhar na linha de comando, instale a Google Cloud CLI.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Arquitetura de apps
O aplicativo inclui os seguintes componentes do Compute Engine:
- Verificação de integridade: uma política de verificação de integridade de HTTP usada pela recuperação automática para detectar instâncias de VM com falha.
- Regras de firewall: com as regras de firewall do Google Cloud, é possível permitir ou negar tráfego para suas instâncias.
- Grupo de instâncias gerenciadas: um grupo de instâncias que executam o mesmo serviço da Web de demonstração.
- Modelo de instância: um modelo usado para criar cada instância nos grupos de instâncias.
Como a verificação de integridade sonda o serviço da Web de demonstração
Uma verificação de integridade envia solicitações de sondagem para uma instância usando um protocolo especificado, como HTTP(S), SSL ou TCP. Para mais informações, veja como as verificações de integridade funcionam e as categorias, protocolos e portas da verificação de integridade.
A verificação de integridade neste tutorial é HTTP. Ela faz uma sondagem no caminho HTTP /health
na porta 80. Para esse tipo de verificação, o pedido de análise só será aprovado se o caminho retornar uma resposta HTTP 200 (OK)
. Para este tutorial, o servidor da Web de demonstração configura o caminho /health
para retornar uma resposta HTTP 200 (OK)
quando estiver íntegro ou uma resposta HTTP 500 (Internal Server Error)
quando não estiver.
Para mais informações, consulte os critérios de sucesso para HTTP, HTTPS e HTTP/2.
Criar a verificação de integridade
Para configurar a recuperação automática, crie uma verificação de integridade personalizada e configure o firewall da rede para permitir sondagens. É possível usar uma verificação de integridade regional ou global. As verificações de integridade regionais reduzem as dependências entre regiões e ajudam a conseguir a residência dos dados. As verificações de integridade globais são convenientes quando você quer usar a mesma verificação de integridade para MIGs em várias regiões. Neste tutorial, você criará uma verificação de integridade global.
Console
Crie uma verificação de integridade.
No Console do Google Cloud, acesse a página Verificações de integridade.
Clique em Create health check.
No campo Nome, use
autohealer-check
.Defina o Escopo como
Global
. Para recuperação automática, use uma verificação de integridade regional ou global.Em Protocolo, selecione
HTTP
.Defina Caminho da solicitação como
/health
. Isso indica qual caminho HTTP a verificação de integridade usa. Para este tutorial, o servidor da Web de demonstração configura o caminho/health
para retornar uma respostaHTTP 200 (OK)
quando estiver íntegro ou uma respostaHTTP 500 (Internal Server Error)
quando não estiver.Defina os Critérios de integridade:
- Defina o Intervalo de verificação como
10
. Isso define o período entre o início de uma sondagem e o início da próxima. - Defina o Tempo limite como
5
. Isso define o tempo que o Google Cloud aguardará pela resposta de uma sondagem. O valor precisa ser menor ou igual ao intervalo de verificação. - Defina Limite íntegro como
2
. Isso define o número sequencial de sondagens que precisam ser bem-sucedidas para que a instância seja considerada íntegra. - Defina o Limite não íntegro como
3
. Isso define o número de falhas seguidas em sondagens para que a instância seja considerada não íntegra.
- Defina o Intervalo de verificação como
Clique em Criar na parte inferior.
Crie uma regra de firewall para permitir que sondagens de verificação de integridade façam solicitações HTTP.
No Console do Google Cloud, acesse a página Criar regra de firewall.
Em Nome, insira
default-allow-http-health-check
.Em Rede, selecione
default
.Em Destinos, selecione
All instances in the network
.Em Filtro de origem, selecione
IP ranges
.Em Intervalos de IPs de origem, insira
130.211.0.0/22
e35.191.0.0/16
.Em Protocolos e portas, selecione TCP e insira
80
.Clique em Criar.
gcloud
Crie uma verificação de integridade global usando o comando
health-checks create http
.gcloud compute health-checks create http autohealer-check \ --global \ --check-interval 10 \ --timeout 5 \ --healthy-threshold 2 \ --unhealthy-threshold 3 \ --request-path "/health"
check-interval
define o período entre o início de uma sondagem e o início da próxima.timeout
define o tempo que o Google Cloud aguardará pela resposta de uma sondagem. O valor precisa ser menor ou igual ao intervalo de verificação.healthy-threshold
define o número sequencial de sondagens que precisam ser bem-sucedidas para que a instância seja considerada íntegra.unhealthy-threshold
define o número de falhas seguidas em sondagens para que a instância seja considerada não íntegra.request-path
indica qual caminho HTTP a verificação de integridade usa. Para este tutorial, o servidor da Web de demonstração configura o caminho/health
para retornar uma respostaHTTP 200 (OK)
quando estiver íntegro ou uma respostaHTTP 500 (Internal Server Error)
quando não estiver.
Crie uma regra de firewall para permitir que sondagens de verificação de integridade façam solicitações HTTP.
gcloud compute firewall-rules create default-allow-http-health-check \ --network default \ --allow tcp:80 \ --source-ranges 130.211.0.0/22,35.191.0.0/16
O que constitui uma boa verificação de integridade de recuperação automática
As verificações de integridade usadas para recuperação automática precisam ser conservadoras, de modo que não excluam e recriem preventivamente suas instâncias. Quando uma verificação de integridade é muito agressiva, o recuperador automático pode confundir instâncias ocupadas com instâncias com falhas e reiniciá-las desnecessariamente, reduzindo a disponibilidade.
unhealthy-threshold
precisa ser maior que1
. O ideal é definir esse valor como3
ou mais. Isso protege contra falhas raras, como a perda de pacotes de rede.healthy-threshold
: o valor2
é suficiente para a maioria dos apps.timeout
: defina esse valor de tempo com um número alto (cinco vezes ou mais além do tempo de resposta esperado). Isso protege contra atrasos inesperados, como instâncias ocupadas ou uma conexão de rede lenta.check-interval
: esse valor precisa ser entre um segundo e duas vezes o tempo limite (nem muito longo nem muito curto). Quando o valor é muito longo, uma instância com falha não é detectada a tempo. Quando o valor é curto demais, as instâncias e a rede poderão ficar ocupadas devido ao alto número de sondagens da verificação de integridade que são enviadas por segundo.
Configurar o serviço da Web
Neste tutorial, é usado um aplicativo da Web armazenado no GitHub. Para saber mais sobre como o aplicativo foi implementado, consulte o repositório GitHub GoogleCloudPlatform/python-docs-samples.
Para configurar o serviço da Web de demonstração, crie um modelo de instância que o execute na inicialização. Em seguida, use esse modelo para implantar um grupo de instâncias gerenciadas e ativar a recuperação automática.
Console
Crie um modelo de instância. Inclua um script de inicialização que execute o servidor da Web de demonstração.
No Console do Google Cloud, acesse a página Modelos de instância.
Clique em Criar modelo de instância.
Defina o Nome como
webserver-template
.Em Configuração da máquina, selecione
micro
(e2-micro).Em Firewall, marque a caixa de seleção Permitir tráfego HTTP.
Clique em Gerenciamento, segurança, discos, rede, locatário único para ver configurações avançadas. Várias guias são exibidas.
Na guia Gerenciamento, localize Automação e 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
Clique em Criar.
Implante o servidor da web como um grupo de instâncias gerenciadas.
No Console do Google Cloud, acesse a página Grupos de instâncias.
Clique em Criar grupo de instâncias.
Defina o Nome como
webserver-group
.Em Região, selecione
europe-west1
.Em Zona, selecione
europe-west1-b
.Em Modelo de instância, selecione
webserver-template
.Em Escalonamento automático, selecione Não fazer escalonamento automático.
Defina o Número de instâncias como
3
.Em Verificação de integridade, selecione
autohealer-check
.Defina Atraso inicial como
90
.Clique em Criar.
Crie uma regra de firewall que permita solicitações HTTP para os servidores da Web.
No Console do Google Cloud, acesse a página Criar regra de firewall.
Em Nome, insira
default-allow-http
.Em Rede, selecione
default
.Em Destinos, selecione
Specified target tags
.Em Tags de destino, insira
http-server
.Em Filtro de origem, selecione
IP ranges
.Em Intervalos de IP de origem, insira
0.0.0.0/0
.Em Protocolos e portas, selecione TCP e insira
80
.Clique em Criar.
gcloud
Crie um modelo de instância. Inclua um script de inicialização que execute o servidor da Web de demonstração.
gcloud compute instance-templates create webserver-template \ --machine-type e2-micro \ --tags http-server \ --metadata startup-script=' 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'
Crie um grupo de instâncias.
gcloud compute instance-groups managed create webserver-group \ --zone europe-west1-b \ --template webserver-template \ --size 3 \ --health-check autohealer-check \ --initial-delay 90
Crie uma regra de firewall que permita solicitações HTTP para os servidores da Web.
gcloud compute firewall-rules create default-allow-http \ --network default \ --allow tcp:80 \ --target-tags http-server
Simular falhas na verificação de integridade
Para simular falhas na verificação de integridade, o servidor da Web de demonstração oferece algumas maneiras de forçar um problema.
Console
Navegue até uma instância do servidor da Web.
No console do Google Cloud, acesse a página Instâncias de VMs.
Na coluna IP externo, clique no endereço IP de qualquer instância do
webserver-group
. Uma nova guia será aberta no navegador da Web. Se a solicitação atingir o tempo limite ou a página da Web não estiver disponível, aguarde um minuto para que o servidor termine a configuração e tente novamente.
Será exibida uma página semelhante à seguinte:
Na página da demonstração, clique em Tornar não íntegra.
Isso faz com que o servidor da Web falhe na verificação de integridade. Especificamente, o servidor faz com que o caminho
/health
retorne um erroHTTP 500 (Internal Server Error)
. É possível por conta própria clicando rapidamente no botão Verificar integridade. Ele parará de funcionar depois que a recuperação automática começar a reinicializar a instância.Espere a recuperação automática agir.
No console do Google Cloud, acesse a página Instâncias de VMs.
Aguarde até que o status da instância do servidor da Web seja alterado. O sinal de verificação verde ao lado do nome da instância muda para um quadrado cinza, indicando que a recuperação automática começou a reinicializar a instância não íntegra.
Clique em Atualizar na parte superior da página periodicamente para ver o status mais recente.
O processo de recuperação automática é concluído quando o quadrado cinza volta a ser o sinal de verificação verde, indicando que a instância está íntegra novamente.
gcloud
Monitore o status do grupo de instâncias. Quando terminar, pare de pressionar
Ctrl+C
.while : ; do \ gcloud compute instance-groups managed list-instances webserver-group \ --zone europe-west1-b \ ; done
NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b RUNNING NONE webserver-template
Se alguma instância mostrar um status que não seja
RUNNING
, comoSTAGING
, aguarde um minuto para que a instância conclua a configuração e tente novamente.Abra uma nova sessão do Cloud Shell com a Google Cloud CLI instalada.
Consiga o endereço de uma instância do servidor da Web.
gcloud compute instances list --filter webserver-group
Sob a coluna
EXTERNAL_IP
, copie o endereço IP de qualquer instância do servidor da Web e salve-a como uma variável bash local.export IP_ADDRESS=EXTERNAL_IP_ADDRESS
Verifique se o servidor da Web concluiu a configuração. O servidor responde com
HTTP 200 OK
.curl --head $IP_ADDRESS/health
HTTP/1.1 200 OK Server: gunicorn/19.6.0 ...
Se você receber um erro
Connection refused
, espere um minuto para que o servidor termine a configuração e tente novamente.Torne o servidor da Web não íntegro.
curl $IP_ADDRESS/makeUnhealthy > /dev/null
Isso faz com que o servidor da Web falhe na verificação de integridade. Especificamente, o servidor faz com que o caminho
/health
retorne um erroHTTP 500 INTERNAL SERVER ERROR
. É possível verificar por conta própria fazendo uma solicitação rápida para/health
. Ele parará de funcionar depois que a recuperação automática começar a reinicializar a instância.curl --head $IP_ADDRESS/health
HTTP/1.1 500 INTERNAL SERVER ERROR Server: gunicorn/19.6.0 ...
Retorne à sua primeira sessão do shell para monitorar o grupo de instâncias e aguarde a ação da recuperação automática.
Quando o processo de recuperação automática tiver iniciado, as colunas
STATUS
eACTION
serão atualizadas, indicando que a reinicialização da instância não íntegra está em curso.NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b STOPPING RECREATING webserver-template
O processo de recuperação automática termina quando a instância mostra novamente o
STATUS
deRUNNING
e aACTION
deNONE
, indicando que a instância foi reiniciada com êxito.NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b RUNNING NONE webserver-template
Quando terminar de monitorar o grupo de instâncias, pressione
Ctrl+C
para parar.
Sinta-se à vontade para repetir este exercício. Veja algumas ideias:
O que acontece se você transformar todas as instâncias em não íntegras de uma só vez? Para mais informações sobre o comportamento da recuperação automática durante falhas simultâneas, consulte Comportamento da recuperação automática.
É possível atualizar a configuração da verificação de integridade para recuperar instâncias o mais rápido possível? Na prática, você precisa definir os parâmetros da verificação de integridade para usar valores conservadores, conforme explicado neste tutorial. Caso contrário, as instâncias correm o risco de serem excluídas e reiniciadas por engano, mesmo que não haja um problema real.
O grupo de instâncias tem uma configuração
initial delay
. É possível determinar o atraso mínimo necessário para este servidor da Web de demonstração? Na prática, você precisa definir o atraso de modo que seja um pouco mais longo (entre 10-20%) do que o tempo que leva para uma instância ser inicializada e começar a atender às solicitações do aplicativo. Caso contrário, a instância pode ficar presa em um ciclo de repetição de recuperação automática.
Ver o histórico de recuperação automática (opcional)
Para ver o histórico de operações da recuperação automática, use o seguinte comando gcloud
:
gcloud compute operations list --filter='operationType~compute.instances.repair.*'
Para mais informações, consulte Como ver o histórico de operações da recuperação automática.
Limpar
Depois de concluir o tutorial, você pode limpar os recursos que criou para que eles parem de usar a cota e gerar cobranças. Nas seções a seguir, você aprenderá a excluir e desativar esses recursos.
Se você tiver criado um projeto separado para este tutorial, exclua o projeto inteiro. Se o projeto tiver recursos que você quer manter, exclua apenas os recursos específicos criados neste tutorial.
Como excluir 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.
Como excluir recursos específicos
Se não for possível excluir o projeto usado para este tutorial, exclua os recursos do tutorial individualmente.
Como excluir o grupo de instâncias
Console
- In the Google Cloud console, go to the Instance groups page.
-
Select the checkbox for
your
webserver-group
instance group. - To delete the instance group, click Delete.
gcloud
gcloud compute instance-groups managed delete webserver-group --zone europe-west1-b -q
Como excluir o modelo da instância
Console
No Console do Google Cloud, acesse a página Modelos de instância.
Clique na caixa de seleção ao lado do modelo.
Clique em
Excluir na parte superior da página. Na nova janela, clique em Excluir para confirmar a remoção.
gcloud
gcloud compute instance-templates delete webserver-template -q
Como excluir a verificação de integridade
Console
No Console do Google Cloud, acesse a página Verificações de integridade.
Clique na caixa de seleção ao lado da verificação de integridade.
Clique em
Excluir na parte superior da página. Na nova janela, clique em Excluir para confirmar a remoção.
gcloud
gcloud compute health-checks delete autohealer-check -q
Como excluir as regras de firewall
Console
No Google Cloud Console, acesse a página Regras de firewall.
Clique nas caixas ao lado das regras de firewall chamadas
default-allow-http
edefault-allow-http-health-check
.Clique em
Excluir na parte superior da página. Na nova janela, clique em Excluir para confirmar a remoção.
gcloud
gcloud compute firewall-rules delete default-allow-http default-allow-http-health-check -q
A seguir
- Teste outro tutorial:
- Saiba mais sobre os grupos de instâncias gerenciadas.
- Saiba mais sobre como projetar sistemas robustos.
- Saiba mais sobre como criar apps da Web escalonáveis e resilientes no Google Cloud.