From b1232829b84abbbb1b2797c2d5516b3d7d4a63db Mon Sep 17 00:00:00 2001 From: Ricardo Monla Date: Sat, 28 Feb 2026 10:02:36 -0300 Subject: [PATCH] =?UTF-8?q?[P2602]=20Pipeline=20completo=203=20etapas:=20V?= =?UTF-8?q?zdump=20=E2=86=92=20Procesamiento=20local=20=E2=86=92=20Upload?= =?UTF-8?q?=20nube?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proyectos/P2602_backups.md | 171 +++++++++++++++++++++++++++---------- 1 file changed, 124 insertions(+), 47 deletions(-) diff --git a/proyectos/P2602_backups.md b/proyectos/P2602_backups.md index 6a7930c4..54e53245 100644 --- a/proyectos/P2602_backups.md +++ b/proyectos/P2602_backups.md @@ -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// + + 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