Este documento é destinado a arquitetos e pessoas que trabalham em operações e equipes administrativas. O documento descreve um padrão de exemplo que você pode usar para suas próprias implantações no Google Cloud. Nesse padrão, um balanceador de carga direciona o tráfego para Mecanismo de Computação instâncias em grupos de instâncias gerenciadas que atendem ao conteúdo. Em uma interrupção, você atualiza o Balanceamento de carga HTTP(S) externo configuração e failover para um site estático em Armazenamento na núvem. Para concluir este tutorial, você precisa de um nome de domínio registrado que você controle e deseja usar com este documento. Em implantações de produção, seu site provavelmente inclui muito mais arquivos e código de aplicativo adicional nas máquinas virtuais do grupo de instâncias gerenciadas (VMs) do que é mostrado neste documento. O Cloud Storage então hospeda um ambiente mais versão estática limitada que fornece funcionalidade mínima. Em um failover morno cenário, os usuários veem este site limitado até que os grupos de instâncias gerenciadas recuperar e pode servir o tráfego para a experiência completa do site. Neste tutorial, você implanta recursos para criar um ambiente conforme mostrado no seguinte imagem: Quando precisar fazer failover, atualize a configuração do balanceador de carga para direcionar tráfego para Cloud Storage, conforme mostrado na imagem a seguir: Esse padrão de failover morno equilibra o custo de execução de outro gerenciado grupo de instâncias em uma região diferente que você só usa quando as regiões primárias falhar. O custo de um site estático usando Cloud Storage é menor do que executando outro grupo de instâncias gerenciadas, mas há um pequeno atraso enquanto você atualiza a carga configuração do balanceador entre as opções de hospedagem. O site limitado experiência no Cloud Storage é melhor do que um site indisponível e pobre experiência do cliente. Para uma abordagem alternativa que usa Cloud DNS em vez de externo Balanceamento de carga HTTP(S) para controlar o failover, consulte Implante um servidor da web recuperável morno usando o Cloud DNS com Compute Engine e Cloud Storage. Esse padrão é útil se você tiver ou quiser usar o Cloud DNS. Para executar aplicativos confiáveis ​​no Google Cloud, recomendamos que você crie sua infraestrutura de aplicativos para lidar com interrupções. Dependendo da sua aplicação e necessidades de negócios, você pode precisar de um cold failover, warm failover ou hot padrão de failover. Para obter mais informações sobre como determinar a melhor abordagem para suas próprias aplicações, consulte o Guia de planejamento de recuperação de desastres. Este documento usa uma base servidor web apache, mas a mesma abordagem para a implantação da infraestrutura se aplica a outros ambientes de aplicativos que você precisa criar. ## Objetivos - - Crie grupos de instâncias gerenciadas regionais com uma imagem de VM personalizada. - Crie um intervalo do Cloud Storage. - Criar e configurar balanceamento de carga HTTP(S) externo. - Teste o failover do servidor web quente com um balanceador de carga atualizado configuração. - Teste a recuperação e o failback com uma configuração de balanceador de carga atualizada. ## Custos Este tutorial usa os seguintes componentes faturáveis ​​do Google Cloud: - - Mecanismo de Computação - Rede - Armazenamento na núvem Para gerar uma estimativa de custo com base no uso projetado, use a calculadora de preços. ## Antes de você começar - - Faça login na sua conta do Google Cloud. Se você é novo em Google Nuvem, crie uma conta para avaliar o desempenho de nossos produtos em cenários do mundo real. Novos clientes também recebem $ 300 em créditos gratuitos para executar, testar e implantar cargas de trabalho. - No console do Google Cloud, na página do seletor de projeto, selecione ou crie um projeto do Google Cloud. - Verifique se o faturamento está ativado para seu projeto do Cloud. Aprender como verifique se o faturamento está ativado em um projeto. - Ative a API Compute Engine. - Instale e inicialize a CLI do Google Cloud. - No console do Google Cloud, na página do seletor de projeto, selecione ou crie um projeto do Google Cloud. - Verifique se o faturamento está ativado para seu projeto do Cloud. Aprender como verifique se o faturamento está ativado em um projeto. - Ative a API Compute Engine. - Instale e inicialize a CLI do Google Cloud. Você pode executar a CLI do Google Cloud no console sem instalar o CLI do Google Cloud. Para executar a CLI gcloud no console, use o Cloud Shell ## Prepare o ambiente Nesta seção, você define algumas variáveis ​​para seus nomes de recursos e Localizações. Essas variáveis ​​são usadas pelos comandos da CLI do Google Cloud conforme você implantar os recursos. Ao longo deste documento, salvo indicação em contrário, você insere todos os comandos em Nuvem Shell ou seu ambiente de desenvolvimento local. - Substituir com seu próprio ID de projeto. Se desejado, forneça seu próprio sufixo de nome para recursos para ajudar a pesquisar e identificar eles, como PROJECT_ID aplicativo Especifique duas regiões, como e us-west1 , e uma zona dentro de uma dessas regiões, como us-west2 . Esta zona define onde a VM base inicial é criado e usado para criar uma imagem para o grupo de instâncias gerenciadas us-west1-a Por fim, defina um domínio usado para seu site estático, como exemplo.com PROJECT_ID= PROJECT_ID NAME_SUFFIX= aplicativo REGIÃO1= us-west1 REGIÃO2= us-west2 ZONA= us-west1-a DOMÍNIO= exemplo.com ## Crie uma VPC e uma sub-rede Para fornecer acesso de rede às VMs, você cria Virtual Private Cloud (VPC) e sub-redes. Como você precisa de grupos de instâncias gerenciadas em duas regiões, crie um sub-rede em cada região. Para mais informações sobre as vantagens do costume modo de sub-rede para gerenciar intervalos de endereços IP em uso em seu ambiente, consulte Use redes VPC de modo personalizado. - Crie a VPC com um modo de sub-rede personalizado: redes de computação gcloud criam rede-$NAME_SUFFIX --subnet-mode=custom Agora crie duas sub-redes na nova VPC, uma para cada região. Defina seus próprios intervalos de endereços, como e 10.1.0.0/20 , que caber no seu alcance de rede: 10.2.0.0/20 sub-redes de redes de computação gcloud criar n sub-rede-$NAME_SUFFIX-$REGION1 n --network=network-$NAME_SUFFIX n --range= 10.1.0.0/20n --region=$REGION1 sub-redes de redes de computação gcloud criar n sub-rede-$NAME_SUFFIX-$REGION2 n --network=network-$NAME_SUFFIX n --range= 10.2.0.0/20n --region=$REGION2 ## Criar regras de firewall Para permitir que o tráfego de rede flua corretamente na VPC, use regras de firewall. - Crie regras de firewall para permitir o tráfego da Web e verificações de integridade para a carga balanceador e grupos de instâncias gerenciadas: gcloud compute firewall-rules create allow-http-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --direction=INGRESS n --priority=1000 n --action=ALLOW n --rules=tcp:80 n -- source-ranges=0.0.0.0/0 n --target-tags=http-server gcloud compute firewall-rules create allow-health-check-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --action=allow n --direction=ingress n --source-ranges=130.211.0.0/22,35.191. 0.0/16 n --target-tags=permitir verificação de integridade n --rules=tcp:80 A regra HTTP permite o tráfego para qualquer VM onde o http-servertag é aplicado, e de qualquer fonte usando o 0.0.0.0/0 intervalo. Para o regra de verificação de saúde, intervalos padrão para o Google Cloud são definidos para permitir que a plataforma verifique a integridade dos recursos. Para permitir o tráfego SSH para a configuração inicial de uma imagem de VM base, o escopo a regra de firewall para seu ambiente usando o --source-rangeparameter. Você pode precisar trabalhar com sua equipe de rede para determinar quais intervalos de origem sua organização usa Substituir com seus próprios escopos de endereço IP: IP_ADDRESS_SCOPE gcloud compute firewall-rules create allow-ssh-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --direction=INGRESS n --priority=1000 n --action=ALLOW n --rules=tcp:22 n -- intervalos de origem = IP_ADDRESS_SCOPE Depois de criar as regras de firewall, verifique se as três regras foram adicionado: lista de regras de firewall gcloud compute n --project=$PROJECT_ID n --filter="NETWORK=network-$NAME_SUFFIX"A saída de exemplo a seguir mostra que as três regras foram corretamente criado: NOME DIREÇÃO DE REDE PRIORIDADE PERMITIR permitir-check-health-app network-app INGRESS 1000 tcp:80 permitir-http-app rede-app INGRESS 1000 tcp:80 permitir-ssh-app rede-app INGRESS 1000 tcp:22 ## Crie e configure uma imagem VM base Para criar VMs idênticas que você implanta sem configuração adicional, você use uma imagem de VM personalizada. Esta imagem captura a configuração do sistema operacional e do Apache e é usado para criar cada VM no grupo de instâncias gerenciadas nas próximas etapas. Na VM, você cria um básico arquivo index.html no disco permanente e montá-lo para /var/www/example.com. Um arquivo de configuração do Apache em /etc/apache2/sites-available/example.com.conf serve conteúdo da web do localização do disco permanente montado O diagrama a seguir mostra a página HTML básica servida pelo Apache que é armazenada no disco permanente: Você constrói esse ambiente nas etapas a seguir. - Crie uma VM base com um disco permanente anexado: gcloud compute instances create vm-base-$NAME_SUFFIX n --zone=$ZONE n --machine-type=n1-standard-1 n --subnet=subnet-$NAME_SUFFIX-$REGION1 n --tags=http-server n --image=debian-10-buster-v20210420 n --image-project=debian-cloud n --boot-disk-size=10GB n --boot-disk-type=pd-balanced n --boot-disk- device-name=vm-base-$NAME_SUFFIX n --create-disk=type=pd-ssd,name=disk-base-$NAME_SUFFIX,size=10GB,device-name=disk-base-$NAME_SUFFIX Você usa parâmetros definidos no início deste documento para nomear a VM e conecte-se à sub-rede correta. Os nomes também são atribuídos a partir dos parâmetros para o disco de inicialização e o disco de dados. Para instalar e configurar o site simples, conecte-se à VM base usando SSH: gcloud compute ssh vm-base-$NAME_SUFFIX --zone=$ZONE Em sua sessão SSH para a VM, crie um script para configurar a VM em um editor de sua escolha. O exemplo a seguir usa nano como editor: nano configure-vm. Cole o seguinte script de configuração no arquivo: bin/bash NAME_SUFFIX= aplicativo # Cria diretório para os arquivos básicos do site sudo mkdir -p /var/www/example.com sudo chmod a+w /var/www/example.com sudo chown -R www-data: /var/www/example.com # Encontre o nome do disco, formate e monte-o DISK_NAME="google-disk-base-$NAME_SUFFIX"DISK_PATHfind /dev/disk/by-id -name DISK_NAME}"| xargs -Ireadlink -f n sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard $DISK_PATH sudo mount -o discard,padrão $DISK_PATH /var/www/example.com # Instale o Apache sudo apt-get update&& sudo apt-get -y install apache2 # Escreva um arquivo HTML básico no disco permanente montado sudo tee -a /var/www/example.com/index.html >/dev/null EOF' Exemplo de HA / DR

Bem-vindo a um site do Compute Engine com failover moderado para Cloud Storagep>

*:80> ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/example.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined EOF # Habilite o arquivo de configuração do Apache e recarregue o serviço sudo a2dissite 000-padrão sudo a2ensite exemplo.com.conf sudo systemctl recarregar apache2 Atualize o variável para corresponder ao valor definido em no início deste documento, como aplicativo NAME_SUFFIX. Escreva o arquivo e saia do seu editor. Por exemplo, no Nano você usa Ctrl-O para escrever o arquivo, então saia com Ctrl-X. Torne o script de configuração executável e execute-o: chmod +x configure-vm../configure-vm. Saia da sessão SSH para a VM: saída Obtenha o endereço IP da VM e use curl para ver a página da web básica: curl $(gcloud compute instances describe vm-base-$NAME_SUFFIX n --zone $ZONE n --format="value(networkInterfaces.accessConfigs.[0].natIPn O site básico é retornado, conforme mostrado na saída de exemplo a seguir: Exemplo de HA / DR

Bem-vindo a um site do Compute Engine com failover moderado para Cloud Storagep>

gcloud compute images create image-disk-$NAME_SUFFIX n --source-disk=disk-base-$NAME_SUFFIX n --source-disk-zone=$ZONE # Criar modelos de instância gcloud compute instance-templates create template-$NAME_SUFFIX-$REGION1 n --machine-type=n1-standard-1 n --subnet=projects/$PROJECT_ID/regions/$REGION1/subnetworks/subnet-$NAME_SUFFIX-$REGION1 n --region=$REGION1 n --tags=http-server n --metadatastartup-script /bin/bashn'echo\ UUIDblkid\ -s\ UUID\ -o\ value\ /dev/sdb /var/www/example. com\ ext4\ discard,defaults,nofail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,excluir automaticamente=sim gcloud compute instance-templates create template-$NAME_SUFFIX-$REGION2 n --machine-type=n1-standard-1 n --subnet=projects/$PROJECT_ID/regions/$REGION2/subnetworks/subnet-$NAME_SUFFIX-$REGION2 n --region=$REGION2 n --tags=http-server n --metadatastartup-script /bin/bashn'echo\ UUIDblkid\ -s\ UUID\ -o\ value\ /dev/sdb /var/www/example. com\ ext4\ discard,defaults,nofail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,excluir automaticamente=sim # Crie uma verificação de integridade para instâncias de VM gcloud compute health-checks create http http-basic-check-$NAME_SUFFIX n --port 80 # Crie os grupos de instâncias gerenciadas gcloud compute instance-groups managed create instance-group-$NAME_SUFFIX-$REGION1 n --template=template-$NAME_SUFFIX-$REGION1 n --size=2 n --region=$REGION1 n --health-check=http- verificação básica-$NAME_SUFFIX gcloud compute instance-groups managed create instance-group-$NAME_SUFFIX-$REGION2 n --template=template-$NAME_SUFFIX-$REGION2 n --size=2 n --region=$REGION2 n --health-check=http- verificação básica-$NAME_SUFFIX ## Crie e configure um balanceador de carga Para que os usuários acessem seu site, você precisa permitir o tráfego para as VMs que são executados nos grupos de instâncias gerenciadas. Você também deseja redirecionar automaticamente tráfego para novas VMs se houver uma falha de zona em um grupo de instâncias gerenciadas. Na seção a seguir, você cria um balanceador de carga externo com um serviço de back-end para tráfego HTTP na porta 80, use a verificação de integridade criada nas etapas anteriores e mapeie um IP externo endereço por meio do serviço de back-end. Para mais informações, veja Como configurar um balanceador de carga HTTP externo simples. - Crie e configure o balanceador de carga para seu aplicativo: # Configurar regras de porta para porta HTTP 80 gcloud compute instance-groups set-named-ports n instance-group-$NAME_SUFFIX-$REGION1 n --named-ports http:80 n --region $REGION1 gcloud compute instance-groups set-named-ports n instance-group-$NAME_SUFFIX-$REGION2 n --named-ports http:80 n --region $REGION2 # Crie um serviço de back-end e adicione os grupos de instâncias gerenciadas a ele gcloud compute backend-services create n web-backend-service-$NAME_SUFFIX n --protocol=HTTP n --port-name=http n --health-checks=http-basic-check-$NAME_SUFFIX n --global gcloud compute backend-services add-backend n web-backend-service-$NAME_SUFFIX n --instance-group=instance-group-$NAME_SUFFIX-$REGION1 n --instance-group-region=$REGION1 n --global gcloud compute backend-services add-backend n web-backend-service-$NAME_SUFFIX n --instance-group=instance-group-$NAME_SUFFIX-$REGION2 n --instance-group-region=$REGION2 n --global # Crie um mapa de URL para o serviço de back-end gcloud compute url-maps create web-map-http-$NAME_SUFFIX n --default-service web-backend-service-$NAME_SUFFIX # Configure o encaminhamento para o tráfego HTTP gcloud compute target-http-proxies create n http-lb-proxy-$NAME_SUFFIX n --url-map web-map-http-$NAME_SUFFIX gcloud compute forwarding-rules create n http-content-rule-$NAME_SUFFIX n --global n --target-http-proxy=http-lb-proxy-$NAME_SUFFIX n --ports=80 Obtenha o endereço IP da regra de encaminhamento para o tráfego da web: Regras de encaminhamento de computação IP_ADDRESSgcloud descrevem http-content-rule-$NAME_SUFFIX n --global n --format="value(IPAddressn Usar curl, ou abra seu navegador da web, para visualizar o site usando o IP endereço do balanceador de carga da etapa anterior: curl $IP_ADDRESS Leva alguns minutos para o balanceador de carga concluir a implantação e direcionar corretamente o tráfego para o seu back-end. Um erro HTTP 404 é retornado se o balanceador de carga ainda está sendo implantado. Se necessário, aguarde alguns minutos e tente acessar o site novamente. O site básico é retornado, conforme mostrado na saída de exemplo a seguir: Exemplo de HA / DR

Bem-vindo a um site do Compute Engine com failover moderado para Cloud Storagep>

grupos de instâncias gerenciadas se recuperam e podem veicular o tráfego para o site completo experiência. - Verifique o domínio que você deseja usar com seu bucket do Cloud Storage. Crie um bucket do Cloud Storage para corresponder ao nome do domínio que você possui e quer usar: gsutil mb gsstatic-web.$DOMAIN o A variável DOMAIN definida no início deste documento é usada, como . Este exemplo armazena os arquivos estáticos em exemplo.com static-web.example.com. Crie um arquivo local que você copie para o intervalo do Cloud Storage no Próxima Etapa: cat< index.html HA / DR example

Welcome to a test static web server with warm failover from Cloud Storagep>

HA / DR example

Welcome to a test static web server with warm failover from Cloud Storagep>

curlagain, or open your web browser, to access the IP address of the load balancer: curl $IP_ADDRESS It might take a few minutes for the load balancer to update the configuration and to correctly direct traffic back to your managed instance groups. If needed, wait a few minutes and try to access the website again. The main website from the managed instance groups is returned, as shown in the following example output: HA / DR example p>Welcome to a Compute Engine website with warm failover to Cloud Storagep> ## Clean up To avoid incurring charges to your Google Cloud account for the resources used in this tutorial, either delete the project that contains the resources, or keep the project and delete the individual resources. To delete the individual resources created in this document, complete the following steps: - Delete the Cloud Storage bucket: gsutil rm -r gsstatic-web.$DOMAIN Delete the load balancer configuration: gcloud compute forwarding-rules delete n http-content-rule-$NAME_SUFFIX --global --quiet gcloud compute target-http-proxies delete n http-lb-proxy-$NAME_SUFFIX --quiet gcloud compute url-maps delete web-map-http-$NAME_SUFFIX --quiet gcloud compute url-maps delete web-map-http-bucket-$NAME_SUFFIX --quiet gcloud compute backend-services delete n web-backend-service-$NAME_SUFFIX --global --quiet gcloud compute backend-buckets delete web-bucket-$NAME_SUFFIX --quiet Delete the managed instance groups and health check: gcloud compute instance-groups managed delete n instance-group-$NAME_SUFFIX-$REGION1 n --region=$REGION1 --quiet gcloud compute instance-groups managed delete n instance-group-$NAME_SUFFIX-$REGION2 n --region=$REGION2 --quiet gcloud compute health-checks delete http-basic-check-$NAME_SUFFIX --quiet Delete the instance templates, images, base VM, and persistent disks: gcloud compute instance-templates delete n template-$NAME_SUFFIX-$REGION1 --quiet gcloud compute instance-templates delete n template-$NAME_SUFFIX-$REGION2 --quiet gcloud compute images delete image-$NAME_SUFFIX --quiet gcloud compute images delete image-disk-$NAME_SUFFIX --quiet gcloud compute instances delete vm-base-$NAME_SUFFIX n --zone=$ZONE --quiet Delete the firewall rules. gcloud compute firewall-rules delete n allow-health-check-$NAME_SUFFIX --quiet gcloud compute firewall-rules delete n allow-ssh-$NAME_SUFFIX --quiet gcloud compute firewall-rules delete n allow-http-$NAME_SUFFIX --quiet Delete the subnet and VPC. gcloud compute networks subnets delete n subnet-$NAME_SUFFIX-$REGION1 --region=$REGION1 --quiet gcloud compute networks subnets delete n subnet-$NAME_SUFFIX-$REGION2 --region=$REGION2 --quiet gcloud compute networks delete network-$NAME_SUFFIX --quiet ## What's next - - For an alternative approach that uses Cloud DNS instead of external HTTP(S) Load Balancing to control the failover, see Deploy a warm recoverable web server using Cloud DNS with Compute Engine and Cloud Storage. This pattern is useful if you have, or want to use, Cloud DNS. - To learn how how to determine the best approach for your own applications and which recovery method to use, see the Disaster recovery planning guide. - To see other patterns for applications, such as cold and hot failover, see Disaster recovery scenarios for applications. - For more ways to handle scale and availability, see the Patterns for scalable and resilient apps. - Explore reference architectures, diagrams, tutorials, and best practices about Google Cloud. Take a look at our Cloud Architecture Center.