[P2602] Pipeline completo 3 etapas: Vzdump → Procesamiento local → Upload nube

This commit is contained in:
Ricardo Monla
2026-02-28 10:02:36 -03:00
parent 24bbae45f9
commit b1232829b8
+124 -47
View File
@@ -15,16 +15,31 @@
## Objetivo
Transformar el proceso de backup de la infraestructura virtualizada de la DTIC — actualmente manual, VM por VM, servidor por servidor — en un **sistema automatizado, desatendido y auditado**.
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**.
**Problemática actual:**
- El operador ejecuta vzdump manualmente desde la GUI de Proxmox para cada VM.
- Debe verificar y eliminar backups viejos (>6 días) antes de cada ejecución.
- Las VMs Windows no siempre responden al shutdown de Proxmox, requiriendo intervención manual.
- El proceso completo (3 servidores, ~12 VMs) puede tomar horas de atención parcial.
### Pipeline Operativo Completo
**Solución propuesta:**
Un procesador `vzdump` integrado en `ns8-bkps` que ejecute todo el ciclo remotamente vía SSH: limpieza → apagado graceful → backup → verificación → reporte.
```
┌──────────────────┐ ┌──────────────────────┐ ┌──────────────────┐
│ 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
@@ -85,61 +100,123 @@ Un procesador `vzdump` integrado en `ns8-bkps` que ejecute todo el ciclo remotam
| 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 — Desarrollo del Procesador Vzdump
---
### 🔧 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 | 📍 | Implementar política de retención (eliminar backups >N días). |
| D03 | 📍 | Implementar apagado graceful SSH para VMs Windows (`shutdown /s /t 30`). |
| D04 | 📍 | Implementar filtro de ventana horaria (skip si fuera de horario). |
| D05 | 📍 | Agregar tareas `bkps_proxmox_linux` y `bkps_proxmox_windows` al YAML. |
| 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 — Validación
---
### ⚙️ Fase 3 — Etapa 2: Procesamiento Local
> Descarga desde Proxmox → retención local inteligente → compresión por host
| ID | Estado | Tarea |
| :--- | :---: | :--- |
| V01 | 📍 | Test con VM no-crítica (ej: srvv-docs o srvv-sitio0). |
| V02 | 📍 | Ejecutar ciclo completo bkps-proxmox-linux. |
| V03 | 📍 | Verificar retención (backups viejos eliminados correctamente). |
| V04 | 📍 | Probar shutdown SSH graceful en VM Windows. |
| 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. |
### 🚀 Fase 4 — Producción
**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 |
| :--- | :---: | :--- |
| P01 | 📍 | Documentar procedimiento operativo en ADN. |
| P02 | 📍 | Crear comando compuesto `full_vzdump` (Linux + Windows). |
| P03 | 📍 | Integrar con el ciclo actual de subida a nube (rclone). |
| P04 | 📍 | Evaluar cron/systemd timer para ejecución programada. |
| 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
```
┌─────────────────────────────────────────────────┐
srv-ns8 (10.0.10.8)
┌──────────────┐ ┌──────────────┐
│ ns8-bkps.rb │ ns8-candados │
│ │ Vzdump (RSA auth)
│ └──────┬───────┘ └──────┬───────┘
│ │ SSH (llave) │
└────────┬─────────┘
┌────────────────────────┐
│ srv-pmox1 (.201) │
│ Pool Master │
│ │
vzdump → zfsDISCO1 │
├── pmox1 VMs │
├── pmox2 VMs
└─ pmox3 VMs │
└────────────────────────┘
┌───────┴───────┐
▼ ▼
Procesamiento Subida Nube
(tar.gz local) (rclone → OneDrive)
└─────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────
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