Resiliência e BCDR no Azure: Estratégias de Recovery para PME (Availability Zones, ASR, Geo-redundância)

Duarte Spínola  |  2026-07-15

1. O que é Resiliência no Azure

Resiliência na nuvem é a capacidade de um sistema continuar a funcionar — ou recuperar rapidamente — após falhas de hardware, interrupções de rede, desastres naturais ou erros humanos. No Azure, a resiliência não é um produto único: é uma camada de arquitectura que combina Availability Zones, region pairs, geo-redundância, Azure Site Recovery (ASR) e Azure Backup para garantir que as cargas de trabalho sobrevivem a falhas de qualquer magnitude.

O Azure Blog publicou em julho de 2026 o artigo “Built to bounce back: How Azure resiliency evolved”, descrevendo a evolução das capacidades de resiliência da plataforma — desde zonas físicas isoladas até recuperação automática multi-região. Para uma PME portuguesa, isto traduz-se numa questão concreta: quanto tempo pode a sua infraestrutura ficar indisponível sem parar o negócio?

Para quem é este artigo: Administradores de sistemas e responsáveis de IT em PME portuguesas que já têm (ou planeiam ter) cargas de trabalho no Azure e precisam de definir uma estratégia de Business Continuity & Disaster Recovery (BCDR) — sem orçamento de enterprise, mas sem ignorar o essencial.

2. Conceitos Fundamentais: Region Pairs, Availability Zones e Geo-redundância

Antes de configurar qualquer serviço, é obrigatório entender a hierarquia geográfica do Azure. Cada nível protege contra um tipo de falha diferente:

Falha de datacenter individual (energia, rede, cooling)
Nível O que protege contra Exemplo de falha coberta SLA típico
Availability Zone Rack sem energia num dos 3 datacenters da região 99,99% (VMs em 2+ zonas)
Region Pair Falha de região inteira (catástrofe regional) Datacenter em Amsterdam offline — failover para Dublin 99,99% (com geo-redundância)
Geo-redundância Falha catastrófica de uma região completa Região North Europe indisponível — dados replicados em West Europe Depende do serviço (RA-GRS: 99,99%)

Region Pairs — a base da geo-redundância

O Azure emparelha regiões: North Europe ↔ West Europe, UK South ↔ UK West, France Central ↔ France South. Estes pares têm três propriedades críticas para BCDR:

  • Isolamento físico: pelo menos 480 km de separação entre datacenters do par.
  • Replicação automática: alguns serviços (Storage GRS, SQL Database Geo-Replication) replicam automaticamente para o par.
  • Recuperação ordenada: em caso de interrupção regional, o Azure prioriza a recuperação de uma região do par de cada vez.

Availability Zones — isolamento dentro da região

Cada região do Azure que suporta Availability Zones tem um mínimo de três zonas, cada uma com datacenters independentes (energia, cooling e rede próprios). Uma VM colocada num Availability Set com fault domains não é o mesmo que uma VM num Availability Zone — as zonas são fisicamente separadas, os fault domains são racks diferentes dentro do mesmo datacenter.

Característica Availability Set Availability Zone
Isolamento Racks diferentes (fault domains) no mesmo datacenter Datacenters físicos diferentes na mesma região
Protege contra Falha de rack, switch de rede Falha de datacenter inteiro
SLA 99,95% 99,99% (com 2+ zonas)
Custo Sem custo adicional Sem custo adicional (SLA standard)

3. RTO e RPO: Definir Objectivos de Recovery

Antes de implementar qualquer solução técnica, é preciso definir quanto downtime e quanta perda de dados o negócio tolera. Estes dois números determinam toda a arquitectura:

Métrica Definição Pergunta de negócio Exemplo PME
RTO
(Recovery Time Objective)
Tempo máximo aceitável para restaurar o serviço após uma falha “Quanto tempo pode o sistema estar em baixo?” ERP: 4 horas
Site público: 24 horas
RPO
(Recovery Point Objective)
Perda máxima aceitável de dados (medida em tempo) “Quantos dados podemos perder?” ERP: 15 minutos
Site público: 1 hora

O custo da solução de BCDR é directamente proporcional a quão baixos são estes valores. Uma PME que tolera RTO=24h e RPO=1h pode usar Azure Backup simples. Se precisa de RTO=15min e RPO=0, precisa de ASR com replicação contínua — significativamente mais caro.

Boa prática: Comece por classificar as cargas de trabalho em tier 1 (críticas, RTO<1h), tier 2 (importantes, RTO<4h) e tier 3 (não-críticas, RTO<24h). Aplique ASR apenas ao tier 1 — o tier 2 fica com Azure Backup e o tier 3 com backup nocturno.

4. Availability Zones: Configuração Prática

Para tirar partido do SLA de 99,99% das Availability Zones, as VMs têm de ser distribuídas em pelo menos duas zonas e colocadas por trás de um Standard Load Balancer ou Application Gateway. Eis como configurar via Azure CLI e PowerShell:

Passo 1 — Criar um IP público zonal

# Azure CLI — criar IP público redundante entre zonas
az network public-ip create \
  --name myPublicIP-Zonal \
  --resource-group rg-bcdr-pme \
  --sku Standard \
  --zone 1 2 3 \
  --location northeurope

# PowerShell equivalente
az network public-ip create `
  --Name myPublicIP-Zonal `
  --ResourceGroupName rg-bcdr-pme `
  --Sku Standard `
  --Zone 1 2 3 `
  --Location northeurope

Passo 2 — Criar um Standard Load Balancer

# Criar o Load Balancer com IP frontend zonal-redundante
az network lb create \
  --name lb-bcdr-pme \
  --resource-group rg-bcdr-pme \
  --frontend-ip-name frontendIP \
  --public-ip-address myPublicIP-Zonal \
  --backend-pool-name backendPool \
  --sku Standard

Passo 3 — Criar VMs em zonas diferentes

# VM na zona 1
az vm create \
  --name vm-web-01 \
  --resource-group rg-bcdr-pme \
  --image Ubuntu2204 \
  --zone 1 \
  --vnet-name vnet-bcdr \
  --subnet subnet-web \
  --nsg-rule SSH \
  --generate-ssh-keys

# VM na zona 2
az vm create \
  --name vm-web-02 \
  --resource-group rg-bcdr-pme \
  --image Ubuntu2204 \
  --zone 2 \
  --vnet-name vnet-bcdr \
  --subnet subnet-web \
  --nsg-rule SSH \
  --generate-ssh-keys

Passo 4 — Adicionar VMs ao backend pool do Load Balancer

# Adicionar NICs ao backend pool
az network nic ip-config address-pool add \
  --address-pool backendPool \
  --lb-name lb-bcdr-pme \
  --ip-config-name ipconfig1 \
  --nic-name vm-web-01NIC \
  --resource-group rg-bcdr-pme

az network nic ip-config address-pool add \
  --address-pool backendPool \
  --lb-name lb-bcdr-pme \
  --ip-config-name ipconfig1 \
  --nic-name vm-web-02NIC \
  --resource-group rg-bcdr-pme

Passo 5 — Criar regra de health probe e load balancing

# Health probe HTTP 80
az network lb probe create \
  --name probe-http \
  --lb-name lb-bcdr-pme \
  --resource-group rg-bcdr-pme \
  --protocol Http \
  --port 80 \
  --path /

# Regra de load balancing
az network lb rule create \
  --name rule-http-80 \
  --lb-name lb-bcdr-pme \
  --resource-group rg-bcdr-pme \
  --frontend-port 80 \
  --backend-port 80 \
  --frontend-ip-name frontendIP \
  --backend-pool-name backendPool \
  --probe-name probe-http \
  --protocol Tcp \
  --idle-timeout 4

Atenção: O SKU Basic do Load Balancer não suporta Availability Zones. Tem de usar o SKU Standard. O mesmo se aplica ao IP público — use Standard, não Basic.

5. Azure Site Recovery (ASR): Configuração Passo a Passo

O Azure Site Recovery é o serviço de Disaster Recovery as a Service (DRaaS) do Azure. Replica VMs de uma região primária para uma região secundária e permite fazer failover orquestrado em caso de desastre. Para uma PME, é a forma mais simples de cumprir RTO<1h sem manter infraestrutura idle numa segunda região.

Passo 1 — Criar o Recovery Services Vault

# Criar o vault na região secundária (West Europe)
az resource create \
  --resource-type Microsoft.RecoveryServices/vaults \
  --name rsv-bcdr-pme \
  --resource-group rg-bcdr-pme-dr \
  --location westeurope \
  --properties '{"sku":{"name":"Standard"}}'

Passo 2 — Configurar a replicação

# Habilitar replicação de uma VM de North Europe para West Europe
az site-recovery protected-item create \
  --name vm-web-01-replication \
  --protection-container recovery-container-ne \
  --recovery-vault-name rsv-bcdr-pme \
  --resource-group rg-bcdr-pme-dr \
  --fabric-name primary-fabric \
  --policy-name replication-policy \
  --provider-details '{ \
    "providerSpecificInput": { \
      "instanceType": "A2A", \
      "vmId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", \
      "recoveryResourceGroupId": "/subscriptions/.../rg-bcdr-pme-dr", \
      "recoveryAvailabilitySetId": "/subscriptions/.../as-bcdr-pme-dr" \
    } \
  }'

Passo 3 — Definir o objectivo de ponto de recuperação (RPO)

# Criar política de replicação com RPO de 15 minutos
az site-recovery replication-policy create \
  --name replication-policy-15min \
  --vault-name rsv-bcdr-pme \
  --resource-group rg-bcdr-pme-dr \
  --provider-input '{ \
    "appConsistentFrequencyInMinutes": 15, \
    "crashConsistentFrequencyInMinutes": 5, \
    "recoveryPointRetentionInHours": 24 \
  }'

Passo 4 — Verificar estado da replicação

# Verificar estado da replicação
az site-recovery protected-item show \
  --name vm-web-01-replication \
  --protection-container recovery-container-ne \
  --recovery-vault-name rsv-bcdr-pme \
  --resource-group rg-bcdr-pme-dr \
  --fabric-name primary-fabric \
  --query "protectionStatus"

A replicação inicial pode demorar horas ou dias, dependendo do tamanho do disco. Após a replicação inicial, apenas blocos alterados são replicados (delta replication), minimizando a largura de banda consumida.

Passo 5 — Executar um failover de teste (Disaster Drill)

# Failover de teste — NÃO afecta a replicação nem a VM primária
az site-recovery recovery-plan failover-commit \
  --name rp-bcdr-pme \
  --vault-name rsv-bcdr-pme \
  --resource-group rg-bcdr-pme-dr \
  --failover-type TestFailover \
  --failover-direction PrimaryToRecovery

Importante: O failover de teste cria VMs temporárias na região secundária dentro de uma VNet isolada. Estas VMs não afectam a produção. Após validar, execute az site-recovery recovery-plan cleanup para remover os recursos de teste. Faça drills pelo menos 2x por ano — um plano de DR não testado é um plano que não existe.

6. Estratégias de Backup: Azure Backup e Geo-redundância

O ASR replica VMs inteiras, mas o Azure Backup protege contra corrupção de dados, eliminações acidentais e ransomware — cenários em que replicar não ajuda (o dado corrompido é replicado para a secundária). Uma estratégia BCDR completa combina ambos.

Passo 1 — Criar um Recovery Services Vault para Backup

# Vault para backup (região primária)
az backup vault create \
  --name rsv-backup-pme \
  --resource-group rg-bcdr-pme \
  --location northeurope

Passo 2 — Configurar storage redundancy

# Configurar GRS (Geo-Redundant Storage) para backups
az backup vault backup-properties set \
  --name rsv-backup-pme \
  --resource-group rg-bcdr-pme \
  --backup-storage-redundancy GeoRedundant

Tipo de Redundância Cópias Regiões Recomendação PME
LRS (Locally Redundant) 3 cópias no mesmo datacenter 1 região Apenas para dados não-críticos
ZRS (Zone Redundant) 3 cópias em 3 zonas 1 região, 3 zonas Bom para tier 2
GRS (Geo-Redundant) 6 cópias (3+3) 2 regiões (region pair) ✅ Recomendado para tier 1
RA-GRS (Read-Access GRS) 6 cópias + acesso de leitura 2 regiões Para leitura sem failover

Passo 3 — Habilitar backup para uma VM

# Criar política de backup: diário, retenção 30 dias
az backup policy create \
  --name policy-vm-daily-30d \
  --resource-group rg-bcdr-pme \
  --vault-name rsv-backup-pme \
  --workload-type AzureVM \
  --backup-management-type AzureIaaSVM \
  --frequency Daily \
  --retention 30

# Habilitar backup na VM
az backup protection enable-for-vm \
  --vault-name rsv-backup-pme \
  --resource-group rg-bcdr-pme \
  --vm vm-web-01 \
  --policy-name policy-vm-daily-30d

Passo 4 — Soft Delete e proteção contra ransomware

O Azure Backup tem Soft Delete activado por defeito: quando um backup é eliminado (mesmo por um administrador), fica em retenção durante 14 dias antes de ser permanentemente removido. Isto protege contra ransomware que tenta apagar backups antes de encriptar os dados.

# Verificar estado do soft delete
az backup vault backup-properties show \
  --name rsv-backup-pme \
  --resource-group rg-bcdr-pme \
  --query "softDeleteFeature"

# NÃO desactivar — soft delete é uma camada crítica contra ransomware

7. Planos de Recuperação e Disaster Drill

Um plano de recuperação no ASR é um documento que define a ordem em que as VMs são recuperadas, scripts de automação pós-failover e grupos de recuperação. Sem um plano, o failover é manual e caótico — exactamente o que não se quer durante um desastre.

Passo 1 — Criar um Recovery Plan

# Criar plano de recuperação (via Azure CLI preview)
az resource create \
  --resource-type Microsoft.RecoveryServices/vaults/replicationRecoveryPlans \
  --name rp-bcdr-pme \
  --resource-group rg-bcdr-pme-dr \
  --location northeurope \
  --properties '{
    "primaryFabricId": "/subscriptions/.../fabrics/primary-fabric",
    "recoveryFabricId": "/subscriptions/.../fabrics/recovery-fabric",
    "groups": [
      {
        "name": "Grupo 1 — Infraestrutura",
        "replicationProtectedItems": [
          {"id": "/subscriptions/.../replicationProtectedItems/vm-web-01"}
        ]
      },
      {
        "name": "Grupo 2 — Aplicações",
        "replicationProtectedItems": [
          {"id": "/subscriptions/.../replicationProtectedItems/vm-app-01"}
        ]
      }
    ]
  }'

Passo 2 — Adicionar scripts de automação pós-failover

# Script de automação — executado após failover da VM
# Guardar como post-failover.sh no Recovery Plan

#!/bin/bash
echo "Post-failover: actualizar DNS e verificar serviço"

# Actualizar registo DNS para apontar para a nova VM
az network dns record-set a update \
  --name app.pme.pt \
  --zone-name pme.pt \
  --resource-group rg-bcdr-pme-dr \
  --set arecords[0].ipv4Address="$(hostname -I | awk '{print $1}')"

# Verificar se o serviço responde
curl -s -o /dev/null -w "%{http_code}" http://localhost:80/health

Passo 3 — Executar e documentar o Disaster Drill

Fase Acção Responsável Tempo esperado
1 — Iniciar failover de teste Executar az site-recovery recovery-plan failover-commit Sysadmin 5 min
2 — Verificar VMs na secundária Confirmar que VMs arrancaram em West Europe Sysadmin 10 min
3 — Testar aplicação Aceder via IP temporário e validar funcionalidade Equipa IT + negócio 30 min
4 — Documentar tempos Registar RTO real vs RTO objectivo Sysadmin 15 min
5 — Cleanup Remover recursos de teste com az site-recovery recovery-plan cleanup Sysadmin 5 min

8. Custos e Considerações para PME

O BCDR no Azure não é gratuito — mas é significativamente mais barato do que manter um datacenter secundário. Eis uma estimativa de custos para uma PME típica com 5 VMs:

Componente Custo mensal estimado (5 VMs) Observações
Availability Zones 0 € (incluído no SLA) Sem custo adicional — usar Standard LB
Azure Site Recovery ~45 €/mês (5 VMs × ~9€/VM) Inclui replicação e 100 GB de transferência gratuita
Azure Backup (GRS) ~25 €/mês (500 GB protegidos) 0,05 €/GB/mês para GRS
Standard Load Balancer ~18 €/mês Necessário para Availability Zones
Standard Public IP ~3,5 €/mês Um por Load Balancer
Total estimado ~91,50 €/mês Para RTO<1h e RPO=15min em 5 VMs
Otimização de custos: Se a PME tiver VMs com discos geridos Premium, o ASR cobra pelo disco replicado — não pela VM. Considere usar Standard SSD para VMs tier 2/3 e Premium SSD apenas para tier 1. A diferença de custo de replicação pode chegar a 60%.

Compare isto com o custo de manter um datacenter físico secundário (aluguer, energia, hardware, licenças): facilmente 2.000-5.000 €/mês. O Azure reduz isto a menos de 100 €/mês para uma PME típica — mantendo o mesmo RTO e RPO.

9. Erros Comuns

Problema Causa Solução
VM em Availability Zone não atinge 99,99% SLA Usou SKU Basic no Load Balancer/IP em vez de Standard Migrar para Standard SKU — é obrigatório para SLA zonal
Replicação ASR falha após 24h Regra de NSG bloqueia tráfego de replicação na porta 443 Permitir outbound para Storage e AzureSiteRecovery service tags
Failover de teste cria VMs mas não acessíveis VNet de teste não tem subnet ou NSG configurado Pré-configurar VNet de teste com subnet e NSG antes do drill
Backup falha com “snapshot throttled” Limite de snapshots simultâneos por subscrição excedido Distribuir backups em janelas horárias diferentes; usar backup incremental
RPO real é 2h, não 15min conforme a política Política diz 15min mas churn de dados é muito alto Monitorizar Recovery Point Objective (RPO) no portal; reduzir churn ou aumentar largura de banda de replicação
Backup GRS não acessível após failover Vault de backup está na região primária que caiu O GRS replica o backup para o region pair automaticamente; usar vault secundário na região de DR para restores rápidos

10. Checklist Rápido de Verificação

✓ Availability Zones

✅ VMs tier 1 distribuídas em pelo menos 2 Availability Zones

✅ Standard Load Balancer (não Basic) à frente das VMs

✅ IP público com SKU Standard e --zone 1 2 3

✓ Azure Site Recovery

✅ Recovery Services Vault criado na região secundária

✅ Política de replicação com RPO adequado ao tier da VM

✅ Replicação inicial completa (verificar no portal)

✅ Recovery Plan criado com grupos e scripts de automação

✓ Azure Backup

✅ Storage redundancy configurado como GRS para tier 1

✅ Soft Delete activado (não desactivar!)

✅ Retenção mínima de 30 dias; considerar backup imutável para ransomware

✓ Processo

✅ Disaster Drill executado pelo menos 2x por ano

✅ RTO e RPO documentados por carga de trabalho

✅ Contactos de emergência e runbook de failover acessíveis offline

✅ Cargas de trabalho classificadas em tier 1/2/3 com estratégia de recovery definida

Artigos Relacionados

Fonte principal: Azure Blog — “Built to bounce back: How Azure resiliency evolved” (08 Jul 2026). Documentação técnica: Microsoft Learn — Azure Reliability, Azure Site Recovery Overview, Azure Backup Overview.

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário