Disaster Recovery

🚨 Plano de Recuperação de Desastres (DR) - CSuite

Versão: 1.0
Última Atualização: 2025-01-02
Responsável: Equipe de Operações CSuite


📋 Índice

  1. Visão Geral
  2. Objetivos de Recuperação (RTO/RPO)
  3. Cenários de Desastre
  4. Procedimentos de Recuperação
  5. Backup e Restore
  6. Failover Procedures
  7. Testes e Validação
  8. Contatos de Emergência

🎯 Visão Geral

Este documento define os procedimentos para recuperação do ecossistema CSuite em caso de desastre que resulte em perda parcial ou total de serviços, dados ou infraestrutura.

Escopo

Princípios

  1. Minimizar RTO (Recovery Time Objective): Tempo máximo para restaurar serviços
  2. Minimizar RPO (Recovery Point Objective): Perda máxima de dados aceitável
  3. Priorização: Serviços críticos primeiro (Gateway, Context, Executive)
  4. Documentação: Todos os passos devem ser documentados durante a recuperação

⏱️ Objetivos de Recuperação (RTO/RPO)

Serviços Críticos (Tier 1)

Serviço RTO RPO Prioridade
csuite-gateway 15 min 0 min 🔴 Crítico
csuite-context 30 min 5 min 🔴 Crítico
csuite-executive 30 min 5 min 🔴 Crítico
MySQL (core) 1 hora 15 min 🔴 Crítico
MySQL (csuite_context) 1 hora 15 min 🔴 Crítico

Serviços Importantes (Tier 2)

Serviço RTO RPO Prioridade
csuite-cfo-ops 2 horas 30 min 🟡 Importante
csuite-operations 2 horas 30 min 🟡 Importante
csuite-sales-manager 2 horas 30 min 🟡 Importante
MySQL (outros schemas) 2 horas 30 min 🟡 Importante

Serviços de Suporte (Tier 3)

Serviço RTO RPO Prioridade
Grafana 4 horas 1 hora 🟢 Suporte
Kibana 4 horas 1 hora 🟢 Suporte
Prometheus 4 horas 1 hora 🟢 Suporte

🌋 Cenários de Desastre

Cenário 1: Perda Total de Servidor Principal

Descrição: Servidor principal inacessível (hardware failure, rede, datacenter)

Impacto:
- Todos os serviços CSuite offline
- Dados podem estar comprometidos
- Gateway inacessível

Ação Imediata:
1. Verificar status do servidor (ping, SSH)
2. Tentar acesso via console/ILO
3. Se inacessível por > 5 min, iniciar DR

Procedimento: Ver Seção 4.1


Cenário 2: Corrupção de Banco de Dados

Descrição: Corrupção detectada em schemas críticos

Impacto:
- Serviços podem estar rodando mas com dados inconsistentes
- Erros em queries críticas
- Possível perda parcial de dados

Ação Imediata:
1. Isolar schema afetado (read-only se possível)
2. Verificar extensão da corrupção
3. Decidir: restore completo ou parcial

Procedimento: Ver Seção 4.2


Cenário 3: Perda de Rede/DNS

Descrição: Problema de conectividade ou DNS

Impacto:
- Serviços podem estar rodando mas inacessíveis
- Gateway não resolve domínios
- Usuários não conseguem acessar

Ação Imediata:
1. Verificar conectividade de rede
2. Testar resolução DNS
3. Verificar configuração Traefik

Procedimento: Ver Seção 4.3


Cenário 4: Ataque/Segurança

Descrição: Comprometimento de segurança detectado

Impacto:
- Dados podem estar comprometidos
- Serviços podem estar sob controle de atacante
- Necessário isolamento imediato

Ação Imediata:
1. ISOLAR serviços afetados
2. Notificar equipe de segurança
3. Preservar evidências (logs, snapshots)
4. Não restaurar até investigação completa

Procedimento: Ver SECURITY_INCIDENT_RESPONSE.md


🔧 Procedimentos de Recuperação

4.1 Perda Total de Servidor

Pré-requisitos

Passo a Passo

1. Provisionar Novo Servidor (se necessário)

# Configurar servidor com mesmo OS (Amazon Linux 2023)
# Instalar Docker e Docker Swarm
sudo yum install -y docker
sudo systemctl enable docker
sudo systemctl start docker
sudo docker swarm init

2. Restaurar Secrets do Docker Swarm

# Restaurar secrets de backup seguro
# Exemplo: mysql_password, jwt_secret, etc.
echo "SECRET_VALUE" | docker secret create mysql_password -

3. Restaurar Configurações

# Clonar repositório com docker-stack.yml
git clone <repo>
cd c-suite

# Verificar configurações
cat docker-stack.yml

4. Restaurar Bancos de Dados

# Ver seção 5.2 - Restore de Banco de Dados
# Restaurar schemas na ordem:
# 1. core
# 2. csuite_context
# 3. csuite_executive
# 4. Outros schemas

5. Deploy dos Serviços

# Deploy do stack
docker stack deploy -c docker-stack.yml csuite

# Verificar status
docker service ls
docker service ps csuite-gateway_csuite-gateway

6. Validação

# Testar gateway
curl https://csuite.internut.com.br/health

# Testar serviços críticos
curl https://csuite.internut.com.br/context/api/health
curl https://csuite.internut.com.br/executive/api/health

7. Atualizar DNS (se necessário)

# Se IP mudou, atualizar registros DNS
# Verificar propagação
dig csuite.internut.com.br

4.2 Corrupção de Banco de Dados

Detecção

Sintomas:
- Erros "Table is marked as crashed"
- Inconsistências em queries
- Checksum failures
- Serviços retornando erros 500

Verificação:

-- Verificar integridade de tabelas críticas
CHECK TABLE core_companies;
CHECK TABLE csuite_context.ctx_events;
CHECK TABLE csuite_executive.pg_decision_log;

-- Verificar logs de erro MySQL
SHOW ENGINE INNODB STATUS;

Procedimento de Restore

1. Isolar Schema Afetado

-- Se possível, tornar read-only
ALTER DATABASE csuite_context READ ONLY;

-- Ou parar serviços que usam o schema
docker service scale csuite-context_csuite-context=0

2. Identificar Último Backup Válido

# Listar backups disponíveis
ls -lh /backup/mysql/
# Verificar timestamp do backup
stat /backup/mysql/csuite_context_20250102_0300.sql.gz

3. Restaurar Schema

# Ver seção 5.2 - Restore de Banco de Dados
# Restaurar schema específico
mysql -u root -p csuite_context < /backup/mysql/csuite_context_20250102_0300.sql

4. Verificar Integridade

-- Verificar tabelas críticas
SELECT COUNT(*) FROM ctx_events;
SELECT COUNT(*) FROM ctx_policy_outcomes;

-- Verificar foreign keys
SELECT * FROM information_schema.TABLE_CONSTRAINTS 
WHERE TABLE_SCHEMA = 'csuite_context';

5. Reativar Serviços

docker service scale csuite-context_csuite-context=1

4.3 Perda de Rede/DNS

Verificação de Conectividade

# Testar conectividade básica
ping 8.8.8.8
ping csuite.internut.com.br

# Verificar DNS
nslookup csuite.internut.com.br
dig csuite.internut.com.br

# Verificar roteamento
traceroute csuite.internut.com.br

Procedimento

1. Verificar Status dos Serviços

# Serviços podem estar rodando
docker service ls
docker service ps csuite-gateway_csuite-gateway

2. Verificar Configuração Traefik

# Verificar labels do gateway
docker service inspect csuite-gateway_csuite-gateway | grep -A 10 Labels

# Verificar certificados SSL
docker secret ls | grep tls

3. Verificar Firewall/Security Groups

# Verificar regras de firewall
sudo iptables -L -n
# Verificar security groups (AWS)
aws ec2 describe-security-groups

4. Testar Acesso Interno

# Testar acesso direto ao container
docker exec -it $(docker ps -q -f name=csuite-gateway) curl localhost:8000/health

5. Restaurar Conectividade
- Atualizar DNS se necessário
- Ajustar firewall/security groups
- Verificar roteamento de rede
- Reiniciar Traefik se necessário


💾 Backup e Restore

5.1 Estratégia de Backup

MySQL - Backups Automáticos

Frequência:
- Schemas Críticos (core, csuite_context, csuite_executive): Diário às 03:00
- Outros Schemas: Diário às 04:00
- Retenção: 30 dias diários + 12 mensais

Script de Backup:

#!/bin/bash
# /usr/local/bin/backup_mysql.sh

DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR="/backup/mysql"
SCHEMA=$1

# Backup schema específico
mysqldump -u backup_user -p$BACKUP_PASSWORD \
  --single-transaction \
  --routines \
  --triggers \
  $SCHEMA | gzip > $BACKUP_DIR/${SCHEMA}_${DATE}.sql.gz

# Remover backups antigos (>30 dias)
find $BACKUP_DIR -name "${SCHEMA}_*.sql.gz" -mtime +30 -delete

Cron:

# Backup diário às 03:00
0 3 * * * /usr/local/bin/backup_mysql.sh core
0 3 * * * /usr/local/bin/backup_mysql.sh csuite_context
0 3 * * * /usr/local/bin/backup_mysql.sh csuite_executive

Docker Secrets

Backup:

# Exportar secrets (cuidado com segurança!)
docker secret ls
# Secrets devem estar em repositório seguro (Vault, AWS Secrets Manager)

Configurações Docker Stack

Backup:

# Configurações em Git
git add docker-stack.yml
git commit -m "Backup configuração $(date)"
git push

5.2 Restore de Banco de Dados

Restore Completo de Schema

# 1. Parar serviços que usam o schema
docker service scale csuite-context_csuite-context=0

# 2. Fazer backup atual (se possível)
mysqldump -u root -p csuite_context > /tmp/csuite_context_before_restore.sql

# 3. Dropar schema (CUIDADO!)
mysql -u root -p -e "DROP DATABASE IF EXISTS csuite_context;"

# 4. Recriar schema
mysql -u root -p -e "CREATE DATABASE csuite_context CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# 5. Restaurar backup
gunzip < /backup/mysql/csuite_context_20250102_0300.sql.gz | mysql -u root -p csuite_context

# 6. Verificar integridade
mysql -u root -p csuite_context -e "SHOW TABLES;"
mysql -u root -p csuite_context -e "SELECT COUNT(*) FROM ctx_events;"

# 7. Reativar serviços
docker service scale csuite-context_csuite-context=1

Restore Parcial (Tabela Específica)

# Extrair apenas tabela específica do backup
gunzip < /backup/mysql/csuite_context_20250102_0300.sql.gz | \
  sed -n '/^-- Table structure for table `ctx_events`/,/^-- Table structure for table/p' | \
  mysql -u root -p csuite_context

🔄 Failover Procedures

Failover de Servidor Principal

Quando usar:
- Servidor principal inacessível por > 15 minutos
- Hardware failure confirmado
- Manutenção planejada

Procedimento:
1. Provisionar servidor secundário (se não existir)
2. Restaurar backups
3. Atualizar DNS para apontar para novo servidor
4. Deploy dos serviços
5. Validação completa
6. Comunicar mudança aos stakeholders


✅ Testes e Validação

Teste de DR - Trimestral

Objetivo: Validar procedimentos e identificar gaps

Cenário de Teste:
1. Simular perda de servidor principal
2. Executar procedimento de DR
3. Medir RTO real vs. RTO objetivo
4. Validar integridade de dados (RPO)
5. Documentar lições aprendidas

Checklist de Validação:
- [ ] Gateway acessível
- [ ] Serviços críticos respondendo
- [ ] Dados consistentes
- [ ] Logs sendo gerados
- [ ] Monitoramento funcionando
- [ ] SSL/TLS válidos
- [ ] Autenticação funcionando


📞 Contatos de Emergência

Equipe de Operações

Função Nome Contato Disponibilidade
On-Call Principal - - 24/7
Backup On-Call - - 24/7
DBA - - Horário comercial
DevOps Lead - - Horário comercial

Escalation Path

  1. Nível 1: On-Call Principal (15 min)
  2. Nível 2: DevOps Lead + DBA (30 min)
  3. Nível 3: CTO/CIO (1 hora)

Canais de Comunicação


📝 Notas Importantes

Lições Aprendidas

Atualizações do Plano


🔗 Documentos Relacionados


Última Revisão: 2025-01-02
Próxima Revisão: 2025-04-02 (trimestral)

🔊 Text-to-Speech

1.0x
1.0
Pronto para reproduzir