Añadido: - MANUAL_USUARIO_ARCHITECT.md - MANUAL_USUARIO_CORP.md - MANUAL_USUARIO_DECK.md - MANUAL_USUARIO_HST.md - 07_OPERACION/ (monitoring, runbooks, incident_response) - glosario_she_enterprise_v3.md Eliminado: - glosario_she_enterprise_v2.md (reemplazado por v3) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
295 lines
6.5 KiB
Markdown
295 lines
6.5 KiB
Markdown
# Runbooks - Operación Skynet v8
|
|
|
|
## Runbook: Reinicio de servicios
|
|
|
|
### Objetivo
|
|
Reiniciar servicios del sistema sin afectar operaciones críticas.
|
|
|
|
### Procedimiento
|
|
1. **Verificar estado actual**
|
|
```bash
|
|
systemctl status skynet-core
|
|
systemctl status skynet-database
|
|
systemctl status skynet-api
|
|
```
|
|
|
|
2. **Notificar a usuarios (si aplica)**
|
|
- Enviar notificación de mantenimiento planeado
|
|
- Esperar confirmación de ventana de mantenimiento
|
|
|
|
3. **Reiniciar servicios en orden**
|
|
```bash
|
|
# Primero servicios auxiliares
|
|
systemctl restart skynet-cache
|
|
systemctl restart skynet-broker
|
|
|
|
# Luego servicios principales
|
|
systemctl restart skynet-database
|
|
sleep 30
|
|
systemctl restart skynet-api
|
|
sleep 20
|
|
systemctl restart skynet-core
|
|
```
|
|
|
|
4. **Verificar estado post-reinicio**
|
|
```bash
|
|
systemctl status skynet-core
|
|
systemctl status skynet-database
|
|
systemctl status skynet-api
|
|
|
|
# Verificar conectividad
|
|
curl -s http://localhost:8080/health
|
|
curl -s http://localhost:5432/ping
|
|
```
|
|
|
|
5. **Validar operación normal**
|
|
- Verificar logs sin errores críticos
|
|
- Ejecutar health checks
|
|
- Monitorear métricas durante 5 minutos
|
|
|
|
### Rollback
|
|
Si hay fallos:
|
|
```bash
|
|
systemctl stop skynet-core
|
|
systemctl stop skynet-api
|
|
systemctl stop skynet-database
|
|
|
|
# Restaurar desde último snapshot conocido
|
|
pg_restore -d skynet /backups/skynet_latest.sql
|
|
systemctl start skynet-database
|
|
systemctl start skynet-api
|
|
systemctl start skynet-core
|
|
```
|
|
|
|
### Tiempo estimado
|
|
20-30 minutos con validación
|
|
|
|
---
|
|
|
|
## Runbook: Failover de base de datos
|
|
|
|
### Objetivo
|
|
Cambiar a base de datos secundaria en caso de fallo de primaria.
|
|
|
|
### Prerrequisitos
|
|
- Replicación configurada y activa
|
|
- Sistema de monitoreo detectó fallo de primaria
|
|
- Base de datos secundaria disponible
|
|
|
|
### Procedimiento
|
|
|
|
1. **Confirmar fallo de primaria**
|
|
```bash
|
|
# Intentar conectarse a primaria
|
|
psql -h skynet-primary -U postgres -d skynet -c "SELECT 1"
|
|
|
|
# Verificar lag de replicación
|
|
psql -h skynet-primary -U postgres -c "SELECT slot_name, restart_lsn FROM pg_replication_slots"
|
|
```
|
|
|
|
2. **Promover secundaria**
|
|
```bash
|
|
# En servidor secundario
|
|
pg_ctl promote -D /var/lib/postgresql/14/main
|
|
|
|
# Esperar 30 segundos para que complete
|
|
sleep 30
|
|
|
|
# Verificar estado
|
|
psql -U postgres -c "SELECT pg_is_wal_replay_paused()"
|
|
```
|
|
|
|
3. **Redirigir aplicaciones**
|
|
```bash
|
|
# Actualizar DNS o connection string
|
|
# En skynet-api.conf:
|
|
# database_host = skynet-secondary
|
|
|
|
systemctl restart skynet-api
|
|
```
|
|
|
|
4. **Verificar operación normal**
|
|
```bash
|
|
# Validar escrituras en nueva primaria
|
|
psql -h skynet-secondary -U postgres -d skynet -c "INSERT INTO test VALUES (NOW())"
|
|
|
|
# Monitorear performance
|
|
watch -n 2 'psql -h skynet-secondary -U postgres -c "SELECT count(*) FROM skynet_logs"'
|
|
```
|
|
|
|
5. **Informar del failover**
|
|
- Registrar en incident log
|
|
- Notificar al equipo
|
|
- Agendar recuperación de primaria
|
|
|
|
### Recovery de primaria
|
|
```bash
|
|
# Una vez primaria se recupere:
|
|
pg_basebackup -h skynet-primary -D /var/lib/postgresql/14/main -U replication
|
|
systemctl start postgresql
|
|
```
|
|
|
|
### Tiempo estimado
|
|
5-10 minutos
|
|
|
|
---
|
|
|
|
## Runbook: Restauración de backups
|
|
|
|
### Objetivo
|
|
Restaurar datos desde backups en caso de corrupción o pérdida de datos.
|
|
|
|
### Tipos de restauración
|
|
|
|
#### 1. Restauración completa
|
|
```bash
|
|
# Detener servicios
|
|
systemctl stop skynet-core
|
|
systemctl stop skynet-api
|
|
systemctl stop skynet-database
|
|
|
|
# Restaurar backup completo
|
|
pg_restore -C -d postgres /backups/skynet_full_2025-12-30.sql
|
|
|
|
# Reiniciar servicios
|
|
systemctl start skynet-database
|
|
sleep 30
|
|
systemctl start skynet-api
|
|
systemctl start skynet-core
|
|
```
|
|
|
|
#### 2. Restauración point-in-time (PITR)
|
|
```bash
|
|
# Restaurar hasta timestamp específico
|
|
psql -U postgres -d skynet -c "
|
|
SELECT pg_wal_replay_pause();
|
|
SELECT pg_xact_xmin(xid) FROM pg_xact;
|
|
"
|
|
|
|
# Restaurar WAL archive hasta timestamp
|
|
pg_restore -U postgres -d skynet \
|
|
-e -t tabla_critica /backups/skynet_full.sql
|
|
|
|
# Aplicar WAL hasta punto
|
|
pg_wal_replay_start()
|
|
```
|
|
|
|
#### 3. Restauración de tabla específica
|
|
```bash
|
|
# Restaurar solo tabla corrupta
|
|
pg_restore -d skynet -t tabla_corrupta /backups/skynet_full.sql
|
|
|
|
# Validar integridad
|
|
ANALYZE tabla_corrupta;
|
|
```
|
|
|
|
### Validación post-restauración
|
|
```bash
|
|
# Verificar integridad
|
|
psql -U postgres -d skynet -c "SELECT COUNT(*) FROM pg_stat_user_tables"
|
|
|
|
# Comparar checksums
|
|
pg_basebackup --wal-method=fetch -l "restore_$(date +%s)"
|
|
|
|
# Validar índices
|
|
REINDEX DATABASE skynet;
|
|
```
|
|
|
|
### Tiempo estimado
|
|
- Completa: 30-60 minutos (depende tamaño)
|
|
- PITR: 15-45 minutos
|
|
- Tabla: 5-15 minutos
|
|
|
|
---
|
|
|
|
## Runbook: Escalado de recursos
|
|
|
|
### Objetivo
|
|
Aumentar capacidad de computo o almacenamiento sin downtime.
|
|
|
|
### Escalado de CPU/RAM
|
|
|
|
1. **Evaluar necesidad**
|
|
```bash
|
|
# Monitorear uso actual
|
|
top -n 1 | head -20
|
|
free -h
|
|
|
|
# Proyectar crecimiento
|
|
# Si uso > 80%, escalar inmediatamente
|
|
# Si proyectado > 80% en 7 días, escalar
|
|
```
|
|
|
|
2. **Escalar infraestructura**
|
|
```bash
|
|
# En cloud provider o hypervisor
|
|
# Aumentar CPU cores
|
|
# Aumentar memoria RAM
|
|
# Aplicar cambios sin reinicio (si soportado)
|
|
```
|
|
|
|
3. **Verificar en SO**
|
|
```bash
|
|
lscpu
|
|
free -h
|
|
```
|
|
|
|
4. **Rebalancear servicios**
|
|
```bash
|
|
# Aumentar workers/threads en config
|
|
systemctl restart skynet-api
|
|
|
|
# Aumentar shared_buffers en PostgreSQL
|
|
# postgresql.conf: shared_buffers = 16GB (en lugar de 8GB)
|
|
systemctl restart skynet-database
|
|
```
|
|
|
|
### Escalado de almacenamiento
|
|
|
|
1. **Monitorear uso**
|
|
```bash
|
|
df -h /var/lib/postgresql
|
|
du -sh /backups
|
|
|
|
# Alerta si > 80% utilizado
|
|
```
|
|
|
|
2. **Agregar espacio**
|
|
```bash
|
|
# Opción 1: Aumentar volumen existente
|
|
lvextend -l +50G /dev/vg0/lv_data
|
|
resize2fs /dev/vg0/lv_data
|
|
|
|
# Opción 2: Agregar nuevo volumen
|
|
# Montar en /data2
|
|
# Configurar replicación a nuevo volumen
|
|
```
|
|
|
|
3. **Validar cambios**
|
|
```bash
|
|
df -h /var/lib/postgresql
|
|
# Debe mostrar nuevo tamaño
|
|
```
|
|
|
|
4. **Monitorear performance**
|
|
- Velocidad I/O
|
|
- Latencia de queries
|
|
- Crecimiento de espacios
|
|
|
|
### Tiempo estimado
|
|
- CPU/RAM: 30 minutos - 2 horas (depende downtime)
|
|
- Almacenamiento: 1-4 horas (sin downtime posible)
|
|
|
|
---
|
|
|
|
## Escalabilidad Matriz
|
|
|
|
| Recurso | Umbral Acción | Aumento | Tiempo |
|
|
|---------|---|---|---|
|
|
| CPU | >85% x 5min | +2 cores | 30min-2h |
|
|
| RAM | >80% x 10min | +8GB | 30min-2h |
|
|
| Disco | >85% utilizado | +50% capacidad | 1-4h |
|
|
| Conexiones DB | >80% max_connections | +50 conexiones | 15min |
|
|
| Replication lag | >10GB | Increase bandwidth | Immediate |
|
|
|