Pular para o conteúdo principal

Desafio 29: projetar um plano de recuperação de desastres

Tempo Estimado e Custo

90-120 min | Custo estimado: $15-30 | Peso no Exame: 15-20%

Introdução​

A ShopStream é uma plataforma de e-commerce de médio porte atendendo 2 milhões de clientes ativos com $50M em receita anual. Sua plataforma funciona como uma arquitetura classica de 3 camadas no Azure: uma camada web (frontend e CDN), uma camada de API (processamento de pedidos, gerenciamento de inventário, integração com gateway de pagamento), é uma camada de banco de dados (Azure SQL para transações, Redis para estado de sessão, Azure Storage para imagens de produtos). A implantação primária esta em East US 2.

Apos uma interrupcao de 4 horas na última Black Friday causada por uma falha do subsistema de armazenamento em sua região primária, a ShopStream perdeu aproximadamente $800K em receita e confiança significativa dos clientes. O conselho determinou um plano abrangente de disaster recovery com os seguintes requisitos rigidos: a camada web deve recuperar em 5 minutos (RTO), a camada de API em 10 minutos (RTO), e a camada de banco de dados deve ter no máximo 5 segundos de perda de dados (RPO). O orcamento de DR é $3.000/mes para infraestrutura secundária em West US 2.

Este desafio combina todas as habilidades de backup e DR dos desafios anteriores em um plano completo e end-to-end de disaster recovery usando Azure Site Recovery, bancos de dados geo-replicados e roteamento de failover automatizado. Você projetara a estratégia de replicação, criara planos de recuperação com failover sequenciado é validara que o design atende a todos os requisitos dentro do orcamento.

Habilidades do exame cobertas​

  • Recomendar uma solução de recuperação para cargas de trabalho Azure e híbridas que atenda aos objetivos de recuperação
  • Recomendar uma solução de backup e recuperação para computacao
  • Recomendar uma solução de backup e recuperação para bancos de dados

Tarefas de design​

Parte 1: Azure Site Recovery para camadas de computação​

  1. Projete a configuração do Azure Site Recovery (ASR) para as camadas web e API:

    • Camada web: 4 VMs atras de um load balancer (stateless, sessão armazenada no Redis)
    • Camada API: 6 VMs processando pedidos (stateless exceto por transações em andamento)
    • Determine frequência de replicação, retenção de pontos de recuperação e snapshots crash-consistent vs. app-consistent
  2. Configure a replicação ASR para uma VM representativa:

# Create ASR resources in the DR region
az group create --name rg-shopstream-dr --location westus2

# Note: ASR configuration typically uses the portal or PowerShell
# Conceptual configuration:
# Source: east US 2, target: west US 2
# Replication policy:
# - Recovery point retention: 24 hours
# - app-consistent snapshot frequency: 4 hours
# - crash-consistent replication: continuous (rpo ~30 seconds)
  1. Documente a configuração de rede para o site de DR:
    • Virtual network em West US 2 (espelho da produção)
    • Regras NSG replicadas ou pré-configuradas
    • Enderecos IP públicos para load balancers na região de DR
    • Estratégia de DNS para cutover (Azure DNS com TTL baixo ou Traffic Manager)

Parte 2: estratégia de DR da camada de banco de dados​

  1. Projete a estratégia de replicação de banco de dados para cada data store:
Data StoreRegião PrimariaAbordagem de DRRPORTO
Azure SQL (transações)East US 2?5 seg?
Redis Cache (sessões)East US 2?N/A?
Azure Storage (imagens)East US 2???
  1. Configure um Azure SQL failover group para o banco de dados de transações:

    • Failover automático com grace period aprópriado
    • Endpoint read-only para o secundário (pode servir trafego de leitura durante operações normais)
    • Estratégia de connection string que sobrevive ao failover sem alteracoes na aplicação
  2. Projete a estratégia de DR do Redis Cache:

    • Avalie geo-replication para Azure Cache for Redis (tier Premium/Enterprise)
    • Considere se a perda de sessão e aceitavel (usuários re-autenticam) vs. custo de replicação de sessão
    • Documente o processo de failover para Redis
  3. Configure geo-redundant storage (RA-GRS) para imagens de produtos e projete o failover:

    • Como o failover RA-GRS funciona (iniciado pela Microsoft vs. iniciado pelo cliente)?
    • Qual é o RPO para geo-replicação de armazenamento?
    • Como você redireciona leituras para o endpoint secundário durante uma interrupcao?

Parte 3: orquestração do plano de recuperação​

  1. Crie um plano de recuperação sequenciado que define a ordem de failover:

    • Grupo 1: Camada de banco de dados (SQL failover group ativa primeiro)
    • Grupo 2: Camada API (VMs iniciam apos banco de dados estar disponível)
    • Grupo 3: Camada web (VMs frontend iniciam apos API estar disponível)
    • Grupo 4: Roteamento de trafego (DNS/Front Door alterna para região de DR)
  2. Adicione automacao ao plano de recuperação:

    • Script pré-failover: Verificar que a replicação do banco de dados esta atualizada (< 5 segundos atras)
    • Script pós-failover: Atualizar configuração da aplicação para apontar para endpoints de banco de dados de DR
    • Script pós-failover: Executar health checks em cada camada antes de prosseguir para o próximo grupo
    • Script pós-failover: Enviar notificação para a equipe de operações com status do failover
  3. Projete o failover de roteamento de trafego usando Azure Front Door ou Traffic Manager:

    • Qual serviço fornece detecção de failover mais rápida (health probes)?
    • Configure endpoints de health probe para cada camada
    • Defina o limite de failover (quantas probes falhadas antes de alternar?)
    • Calcule o tempo total de failover: detecção + propagacao DNS + startup de VM

Parte 4: failback e testes de DR​

  1. Projete o procedimento de failback apos a região primária recuperar:

    • Re-protect (replicação reversa do DR de volta para o primário)
    • Estratégia de sincronizacao de dados durante failback
    • Planned failover de volta para o primário (zero perda de dados)
    • Tratamento do cenário "split brain" se ambas as regiões aceitarem escritas
  2. Crie um cronograma e procedimento de testes de DR:

    • Test failover (não disruptivo, usa rede isolada no DR)
    • Planned failover (válida cutover real com tempo de inatividade mínimo)
    • Frequência: Com que frequência cada tipo de teste deve ser conduzido?
    • Criterios de sucesso: Quais metricas validam um teste de DR bem-sucedido?
  3. Calcule o custo mensal da infraestrutura de DR e verifique se cabe dentro de $3.000/mes:

    • Custo de replicação ASR por VM
    • VMs na região de DR (só executando durante failover, mas discos pré-provisionados)
    • Secundário do SQL Database (legivel, entao útil para read offload)
    • Custo de replicação GRS do armazenamento
    • Custo mensal total vs. orcamento de $3K

Criterios de sucesso​

  • ⬜ASR configured for web and API tier VMs with apprópriate replication policy
  • ⬜SQL failover group configured with automatic failover and validated RPO meets 5-second requirement
  • ⬜Recovery plan created with correct sequencing (DB -> API -> Web -> Traffic)
  • ⬜Traffic routing failover designed with health probes and failover threshold defined
  • ⬜DR cost estimate documented and validated against $3K/month budget
  • ⬜Failback procedure and DR testing schedule documented

Dicas​

Dica 1: Replicação ASR e RPO

Azure Site Recovery fornece:

  • Replicação continua: Escritas em disco são continuamente replicadas para a região destino
  • RPO: Tipicamente 30 segundos a 2 minutos para VMs (depende da taxa de alteracao de dados)
  • Snapshots app-consistent: A cada 1-12 horas (configuravel) - captura o estado da aplicação
  • Snapshots crash-consistent: A cada 5 minutos - captura o estado do disco

Para as camadas web/API stateless da ShopStream, snapshots crash-consistent são suficientes porque:

  • Sessoes estao no Redis (não na VM)
  • Transações em andamento serao reexecutadas pelo cliente
  • Sem estado de banco de dados local para proteger

Custo do ASR: aproximadamente $25/mes por VM protegida + armazenamento para discos de replica.

Dica 2: Configuração do SQL Failover Group

Configurações-chave do failover group:

  • Grace period: Mínimo 1 hora. E quanto tempo o failover automático espera apos detectar falha do primário antes de alternar. Menor = failover mais rápido mas maior risco de falsos positivos.
  • Endpoint read-write: fg-shopstream.database.windows.net (sempre aponta para o primário)
  • Endpoint read-only: fg-shopstream.secondary.database.windows.net (sempre aponta para o secundário)
  • RPO: Aproximadamente 5 segundos para geo-replicação assincrona (garantido pelo SLA)
az sql failover-group create \
--resource-group rg-shopstream \
--server sql-shopstream-primary \
--partner-server sql-shopstream-dr \
--name fg-shopstream \
--failover-policy Automatic \
--grace-period 1

A connection string da aplicação deve usar o endpoint do failover group, NAO o nome individual do servidor.

Dica 3: Sequenciamento do Recovery Plan no ASR

ASR Recovery Plans permitem que você defina grupos que fazem failover em sequência:

  1. Crie um Recovery Plan no Recovery Services vault
  2. Adicione VMs a grupos numerados (Grupo 1 inicia primeiro)
  3. Adicione ações pré/pós (scripts, Azure Automation runbooks, passos manuais)

Sequenciamento tipico para app de 3 camadas:

  • Grupo 1: Failover de banco de dados (execute failover do SQL failover-group como acao pré)
  • Grupo 2: VMs da camada API (configure para esperar health check do banco de dados)
  • Grupo 3: VMs da camada web (configure para esperar health check da API)
  • Acao pós: Atualize Traffic Manager/Front Door para apontar para a região de DR

Cada grupo completa antes do próximo iniciar. Dentro de um grupo, todas as VMs iniciam em paralelo.

Dica 4: Estimativa de Custo de DR

Detalhamento de custo mensal para DR da ShopStream (orcamento de $3.000):

  • Replicação ASR (10 VMs): 10 x $25 = $250/mes
  • Discos gerenciados de replica (10 VMs, média 256 GB cada): 10 x 256 GB x $0,05 = $128/mes
  • Secundário do SQL Database (General Purpose, 8 vCores): ~$800/mes (mas fornece valor de read offload)
  • Geo-replicação Redis (Premium P1): ~$450/mes (considere se sessões são descartaveis)
  • Delta de GRS do armazenamento: ~$200/mes (GRS custa ~2x LRS para 5 TB de imagens)
  • Egress de rede ASR durante replicação: ~$50/mes

Total estimado: ~$1.878/mes sem geo-replicação Redis, ~$2.328 com ela. Ambos cabem dentro do orcamento de $3K.

Se Redis for muito caro, aceite perda de sessão durante failover (usuários re-logam) e use Premium sem geo-replicação na região de DR, iniciando do zero no failover.

Dica 5: Front Door vs Traffic Manager para Failover

Azure Front Door:

  • Load balancer Layer 7 (HTTP/HTTPS) com health probes
  • Intervalo de probe: tao baixo quanto 5 segundos
  • Detecção de failover: ~10-30 segundos (frequência de probe configuravel x limite)
  • Sem dependência de TTL DNS (usa anycast - mudança de roteamento instantanea)
  • Recursos adicionais: WAF, caching, SSL offload

Azure Traffic Manager:

  • Roteamento baseado em DNS (retorna IP do backend saudavel)
  • Intervalo de probe: 10-30 segundos
  • Detecção de failover: 30-90 segundos + propagacao de TTL DNS (30-300 segundos)
  • Tempo total de failover pode ser 1-5 minutos dependendo das configurações de TTL DNS
  • Mais simples, mais barato, suporta protocolos não-HTTP

Para o RTO de 5 minutos da camada web da ShopStream: Front Door e preferido (detecção mais rápida, sem atraso de propagacao DNS). Traffic Manager funciona se você definir TTL para 30 segundos mas adiciona risco de entradas DNS em cache.

Recursos de aprendizagem​

Verificação de conhecimento​

1. Uma aplicação de 3 camadas tem requisitos de RTO de 5 min (web), 10 min (API) e 30 seg (banco de dados). Por que a camada de banco de dados deve fazer failover PRIMEIRO no plano de recuperação?

A camada API depende do banco de dados - se as VMs da API iniciarem antes do banco de dados estar disponível, elas iraao crashar ou retornar erros. Da mesma forma, a camada web depende da camada API. Os planos de recuperação devem respeitar a ordem de dependência: a camada mais baixa na pilha (banco de dados) deve estar disponível antes que as camadas superiores iniciem. Mesmo que o banco de dados tenha o RTO mais rigoroso (30 seg), inicia-lo primeiro garante que as camadas superiores possam inicializar suas conexões de banco de dados com sucesso. ASR recovery plans aplicam isso através de grupos numerados que executam sequencialmente.

2. A ShopStream usa Azure Front Door para roteamento de trafego. Durante um failover, o que acontece com requisicoes em andamento que estavam sendo servidas pela região primária?

Requisicoes em andamento para a região primária falhada irao timeout e falhar. As health probes do Azure Front Door detectam a falha do backend em 10-30 segundos e param de rotear NOVAS requisicoes para a origem não saudavel. No entanto, requisicoes já em transito (recebidas pelo backend falhado) falharao com timeout ou erros de conexão. O cliente deve retentar, e a retentativa sera roteada para a origem de DR saudavel. Para e-commerce, isso significa que alguns usuários podem ver uma pagina de erro por 10-30 segundos durante o failover. Design de API stateless garante que requisicoes reexecutadas tenham sucesso sem efeitos colaterais (idempotencia e crítica).

3. O orcamento de DR é $3.000/mes. Qual é o componente de custo mais significativo, e como ele pode fornecer valor mesmo durante operações normais?

O secundário do SQL Database (failover group) e o maior custo com ~$800/mes mas fornece capacidade de read-offload durante operações normais. O banco de dados secundário em um failover group tem um endpoint legivel que pode servir consultas pesadas de leitura (relatórios, analytics, busca) sem impactar o primário. Isso efetivamente dobra a capacidade de leitura sem custo adicional além do investimento de DR. Da mesma forma, o secundário de geo-replicação Redis pode servir leituras para usuários geograficamente distribuidos. Converter gasto de DR em melhoria de performance justifica o custo para stakeholders.

4. Apos um failover bem-sucedido para West US 2, a região primária (East US 2) recupera. Qual é a sequência correta para fazer failback sem perda de dados?

Re-protect, sincronizar, depois planned failover. A sequência e: (1) Re-protect: habilitar replicação reversa de West US 2 (primário atual) de volta para East US 2. (2) Esperar a sincronizacao inicial completar (copia completa das alteracoes feitas durante a interrupcao). (3) Verificar que a replicação esta saudavel e a defasagem e mínima. (4) Executar um planned failover de West US 2 de volta para East US 2 (isso brevemente para escritas para garantir zero perda de dados durante o cutover). (5) Re-protect novamente para restaurar a direcao original de DR. Pular re-protection arrisca perda de dados se East US 2 tiver dados desatualizados.

Laboratório de validação​

Implante uma prova de conceito mínima para validar seu design:

  1. Crie um resource group para este laboratório:
az group create --name rg-az305-challenge29 --location eastus
  1. Implante uma VM para usar como fonte de replicação ASR:
az vm create \
--resource-group rg-az305-challenge29 \
--name vm-asr-source \
--image Ubuntu2204 \
--size Standard_B1s \
--zone 1 \
--admin-username azureuser \
--generate-ssh-keys
  1. Crie um Recovery Services vault e defina a política de replicação:
az backup vault create \
--resource-group rg-az305-challenge29 \
--name vault-az305-challenge29 \
--location eastus

az backup policy list \
--resource-group rg-az305-challenge29 \
--vault-name vault-az305-challenge29 \
--query "[].name" -o table
  1. Habilite backup na VM para validar integração com o vault:
az backup protection enable-for-vm \
--resource-group rg-az305-challenge29 \
--vault-name vault-az305-challenge29 \
--vm vm-asr-source \
--policy-name DefaultPolicy
  1. Verifique que a VM esta registrada para proteção:
az backup item list \
--resource-group rg-az305-challenge29 \
--vault-name vault-az305-challenge29 \
--query "[].{Name:name, Status:properties.protectionStatus}" -o table
dica

Esta mini-implantação válida suas decisoes de design com recursos reais do Azure. E opcional, mas recomendada.

Limpeza​

az group delete --name rg-az305-challenge29 --yes --no-wait

Próximo: Challenge 30: Design High Availability for Compute