247 lines
13 KiB
Markdown
247 lines
13 KiB
Markdown
# P2602 - Automatización de Backups DTIC UTNLR
|
|
|
|
> Manifiesto de Proyecto | Referencia: [`adn/07_proyectos.md`](../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**](../nodos/srv-ns8.md) | `10.0.10.8` | Centro de operaciones. Ejecuta ns8-bkps. |
|
|
| [**srv-pmox1**](../nodos/srv-pmox1.md) | `10.0.10.201` | Pool master Proxmox. Gateway SSH a todas las VMs. |
|
|
| [**srv-pmox2**](../nodos/srv-pmox2.md) | `10.0.10.202` | Nodo Proxmox secundario. |
|
|
| [**srv-pmox3**](../nodos/srv-pmox3.md) | `10.0.10.203` | Nodo Proxmox terciario (64GB RAM). |
|
|
|
|
### VMs/CTs a Respaldar
|
|
|
|
| Server | VMID | Nodo | OS | Grupo | Ventana |
|
|
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
| pmox1 | 101 | srvv-sitio | Ubuntu | linux | Libre |
|
|
| pmox1 | 102 | srvv-sitio0 | Debian | linux | Libre |
|
|
| pmox1 | 103 | srvv-dtic | Debian | linux | Libre |
|
|
| pmox1 | 104 | srvv-docs | Debian | linux | Libre |
|
|
| pmox1 | 112 | srvv-dns | Debian | linux | Libre |
|
|
| pmox2 | 105 | srvv-koha | Linux | linux | Libre |
|
|
| pmox2 | 108 | pcv-dasu2 | Win10 | windows | Libre |
|
|
| pmox3 | 111 | srvv-fenix | Legacy | windows | 🌙 00:00-06:00 |
|
|
| pmox3 | 106 | srvv-uptime | Debian | lxc | Libre |
|
|
| pmox3 | 107 | srvv-data | Debian | lxc | Libre |
|
|
| pmox3 | 113 | srvv-sitio2 | Debian | lxc | Libre |
|
|
|
|
## 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 |
|
|
|
|
## 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
|
|
|
|
- **Bitácoras**: [28/02](../bitacoras/2026-02-28.md)
|
|
- **ADN**: [Ontología](../adn/01_ontologia.md) | [Proyectos](../adn/07_proyectos.md)
|
|
- **Herramienta**: [ns8-bkps](../tools/ns8-bkps/ns8-bkps.rb) | [ns8-candados](../tools/ns8-candados/ns8-candados.rb)
|
|
- **Proyecto Relacionado**: [P2601 DASUTEN](P2601_dasuten.md) (srv-dasu backups)
|