[A06] Resolución BUG SSH Legacy en info.rb, conclusión F1 de Compresión XVA, y actualizaciones de métricas y planes.
This commit is contained in:
@@ -0,0 +1,219 @@
|
||||
# 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=<nombre_vm> filename=/path/to/backup.xva
|
||||
|
||||
# Exportar a stdout (para piping)
|
||||
xe vm-export vm=<nombre_vm> filename=/dev/stdout
|
||||
|
||||
# Listar VMs disponibles
|
||||
xe vm-list
|
||||
|
||||
# Parámetros específicos de una VM
|
||||
xe vm-param-get uuid=<vm_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)
|
||||
Reference in New Issue
Block a user