Pular para o conteúdo principal
Este documento descreve a estratégia de recuperação de desastres (DR), Objetivo de Tempo de Recuperação (RTO) e Objetivo de Ponto de Recuperação (RPO) para a infraestrutura EKB AWS/EKS. Ele cobre capacidades HA integradas, sistemas de backup ativos, procedimentos de recuperação e lacunas conhecidas.
Para instruções de implantação, consulte o Guia de Implantação Terragrunt.

Resumo da Arquitetura e Alta Disponibilidade

Componentes da Infraestrutura

Capacidades HA Atuais


Objetivos RTO / RPO


Sistemas de Backup

1. Estado Terraform / Terragrunt — S3

O que é feito backup: Todo o estado da infraestrutura (EKS, rede, IAM, releases Helm). Implementação:
  • Bucket S3 por ambiente: ekb-terraform-state-<nome-do-ambiente> (inicializado via terragrunt/environments/<nome-do-ambiente>/state/)
  • Versionamento habilitado — qualquer versão anterior do estado pode ser restaurada
  • Criptografia no lado do servidor (AES-256)
  • Tabela DynamoDB para lock de estado
Recuperação: Reverta para qualquer versão anterior do estado no S3 e, em seguida, execute novamente terragrunt apply. RPO: A cada commit de terragrunt apply — contínuo.

2. Volumes Persistentes EBS — AWS Data Lifecycle Manager

O que é feito backup: Volumes EBS anexados a pods (PostgreSQL do Automator, Supabase MinIO, quaisquer cargas de trabalho estatais). Implementação: Política do AWS Data Lifecycle Manager (DLM) direcionada a tags de ambiente.
Recuperação:
RPO: Até 24 horas (snapshots diários). Reduza aumentando a frequência do agendamento DLM.

3. CloudNativePG (HA Supabase DB) — Backups Barman Cloud

Aplica-se a: Ambientes com ENABLE_CNPG=true e ENABLE_HA_SUPABASE_DB=true. O que é feito backup: O cluster Postgres CloudNativePG (ha-supabase-db), incluindo streaming WAL (Write-Ahead Log) contínuo para S3 ou MinIO e backups base completos agendados via CRD ScheduledBackup do CNPG. Implementação (configurado em values/ha-supabase-db.yaml):
Verificar status do backup:
Recuperação no ponto no tempo (PITR):
RPO: Quase zero para clusters com WAL habilitado (segundos de lag, limitado pelo intervalo de upload do WAL).

4. ElastiCache Redis — Replicação Multi-AZ

Aplica-se a: Ambientes com ENABLE_AWS_SERVICES=true. O Redis não é um armazenamento de dados primário — ele armazena cache transitório e dados de sessão. O foco da DR está em um failover rápido em vez de backup/restauração. Implementação:
  • Multi-AZ habilitado com failover automático
  • Criptografia em repouso e em trânsito
  • Uma falha de nó primário promove uma réplica automaticamente (< 1 min)
RPO: Os dados do Redis são efêmeros por design. Falhas de cache após o failover são esperadas; a aplicação repopula a partir do banco de dados.

5. Amazon MQ (RabbitMQ) — Fila de Mensagens

Aplica-se a: Ambientes com ENABLE_AWS_SERVICES=true. Implementação:
  • Implantação instância única (padrão) ou active/standby
  • Mensagens em trânsito podem ser perdidas durante uma reinicialização do broker; projete consumidores para serem idempotentes
  • Interface de gerenciamento disponível na porta 15671 (SSL)
RPO: Instância única — mensagens em trânsito no momento da falha podem ser perdidas. Use o modo de implantação active/standby para reduzir este risco.

Mecanismos de Auto-Recuperação

Karpenter — Provisionamento e Recuperação de Nós

  • Consolidação: WhenEmptyOrUnderutilized — nós ociosos são terminados automaticamente
  • Tratamento de interrupção de Spot: Escuta eventos de interrupção SQS; drena e substitui nós Spot antes da terminação
  • Drift de nó: Nós usando AMIs ou configurações desatualizadas são substituídos automaticamente quando enable_drift = true
  • Tempo de recuperação: Novo nó provisionado em 0–10 minutos

KEDA — Escalonamento Automático de Pods

  • Réplicas mínimas: 2 para todos os serviços (Web, API, Celery, Automator) — previne ponto único de falha
  • Limite de CPU: 60–70% aciona escalonamento para cima
  • Limite de memória: 80% aciona escalonamento para cima
  • Estabilização de scale-down: 30 segundos — evita oscilação
  • Tempo de recuperação: Pods com falha são reagendados em 0–2 minutos

Anti-Afinidade de Pods do Kubernetes

Todos os serviços sem estado usam anti-affinité preferredDuringSchedulingIgnoredDuringExecution em kubernetes.io/hostname para distribuir pods entre nós e AZs.

Procedimentos de Recuperação

Cenário 1: Falha de AZ

Comportamento esperado: O Karpenter provisiona nós de substituição nas AZs restantes; o KEDA reagenda pods; o ALB para de rotear para targets não saudáveis. Verificação:
Nenhuma intervenção manual é necessária sob circunstâncias normais.

Cenário 2: Falha do Nó Primário do Postgres (CloudNativePG)

O CloudNativePG promove automaticamente uma réplica a primário.
As aplicações se reconectam via PgBouncer — nenhuma alteração de string de conexão necessária.

Cenário 3: Restaurar Volume EBS a partir de Snapshot


Cenário 4: Recriação Completa da Infraestrutura

Usado após falha catastrófica ou ao reconstruir uma região.
RTO estimado: 30–60 minutos para o cluster completo; 60–120 minutos se os dados EBS/CNPG precisarem ser restaurados.

Cenário 5: Reversão de Estado Terragrunt


Observabilidade e Alertas (SigNoz)

Quando ENABLE_SIGNOZ=true, o SigNoz é implantado no namespace monitoring e fornece:
  • Rastreamento distribuído para todos os serviços EKB
  • Métricas do cluster via agente DaemonSet k8s-infra (CPU, memória, status do pod)
  • Agregação de logs de todos os pods
  • Alertas — configure regras de alerta no SigNoz para notificar sobre loops de crash de pods, altas taxas de erro ou pressão de nós
Para fins de DR, os painéis do SigNoz são a principal ferramenta para diagnosticar e confirmar a recuperação após um incidente. Os próprios dados do SigNoz são armazenados em volumes PV EBS e são cobertos pela política de snapshots EBS.

Lacunas e Recomendações