Skip to content
SP StackPractices
advanced Por StackPractices

Recuperación ante Desastres — RTO, RPO y Runbooks de Recuperación Resilientes

Guía práctica para la planificación de recuperación ante desastres: definición de RTO y RPO, estrategias de backup, failover multi-región y construcción de runbooks de recuperación que minimizan downtime.

Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.

Overview

La recuperación ante desastres (DR) es el conjunto de políticas, herramientas y procedimientos que permiten la recuperación o continuación de infraestructura tecnológica crítica después de un desastre natural o inducido por humanos. Protege contra pérdida de datos y minimiza downtime cuando ocurre lo inesperado.

Esta guía cubre la definición de objetivos de recuperación, estrategias de backup, arquitecturas multi-región y runbooks accionables.

When to Use

  • Operas un servicio crítico para el negocio donde downtime es inaceptable
  • Necesitas cumplir con requerimientos regulatorios de protección de datos
  • Quieres protegerte contra caídas de proveedor cloud, fallas de región o corrupción de datos
  • Estás diseñando o revisando tu estrategia de backup y recuperación
  • Necesitas definir objetivos RTO y RPO para tu organización

Core Concepts

ConceptoDescripciónValores Típicos
RTO (Recovery Time Objective)Downtime máximo aceptable después de un desastreMinutos a 24 horas
RPO (Recovery Point Objective)Pérdida máxima de datos aceptable (tiempo desde último backup)Cero a 24 horas
MTTR (Mean Time to Recovery)Tiempo promedio para restaurar servicio después de fallaMedido en minutos/horas
MTBF (Mean Time Between Failures)Tiempo promedio entre fallas del sistemaMedido en días/meses
FailoverCambio a sistema standby cuando el primario fallaAutomático o manual
FailbackRetorno al sistema primario después de recuperaciónPlanificado y probado

Disaster Recovery Strategies

EstrategiaRTORPOCostoDescripción
Backup y RestauraciónHoras a díasHoras a díasBajoBackups periódicos restaurados en nueva infraestructura
Pilot Light10-60 minutosMinutosMedioSistemas core siempre ejecutando; escalar bajo demanda
Warm StandbyMinutosCasi ceroMedio-AltoRéplica reducida lista para escalar
Hot Standby / Activo-ActivoCasi ceroCasi ceroAltoRéplica completa sirviendo tráfico activamente
Multi-Región Activo-ActivoCasi ceroCeroMuy AltoTodas las regiones sirven tráfico simultáneamente

Step-by-Step DR Planning

1. Definir Objetivos de Recuperación

Establece RTO y RPO para cada sistema crítico:

# Ejemplo: Objetivos de recuperación por nivel de servicio
tiers:
  - name: tier_1_critico
    examples: [payment-processing, user-authentication]
    rto: "5 minutos"
    rpo: "0 minutos"
    strategy: "activo-activo"
  - name: tier_2_importante
    examples: [reporting, analytics]
    rto: "4 horas"
    rpo: "1 hora"
    strategy: "warm-standby"
  - name: tier_3_estandar
    examples: [internal-tools, staging]
    rto: "24 horas"
    rpo: "24 horas"
    strategy: "backup-restore"

2. Mapear Dependencias y Rutas Críticas

Entiende qué debe recuperarse y en qué orden:

# Ejemplo: Grafo de dependencias de servicios para orden de recuperación
# La recuperación debe suceder en orden de dependencias:
# 1. DNS / CDN
# 2. Balanceadores / API gateways
# 3. Bases de datos (primaria primero)
# 4. Capas de caché
# 5. Servicios de aplicación
# 6. Workers en segundo plano
# 7. Analytics / jobs por lotes

Checklist de mapeo de dependencias:

  • Identificar puntos únicos de falla
  • Mapear topologías de replicación de bases de datos
  • Documentar dependencias de APIs externas
  • Anotar servicios críticos de terceros
  • Verificar que sistemas de backup sean independientes del primario

3. Diseñar Estrategia de Backup

Coincidir frecuencia de backup y retención con requerimientos de RPO:

Tipo de DatosFrecuencia de BackupRetenciónAlmacenamiento
Base de datos transaccionalContinuo o por hora30 días + anualRegión cruzada + frío
Archivos/almacenamiento de objetosSincronización diaria90 díasRegión cruzada
Configuración/IaCCada cambio (Git)Para siempreGit + almacén de artefactos
LogsStreaming en tiempo real30-90 díasHot + frío
# Ejemplo: Estrategia de backup PostgreSQL
# Archivado continuo (WAL) para recuperación point-in-time
cat <<EOF >> postgresql.conf
archive_mode = on
archive_command = 'aws s3 cp %p s3://my-backups/wal/%f'
wal_level = replica
EOF

# Backup base diario
pg_basebackup -D /backups/$(date +%Y%m%d) -Ft -z -P

4. Implementar Arquitectura Multi-Región

Diseñar para falla regional desde el inicio:

# Ejemplo: Kubernetes activo-pasivo multi-región
# Región primaria: us-east-1
# Región secundaria: us-west-2

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-service
spec:
  replicas: 3
  template:
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 100
              podAffinityTerm:
                labelSelector:
                  matchLabels:
                    app: api-service
                topologyKey: topology.kubernetes.io/zone

Patrones multi-región:

  • Réplicas de lectura: Región primaria escribe; regiones secundarias leen réplicas
  • Activo-pasivo: Primaria activa; secundaria en standby (pilot light o warm)
  • Activo-activo: Ambas regiones sirven tráfico (requiere sincronización de datos)
  • Basado en celdas: Arquitectura sharded con celdas en múltiples regiones

5. Crear Runbooks de Recuperación

Documentar procedimientos de recuperación paso a paso:

# Runbook: Failover de Base de Datos a Región Secundaria

## Trigger
- Health check de base de datos en región primaria falla por >2 minutos
- Alerta automática dispara: `database-primary-down`

## Steps

1. **Verificar interrupción** (1 min)
   - Revisar dashboard de monitoreo
   - Confirmar problema a nivel de región (no instancia aislada)

2. **Iniciar failover** (2 min)
   - Ejecutar: `kubectl exec failover-script -- promote-replica`
   - Verificar: nueva primaria acepta escrituras

3. **Actualizar DNS** (2 min)
   - Cambiar CNAME de base de datos a región secundaria
   - TTL: 60 segundos (pre-configurado)

4. **Verificar salud de aplicación** (3 min)
   - Revisar tasas de error de aplicación
   - Verificar flujos críticos de usuarios

5. **Comunicar** (5 min)
   - Actualizar página de estado
   - Notificar stakeholders

## Rollback
- Cuando la primaria se recupera, planificar failback durante ventana de mantenimiento
- Validar consistencia de datos antes de failback

6. Probar Recuperación Regularmente

Los planes de DR no probados son solo deseos:

Tipo de PruebaFrecuenciaAlcance
Ejercicio de mesaTrimestralCaminar runbooks sin ejecutar
Prueba de restauración de backupMensualRestaurar base de datos desde backup para verificar integridad
Drill de failoverTrimestralPromover réplica, actualizar DNS, verificar servicio
Ingeniería del caosMensualInyectar fallas (ej. terminar base de datos primaria)
Simulación completa de DRAnualSimular falla completa de región y recuperación
# Ejemplo: Verificación automatizada de integridad de backup
import subprocess

def test_backup_restore():
    latest_backup = get_latest_backup()
    temp_instance = create_temp_database()
    
    restore_result = subprocess.run([
        'pg_restore',
        '--dbname', temp_instance.connection_string,
        latest_backup.path
    ], capture_output=True)
    
    if restore_result.returncode != 0:
        alert_oncall("Prueba de restauración de backup falló!")
        return False
    
    # Verificar que conteos de filas coincidan con valores esperados
    rows = temp_instance.query("SELECT count(*) FROM critical_table")
    assert rows[0][0] > 0, "Base de datos restaurada parece vacía"
    
    cleanup(temp_instance)
    return True

Best Practices

  • Automatiza donde sea posible. El failover manual a las 3 AM es propenso a errores.
  • Mantén runbooks simples. Una persona debería poder ejecutarlos bajo presión.
  • Prueba backups restaurándolos. Un backup que no puedes restaurar no es un backup.
  • Monitorea lag de replicación. Si el lag excede el RPO, alerta inmediatamente.
  • Documenta suposiciones. ¿Qué pasa si DNS está caído? ¿Qué pasa si el autor del runbook no está disponible?
  • Separa infraestructura de DR. Los sistemas de DR no deberían depender de recursos de la región primaria.

Common Mistakes

  • Backups no probados. Muchas organizaciones descubren backups corruptos solo durante un desastre real.
  • Sobre-ingeniería para sistemas de bajo nivel. Coincidir estrategia de DR con criticidad de negocio.
  • Olvidar consistencia de datos. La replicación asíncrona puede perder transacciones durante failover.
  • Ignorar mantenimiento de runbooks. Runbooks obsoletos con comandos desactualizados causan confusión.
  • Sin plan de comunicación. Durante una interrupción, los stakeholders necesitan actualizaciones oportunas.

Variants

  • DR cloud-native: Usar servicios administrados con replicación integrada (RDS Multi-AZ, Azure Site Recovery, réplicas Cloud SQL).
  • DR on-premise: Enfocarse en backups off-site en cinta, sitios warm y ciclos de adquisición de hardware.
  • DR híbrido: DR basado en cloud para cargas on-premise (pilot light inverso).

FAQ

Q: ¿Cómo elijo entre objetivos RTO/RPO? Equilibra costo contra impacto de negocio. Una plataforma de trading necesita segundos; una wiki interna tolera horas.

Q: ¿Cuál es la estrategia mínima viable de DR? Como mínimo: backups diarios automatizados, restauraciones mensuales probadas y un procedimiento de recuperación documentado.

Q: ¿Cómo manejo failback de base de datos después de recuperación? Planifica failback durante ventanas de bajo tráfico. Valida consistencia de datos y reproduce transacciones perdidas.

Q: ¿Debería usar el mismo proveedor cloud para DR? DR multi-cloud provee la mayor resiliencia pero añade complejidad. Empieza con multi-región, mismo proveedor.

Conclusion

La recuperación ante desastres es un seguro para tu infraestructura. Define objetivos claros, diseña estrategias apropiadas, documenta runbooks y prueba regularmente. El momento de descubrir un problema con tu plan de DR es durante un drill, no durante un desastre real.