Capítulo 12.1 - Administración en producción
Objetivos de Aprendizaje
Al final de este capítulo, usted será capaz de:
- Aplicar las mejores prácticas de producción
- Configurar el mantenimiento del sistema
- Gestionar las actualizaciones
- Implementar alta disponibilidad
- Documentar los procedimientos
- Crear runbooks
Mejores Prácticas de Producción
Seguridad
# 1. Usuarios y permisos
# - Menor privilegio
# - Sin root directo
# - sudo configurado
# 2. Firewall
# - Reglas restrictivas
# - Solo puertos necesarios
# - Monitoreo de conexiones
# 3. Actualizaciones
# - Regulares
# - Probadas en staging
# - Planificadas
# 4. Monitoreo
# - Supervisión continua
# - Alertas configuradas
# - Logs centralizados
Rendimiento
# 1. Recursos
# - Monitoreo CPU, RAM, disco
# - Alertas de umbral
# - Escalado planificado
# 2. Optimización
# - Solo servicios necesarios
# - Caché configurado
# - Compresión activada
# 3. Mantenimiento
# - Limpieza regular
# - Rotación de logs
# - Archivado de datos
Mantenimiento del Sistema
Planificación
# Ventana de mantenimiento
# - Horas de baja actividad
# - Comunicación con el equipo
# - Rollback planificado
# Checklist de mantenimiento
# 1. Backup antes
# 2. Pruebas en staging
# 3. Notificación a usuarios
# 4. Ejecución del mantenimiento
# 5. Verificación post-mantenimiento
# 6. Documentación de cambios
Scripts de Mantenimiento
#!/bin/bash
# Script de mantenimiento semanal
LOG="/var/log/maintenance-$(date +%Y%m%d).log"
{
echo "=== Mantenimiento $(date) ==="
# Actualización del sistema
echo "Actualización de paquetes..."
apt update && apt upgrade -y
# Limpieza
echo "Limpieza..."
apt autoremove -y
apt autoclean
# Rotación de logs
echo "Rotación de logs..."
logrotate -f /etc/logrotate.conf
# Limpieza de logs antiguos
echo "Limpieza de logs antiguos..."
find /var/log -name "*.log" -mtime +30 -delete
# Verificación de espacio en disco
echo "Espacio en disco:"
df -h
echo "=== Fin de mantenimiento ==="
} | tee "$LOG"
Estrategias de Backup
Tipos de Backup
# 1. Full (Completo)
# - Todos los datos
# - Lento, mucho espacio
# - Restauración rápida
# 2. Incremental (Incremental)
# - Solo cambios
# - Rápido, poco espacio
# - Restauración más lenta
# 3. Differential (Diferencial)
# - Desde el último full
# - Equilibrio tiempo/espacio
Script de Backup
#!/bin/bash
# Backup automático
BACKUP_DIR="/backup"
SOURCE_DIR="/data"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/backup-$DATE.tar.gz"
# Crear backup
tar -czf "$BACKUP_FILE" "$SOURCE_DIR"
# Verificar
if [ $? -eq 0 ]; then
echo "Backup exitoso: $BACKUP_FILE"
# Eliminar backups > 7 días
find "$BACKUP_DIR" -name "backup-*.tar.gz" -mtime +7 -delete
else
echo "ERROR: Fallo en backup" | mail -s "Alerta Backup" admin@example.com
exit 1
fi
Backup con Cron
# Crontab
# Backup diario a las 2h
0 2 * * * /usr/local/bin/backup.sh
# Backup semanal completo
0 1 * * 0 /usr/local/bin/backup-full.sh
Alta Disponibilidad
Redundancia
# 1. Múltiples servidores
# - Load balancing
# - Failover automático
# - Replicación de datos
# 2. Monitoreo
# - Health checks
# - Detección de fallos
# - Conmutación automática
# 3. Backup
# - Múltiples copias
# - Sitios diferentes
# - Pruebas de restauración
Health Checks
#!/bin/bash
# Health check servidor
CHECKS_FAILED=0
# Verificar servicios
for service in nginx mysql redis; do
if ! systemctl is-active --quiet "$service"; then
echo "ERROR: $service inactivo"
CHECKS_FAILED=$((CHECKS_FAILED + 1))
fi
done
# Verificar espacio en disco
DISK=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK" -gt 90 ]; then
echo "ERROR: Disco al ${DISK}%"
CHECKS_FAILED=$((CHECKS_FAILED + 1))
fi
# Alerta si hay problema
if [ "$CHECKS_FAILED" -gt 0 ]; then
echo "ALERTA: $CHECKS_FAILED check(s) fallido(s)" | \
mail -s "Alerta Health Check" admin@example.com
exit 1
fi
Documentación
Runbooks
Procedimientos operativos:
# Runbook: Reinicio de Servicio
## Objetivo
Reiniciar un servicio en producción
## Prerrequisitos
- Acceso SSH
- Permisos sudo
## Procedimiento
1. Verificar estado actual
systemctl status service-name
2. Notificar al equipo
# Slack/Email
3. Reiniciar
sudo systemctl restart service-name
4. Verificar
systemctl status service-name
journalctl -u service-name -n 50
5. Documentar
# Log de incidente
Documentación del Sistema
# Archivos a documentar:
# - Configuración de servicios
# - Procedimientos de mantenimiento
# - Contactos del equipo
# - Contraseñas (gestionadas de forma segura)
# - Arquitectura del sistema
Automatización
Scripts de Automatización
#!/bin/bash
# Automatización de tareas de producción
# 1. Monitoreo
/usr/local/bin/monitor.sh
# 2. Backup
/usr/local/bin/backup.sh
# 3. Limpieza
/usr/local/bin/cleanup.sh
# 4. Reportes
/usr/local/bin/report.sh
Cron Producción
# /etc/cron.d/production
# Monitoreo cada 5 minutos
*/5 * * * * root /usr/local/bin/monitor.sh
# Backup diario
0 2 * * * root /usr/local/bin/backup.sh
# Limpieza semanal
0 3 * * 0 root /usr/local/bin/cleanup.sh
# Reporte diario
0 8 * * * root /usr/local/bin/report.sh
Resumen
En este capítulo, usted ha aprendido:
Mejores prácticas: Seguridad, rendimiento, mantenimiento
Mantenimiento: Planificación, scripts, procedimientos
Backup: Estrategias, scripts, automatización
HA: Redundancia, health checks, failover
Documentación: Runbooks, procedimientos
Automatización: Scripts, cron producción
Próximos Pasos
Capítulo 12.2: Performance Tuning
Capítulo 12.3: Automatización Completa
Capítulo creado el: Diciembre 2024