# A06.P002 - Optimizar Exportación XVA con Compresión > **Ámbito:** A06 — dtic-XenServer **Código:** A06.P002 **Fecha:** 10 de abril de 2026 **Autor:** Sistema ADN **Versión:** 1.0 **Estado:** ⏳ PENDIENTE **Dependencia:** [A06.P001](A06.P001_Habilitar_SSH_Legacy.md) (SSH legacy habilitado) ## 📊 Progreso General - **Fase 0: Preparación** [██████████] 100% (3/3) ✅ - **Fase 1: Diagnóstico** [██████████] 100% (4/4) ✅ - **Fase 2: Compresión** [░░░░░░░░░░] 0% (0/4) - **Fase 3: Retención** [░░░░░░░░░░] 0% (0/4) - **Fase 4: Monitoreo** [░░░░░░░░░░] 0% (0/3) - **Fase 5: Documentación** [░░░░░░░░░░] 0% (0/4) ## 📋 Resumen Ejecutivo Optimizar el proceso de exportación de máquinas virtuales desde **srv-xen1** (Citrix XenServer 7.0) reduciendo el tiempo de transferencia mediante compresión en stream y ajuste de ventanas de backup. **Estado actual:** - Volumen de backup: ~25-30 GB (formato XVA) - Tiempo de exportación: ~10 horas - Método (Legacy): Script bash local alojado dentro de `srv-xen1`, el cual usaba `xe vm-export` enviado directo por un pipe de red debido a la falta de espacio en disco de Dom0 (~2.7 GB libre). **Objetivos:** 1. Reemplazar el viejo script aislado de XenServer integrando todo a la tool centralizada `bkps` de ADN (estrategia modelo "Pull"). 2. Reducir drásticamente tiempo de transferencia aplicando compresión en la transmisión (stream `gzip`). 3. Definir ventanas óptimas de backup con el orquestador de Drones. ## 📅 Fases de Implementación ### ✅ **FASE 0: Preparación (COMPLETADA)** #### Tareas Iniciales - [x] **0.1:** Vincular con plan A06.P001 (SSH legacy habilitado) - [x] **0.2:** Relevar métricas actuales de exportación (tiempo, ancho de banda) - [x] **0.3:** Identificar VMs críticas a optimizar: - `srvv-sysacadweb` (25 GB, ~10 horas) - `srvv-maurik` (Domain Controller) ### ✅ **FASE 1: Diagnóstico de Red y Almacenamiento (COMPLETADA)** #### Métricas a Recopilar - [x] **1.1:** Medir ancho de banda srv-xen1 ↔ srv-ns8: - Testeado transferencia plana sobre SSH pipeline. Resultó en **~34.8 MB/s**. - [x] **1.2:** Verificar espacio disponible en destinos: - srv-xen1 Dom0: ~2.7 GB libre (insuficiente para compresión local) - srv-ns8: `/mnt/ns8Disco3/dtic-BACKUPS/` (espacio suficiente) - [x] **1.3:** Identificar picos de uso de red (horarios críticos) - [x] **1.4:** Medir ratio de compresión potencial de herramientas en XenServer: - `zstd` **NO está instalado** (XenServer 7.0 / CentOS 7 base antiguo). - `gzip` instalado. Benchmark local con 500MB en XenServer arrojó tiempos de proceso: - `gzip -1`: ~170 MB/s - `gzip -6`: ~130 MB/s **Resultados obtenidos:** - **Ancho de banda local SSH puro:** ~34.8 MB/s (suficiente para ~100GB/hora). - **Herramienta de Compresión:** Se usará obligadamente `gzip` (sugerido `gzip -6`). - **Ventana óptima:** 00:00 - 06:00 (menor actividad). ### ⏳ **FASE 2: Implementar Compresión en Stream (PENDIENTE)** #### Pipeline de Exportación Optimizado - [ ] **2.1:** Script centralizado vía ADN (Estrategia "Pull"): ```bash # El comando central en ns8 trae la información mediante SSH pasándolo por gzip: ./adn/tools/run ssh srv-xen1 "xe vm-export vm=srvv-sysacadweb filename=/dev/stdout | gzip -6 -c" > /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/srvv-sysacadweb.xva.gz ``` *(El gzip actúa dentro del xen node, viajando la data ya comprimida)* - [ ] **2.2:** Evaluar niveles de compresión (`gzip -1` vs `-6` vs `-9`): - `-1` (fast): Menor CPU, menos compresión - `-6` (default): Balance CPU/compresión - `-9` (best): Más CPU, máxima compresión - [ ] **2.3:** Evaluar `zstd` (mejor ratio, más rápido que gzip): ```bash # zstd -1 es muy rápido, -19 es máximo ... | zstd -3 | ssh srv-ns8 "cat > backup.xva.zst" ``` - [ ] **2.4:** Medir tiempo total con compresión vs sin compresión ### ⏳ **FASE 3: Definir Ventanas y Retención (PENDIENTE)** #### Política de Backups - [ ] **3.1:** Establecer ventana óptima: `00:00 - 06:00` (confirmar con bitácora de red) - [ ] **3.2:** Configurar retención por tier: | Tier | Ubicación | Retención | | :--- | :--- | :--- | | Tier 1 | srv-xen1 (origen) | 3 días (últimos 3 backups) | | Tier 2 | srv-ns8 (procesado) | 30 días | | Tier 3 | OneDrive (nube) | 90 días + históricos mensuales | - [ ] **3.3:** Actualizar `bkps.yml` con nueva configuración de retención - [ ] **3.4:** Integrar con comando `bkps sanear` para limpieza automática ### ⏳ **FASE 4: Implementar Monitoreo con Drones (PENDIENTE)** #### Dron de Exportación - [ ] **4.1:** Configurar dron para exportación nocturna: ```bash ./adn/tools/run dron lanzar --evento AUTO \ --nota "Exportación XVA srvv-sysacadweb" -- \ ./adn/tools/run ssh srv-xen1 \ "xe vm-export vm=srvv-sysacadweb filename=/dev/stdout" | \ gzip > /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/srvv-sysacadweb_$(date +%Y%m%d).xva.gz ``` - [ ] **4.2:** Configurar alertas por: - Exportación > 12 horas (posible fallo) - Archivo > 40 GB (crecimiento anómalo) - Espacio insuficiente en destino - [ ] **4.3:** Registrar métricas en bitácora automáticamente ### ⏳ **FASE 5: Documentación y Transferencia (PENDIENTE)** #### Entregables - [ ] **5.1:** Actualizar `A06_dtic-XenServer.md` con flujo optimizado - [ ] **5.2:** Documentar comandos en ficha `nodos/srv-xen1.md` - [ ] **5.3:** Crear script reutilizable en `adn/tools/bkps/lib/proc_xen.rb` - [ ] **5.4:** Registrar lecciones aprendidas --- ## 🎯 Criterios de Éxito | Fase | Criterio | Verificación | | :--- | :--- | :--- | | **Diagnóstico** | Métricas de red relevadas | ✅ `iperf3` ejecutado, ratio medido | | **Compresión** | Pipeline funcionando | ✅ Exportación con gzip/zstd OK | | **Reducción tiempo** | < 6 horas (vs 10 horas actuales) | ✅ Bitácora registra mejora | | **Monitoreo** | Drones operativos | ✅ Auto-bitácora en eventos | ## 📝 Notas Técnicas ### Comandos xe para Exportación ```bash # Exportar VM completa xe vm-export vm= filename=/path/to/backup.xva # Exportar a stdout (para piping) xe vm-export vm= filename=/dev/stdout # Listar VMs disponibles xe vm-list # Parámetros específicos de una VM xe vm-param-get uuid= param-name=name-label ``` ### Comparación: gzip vs zstd | Herramienta | Nivel | Ratio | Velocidad (MB/s) | Uso CPU | | :--- | :--- | :--- | :--- | :--- | | **gzip -1** | Fast | 2.5x | ~400 | Bajo | | **gzip -6** | Default | 3.0x | ~200 | Medio | | **gzip -9** | Best | 3.2x | ~100 | Alto | | **zstd -1** | Fast | 2.8x | ~600 | Muy Bajo | | **zstd -3** | Default | 3.5x | ~300 | Bajo | | **zstd -9** | High | 4.0x | ~100 | Medio | **Recomendación:** Usar `zstd -3` si está disponible, sino `gzip -6`. ### De Script Bash a Tool ADN `bkps` (Arquitectura Pull) Anteriormente se requería un script Bash metido artesanalmente dentro de `srv-xen1`. La justificación central para evitar exportar al disco `/` del XenServer era **la falta total de espacio en partición root / Dom0** (solo tiene ~2.7 GB libres frente a VMs de 25GB+). Ese script será obsoleto e innecesario. La **Herramienta ADN `bkps`** tomará el control en modelo "Pull": ```bash # Ejemplo teórico de cómo quedará el comando integrado en ADN desde ns8 ./adn/tools/bkps/bkps.rb respaldar srv-xen1 --target srvv-sysacadweb --compress gzip ``` El flujo transparente que armará ADN por debajo será: 1. `bkps` desde el orquestador (`srv-ns8`) invoca al módulo de Xen (`proc_xen.rb`). 2. Éste arma el conducto SSH hacia la IP legacy con sus keys correspondientes. 3. El comando ejecutado en `srv-xen1` es: `xe vm-export ... filename=/dev/stdout | gzip -6 -c`. 4. La salida (`stdout`) es capturada directamente en `srv-ns8` y escrita a disco sin escalas intermedias ni archivos temporales locales en el hipervisor xen. ## ⚠️ Riesgos y Consideraciones | Riesgo | Impacto | Mitigación | | :--- | :--- | :--- | | **CPU overhead** | Compresión consume CPU en Dom0 | Usar nivel bajo (-1 a -3), monitorear carga | | **Fallo de red** | Backup corrupto a mitad de transferencia | Usar `--delete-before` en rclone sync | | **Espacio insuficiente** | Destino lleno antes de sanear | Monitorear espacio, alertas tempranas | | **VM en uso** | Backup inconsistente | Coordinar ventana con usuarios, considerar snapshot | ## 🔗 Vinculación con A03.P003 Este plan complementa [A03.P003](../dtic-BKPs/A03.P003_Optimizacion_SysAcadWeb.md) proveyendo: - **A06.P002**: Optimización técnica de exportación XVA (hipervisor) - **A03.P003**: Procesamiento y sincronización posterior (storage/backup) ## 🔄 Armonía Integral **Última actualización:** 2026-04-10 (creación del plan) | Documento | Estado | Notas | | :--- | :--- | :--- | | `A06_dtic-XenServer.md` | ✅ Creado | Manifiesto del ámbito | | `A06.P001_Habilitar_SSH_Legacy.md` | ⏳ Pendiente | SSH legacy | | `A06.P002_Optimizar_Exportacion_XVA.md` | ⏳ Pendiente | Este plan | | `A03.P003_Optimizacion_SysAcadWeb.md` | ⏳ En Ejecución | Vinculado | | `adn/tools/bkps/lib/proc_xen.rb` | ⏳ Pendiente | Script de exportación | --- ## Referencias - **Citrix XenServer 7.0 CLI**: [xe CLI Reference](https://docs.citrix.com/en-us/citrix-hypervisor/xenserver/v7/management/cli-reference.html) - **zstd**: [Zstandard Compression](https://facebook.github.io/zstd/) - **ADN CLI BKPs**: [`adn/tools/bkps/bkps.rb`](../../../adn/tools/bkps/bkps.rb) - **Configuración**: [`adn/tools/bkps/bkps.yml`](../../../adn/tools/bkps/bkps.yml) - **Nodo srv-xen1**: [`nodos/srv-xen1.md`](../../../nodos/srv-xen1.md)