Files
dtic-DIIAA/docs/proy/P2602_Backups/P2602_backups.md
T

14 KiB

P2602 - Automatización de Backups DTIC UTNLR

Manifiesto de Proyecto | Referencia: adn/07_proyectos.md

Identificación

Campo Valor
Código P2602
Nombre Automatización de Backups DTIC UTNLR
Versión v2601
Estado En Ejecución
Inicio 28/02/2026
Fin Estimado Por definir

Ventana Operativa

Campo Valor
Día Todos los jueves
Inicio 00:00 hs
Deadline 08:00 hs (inicio de jornada de usuarios)
Modo Operador presente para resolver problemas durante la noche
SLA Todo debe estar operativo antes de las 08:00 para los usuarios de la Facultad

⚠️ Restricción crítica: Si hay fallos durante el pipeline, el operador debe resolverlos antes de las 08:00. El objetivo de la automatización es minimizar la intervención nocturna y eventualmente permitir ejecución desatendida vía cron/timer.

Cronograma típico (actual, manual):

00:00 ━━━━━━━━━━━ Etapa 1+2 ━━━━━━━━━━━ 03:00 ━━━━━ Etapa 3 ━━━━━ ~08:00
     📦 Vzdump + ⚙️ Procesamiento           ☁️ Upload Nube
     ~3 hs | Vigilancia requerida            Desatendido (rclone)

Objetivo

Automatizar el ciclo completo de backup de la DTIC — actualmente un proceso manual de varias horas — en un pipeline de 3 etapas desatendido y auditado.

Pipeline Operativo Completo

┌──────────────────┐    ┌──────────────────────┐    ┌──────────────────┐
│  ETAPA 1         │    │  ETAPA 2             │    │  ETAPA 3         │
│  📦 Vzdump       │ →  │  ⚙️ Procesamiento    │ →  │  ☁️ Upload Nube  │
│                  │    │                      │    │                  │
│  • Limpieza >6d  │    │  • Descarga a NS8    │    │  • rclone sync   │
│  • Shutdown VM   │    │  • Retención local   │    │  • Auto-resume   │
│  • vzdump stop   │    │    (mín 2 por VM)    │    │  • Por subdir    │
│  • Por servidor  │    │  • Compresión tar.gz │    │  • OneDrive      │
│                  │    │  • Organiza por host │    │                  │
└──────────────────┘    └──────────────────────┘    └──────────────────┘
    srv-pmox1/2/3           srv-ns8 local            rmOneDrive remoto

Problemática actual

Etapa Manual Actual Automatizado (meta)
Vzdump GUI Proxmox, VM por VM, borrar viejos a mano SSH vzdump batch, retención automática
Procesamiento Descarga manual, compresión, verificar archivos viejos Descarga + retención inteligente (mín 2) + compresión
Upload Lanzar rclone, reiniciar si falla internet rclone con reintentos y resume automático

Stakeholders

Rol Persona Visibilidad
Responsable Técnico Lic. Ricardo MONLA Operador directo
Dirección de TIC (Jerárquico superior) Dashboard asíncrono

Nodos Involucrados

Infraestructura de Gestión

Nodo IP Rol
srv-ns8 10.0.10.8 Centro de operaciones. Ejecuta ns8-bkps.
srv-pmox1 10.0.10.201 Pool master Proxmox. Gateway SSH a todas las VMs.
srv-pmox2 10.0.10.202 Nodo Proxmox secundario.
srv-pmox3 10.0.10.203 Nodo Proxmox terciario (64GB RAM).

VMs/CTs a Respaldar (Inventario Auditado 28/02)

Server VMID Nodo OS Grupo Ventana SSH VM
pmox1 101 srvv-sitio Ubuntu linux Libre rmonla
pmox1 102 srvv-sitio0 Debian linux Libre rmonla
pmox1 103 srvv-dtic Debian linux Libre rmonla
pmox1 104 srvv-docs Debian linux Libre rmonla
pmox1 112 srvv-dns Debian linux Libre rmonla
pmox2 105 srvv-koha Linux linux Libre rmonla
pmox2 108 pcv-dasu1 Win10 windows Libre pendiente
pmox2 109 pcv-dasu2 Win10 windows Libre pendiente
pmox2 110 pcv-serviio Win10 windows Libre pendiente
pmox3 111 srvv-fenix WinSrv 2019 windows 🌙 00:00-06:00 monlaricardo
pmox3 106 srvv-uptime Debian lxc Libre rmonla
pmox3 107 srvv-data Debian lxc Libre rmonla
pmox3 113 srvv-sitio2 Debian lxc Libre rmonla
xen1 srvv-maurik WinSrv 2019 windows Libre monlaricardo
xen1 srvv-sysacadweb WinSrv 2008R2 windows Libre monlaricardo:7022

Excluidos (stopped, sin auto-inicio, en preparación): docker (100), srvv-N8N VM (114), srvv-N8N CT (115).

Hitos Clave

Fecha ID Estado Hito
28/02 INIT Inicialización del proyecto. Análisis de pipeline manual existente.
R01-R05 📍 Fase 1: Reconocimiento de campo (acceso SSH, inventario VMs, ventanas horarias)
D01-D05 📍 Fase 2: Procesador Vzdump remoto
L01-L04 📍 Fase 3: Procesamiento local con retención inteligente
U01-U04 📍 Fase 4: Upload a la nube con resume
V01-V05 📍 Fase 5: Validación end-to-end
P01-P04 📍 Fase 6: Producción (cron + dashboard)

Herramientas

Herramienta Uso
ns8-bkps v6.0 Procesador de backups (Ruby, modular)
ns8-candados Gestión de secretos y autorización SSH
vzdump Herramienta nativa de backup de Proxmox
SSH Canal de ejecución remota
rclone Sincronización a almacenamiento cloud
GNU Screen Ejecución desatendida

Progreso

Fase 1: ░░░░░░░░░░   0%  Reconocimiento de Campo
Fase 2: ░░░░░░░░░░   0%  Procesador Vzdump
Fase 3: █████░░░░░  50%  Procesamiento Local
Fase 4: █████░░░░░  50%  Upload a la Nube
Fase 5: ░░░░░░░░░░   0%  Validación End-to-End
Fase 6: ░░░░░░░░░░   0%  Producción

Fases del Proyecto

🔍 Fase 1 — Reconocimiento de Campo

"No se puede proteger lo que no se conoce."

ID Estado Tarea
R01 📍 Validar acceso SSH desde srv-ns8 a cada hipervisor (pmox1/2/3).
R02 📍 Auditar inventario real de VMs: qm list y pct list vs. nodos documentados.
R03 📍 Verificar que vzdump funcione remotamente desde pmox1 como pool master.
R04 📍 Documentar ventanas horarias operativas por VM (producción vs. mantenimiento).
R05 📍 Verificar/crear fichas de nodo (nodos/*.md) para VMs no documentadas.

🔧 Fase 2 — Etapa 1: Procesador Vzdump (Backup Remoto)

SSH a pool master → limpieza remota → shutdown → vzdump → verificación

ID Estado Tarea
D01 📍 Crear lib/proc_vzdump.rb con lógica de backup remoto vía SSH.
D02 📍 Retención remota: eliminar backups >6 días en zfsDISCO1 antes de cada vzdump.
D03 📍 Apagado graceful SSH para VMs Windows (shutdown /s /t 30), skip si no responde.
D04 📍 Filtro de ventana horaria (skip VM si fuera de su horario).
D05 📍 Separar tareas YAML: bkps_proxmox_linux y bkps_proxmox_windows.

⚙️ Fase 3 — Etapa 2: Procesamiento Local

Descarga desde Proxmox → retención local inteligente → compresión por host

ID Estado Tarea
L01 Descarga de backups desde zfsDISCO1 a NS8 via rclone mount (ya existe en proc_proxmox.rb).
L02 📍 Retención local inteligente: antes de procesar, verificar cada directorio de VM y mantener mínimo 2 archivos (el nuevo + 1 de seguridad). Borrar los más antiguos si hay >2 con antigüedad >6 días.
L03 Compresión tar.gz organizada por hostname (ya existe en proc_proxmox.rb).
L04 📍 Integrar retención local en el procesador Proxmox existente.

Política de retención local:

Directorio: /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/<nombre_vm>/

  Antes de procesar un nuevo backup:
  1. Listar archivos en el directorio de la VM
  2. Si hay archivos con antigüedad >6 días:
     → Mantener el más reciente de los viejos (seguridad)
     → Borrar el resto de los viejos
  3. Resultado: mínimo 2 backups por VM (el nuevo + 1 de seguridad)

☁️ Fase 4 — Etapa 3: Upload a la Nube

rclone sync a OneDrive con reintentos y resume automático

ID Estado Tarea
U01 Sync a OneDrive: bkps-SERVIDORes, bkps-ANTIGUOS, bkps-USERs (ya existe en sync_rclone.rb).
U02 Reintentos automáticos: --retries 5 --retries-sleep 10s --timeout 30m (ya implementado).
U03 📍 Resume automático: si rclone falla a mitad, el próximo rclone sync retoma desde donde quedó (verificar comportamiento actual).
U04 📍 Logeo de resultado de upload con estadísticas (bytes transferidos, errores).

🧪 Fase 5 — Validación

ID Estado Tarea
V01 📍 Test vzdump con VM no-crítica (ej: srvv-docs).
V02 📍 Test retención local (verificar min 2 por directorio).
V03 📍 Test pipeline completo Linux: vzdump → procesamiento → upload.
V04 📍 Test shutdown SSH graceful en VM Windows.
V05 📍 Test de corte de internet durante upload (verificar resume).

🚀 Fase 6 — Producción

ID Estado Tarea
P01 📍 Crear comando compuesto full_backup (vzdump + procesamiento + upload).
P02 📍 Documentar procedimiento operativo en ADN.
P03 📍 Evaluar cron/systemd timer para ejecución programada nocturna.
P04 📍 Dashboard P2602 (si aplica).

Arquitectura

┌──────────────────────────────────────────────────────────────────┐
│  ns8-bkps — Pipeline de Backup Completo                         │
│                                                                  │
│  ┌──────────────┐                                               │
│  │ ns8-candados │ ← RSA passphrase                              │
│  └──────┬───────┘                                               │
│         │                                                        │
│  ═══════╪══════════════════════════════════════════════════════  │
│  ETAPA 1│  📦 VZDUMP (remoto)                                   │
│  ═══════╪══════════════════════════════════════════════════════  │
│         ▼                                                        │
│  srv-ns8 ──SSH──▶ srv-pmox1 (Pool Master)                       │
│                    │                                             │
│                    ├─ Limpieza remota (>6 días)                  │
│                    ├─ Shutdown VM (graceful/SSH)                 │
│                    ├─ vzdump --mode stop --storage zfsDISCO1    │
│                    └─ pmox1/pmox2/pmox3 VMs                     │
│                                                                  │
│  ═══════════════════════════════════════════════════════════════  │
│  ETAPA 2  ⚙️ PROCESAMIENTO (local)                              │
│  ═══════════════════════════════════════════════════════════════  │
│                                                                  │
│  rclone mount zfsDISCO1 → /tmp/bkps_*                           │
│    │                                                             │
│    ├─ Retención local: min 2 por VM, borrar excedentes >6d      │
│    ├─ Compresión: tar.gz por hostname                           │
│    └─ Destino: /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/    │
│                                                                  │
│  ═══════════════════════════════════════════════════════════════  │
│  ETAPA 3  ☁️ UPLOAD NUBE (remoto)                               │
│  ═══════════════════════════════════════════════════════════════  │
│                                                                  │
│  rclone sync → rmOneDrive:/dtic-BACKUPS/                        │
│    ├─ bkps-SERVIDORes/                                          │
│    ├─ bkps-ANTIGUOS/                                            │
│    └─ bkps-USERs/                                               │
│    (--delete-before --retries 5 --timeout 30m)                  │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

Referencias