[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,75 @@
|
||||
# A03.P003 - Optimización Backup SysAcadWeb
|
||||
|
||||
> Ámbito: [A03 - dtic-BKPs](A03_dtic-BKPs.md)
|
||||
|
||||
## Identificación
|
||||
|
||||
| Campo | Valor |
|
||||
| :--- | :--- |
|
||||
| **Código** | A03.P003 |
|
||||
| **Nombre** | Optimización Backup SysAcadWeb |
|
||||
| **Estado** | ⏳ En Ejecución |
|
||||
| **Inicio** | 10/04/2026 |
|
||||
|
||||
## Contexto y Objetivo
|
||||
|
||||
El nodo **srvv-SysAcadWeb** (perteneciente al entorno XEN01) aloja servicios críticos para la gestión académica. Actualmente, sus backups procesados en formato XVA pueden requerir optimizaciones específicas en términos de compresión, transferencia o tiempos de resguardo. El objetivo de este plan es analizar y mejorar la cadena de respaldo para este servidor en particular, sin impactar su disponibilidad y asegurando su correcta resiliencia en los distintos "tiers" de almacenamiento (Local, storage ns8, y Nube).
|
||||
|
||||
## Etapas Estratégicas
|
||||
|
||||
### 1. Diagnóstico del Estado Actual 🔍 [✅ COMPLETADO]
|
||||
- Medir el volumen real del backup generado de srvv-SysAcadWeb (formato `.xva`): ~25GB usado.
|
||||
- Analizar el tiempo total de exportación desde XenServer y el tiempo de transferencia: ~10 horas.
|
||||
- Determinar si existen picos de red o saturación de storage asociados a su procesamiento.
|
||||
- ✅ Limpieza de temporales y logs: ~527 MB liberados.
|
||||
|
||||
### 2. Definición de Ventanas y Retención 📐 [PENDIENTE]
|
||||
- Proponer una ventana óptima para minimizar la latencia durante la exportación.
|
||||
- Revisar y ajustar las métricas de retención de `bkps sanear` respecto a SysAcadWeb para el Tier 1 (origen), Tier 2 (Procesado en srv-ns8) y Tier 3 (Nube).
|
||||
- Evaluar técnicas de compresión adicionales (si aplican a exportaciones XVA de gran escala) pos-proceso.
|
||||
|
||||
### 3. Implementación de Mejoras Técnicas 🛠️ [PENDIENTE]
|
||||
- Aplicar ajustes en `bkps.yml` o en los scripts de origen que capturan la VM.
|
||||
- Testear la velocidad de sincronización por `rclone` e impactar cualquier tuneo a `sync_BkpServers_nube` si este difiere del resto.
|
||||
- Verificar consistencia general del archivo exportado.
|
||||
|
||||
### 4. Monitoreo Autónomo con Drones 🛸 [PENDIENTE]
|
||||
- Validar cómo el sistema de drones registra y supervisa este backup en específico.
|
||||
- Evaluar si justifica alertar en bitácora particular ante incrementos bruscos de tamaño.
|
||||
|
||||
---
|
||||
|
||||
## Tareas Diarias (Bitácora del Plan)
|
||||
|
||||
| Fecha | Novedad / Tarea |
|
||||
| :--- | :--- |
|
||||
| **2026-04-10** | Se crea plan inicial A03.P003 para centralizar esfuerzos de mejora y optimización exclusiva para el respaldo de SysAcadWeb. |
|
||||
| **2026-04-10** | ✅ Diagnóstico de espacio en disco: 95.25 GB libres (~25GB usado). |
|
||||
| **2026-04-10** | ✅ Limpieza Windows\\Temp: ~270 MB liberados. |
|
||||
| **2026-04-10** | ✅ Limpieza SysACAD\\Logs (antes de 2026): ~257 MB liberados. |
|
||||
| **2026-04-10** | ✅ Espacio final tras limpieza: **95.77 GB** libres. |
|
||||
|
||||
---
|
||||
|
||||
## Hallazgos del Diagnóstico
|
||||
|
||||
### Estado del Nodo srvv-SysAcadWeb
|
||||
- **IP**: 10.0.10.12:7022 (OpenSSH)
|
||||
- **SO**: Windows Web Server 2008 R2
|
||||
- **Disco**: 120 GB (95.77 GB libres tras limpieza)
|
||||
|
||||
### Backups (XEN01)
|
||||
- **Volumen aproximado**: 25-30 GB (uso real del disco)
|
||||
- **Tiempo de exportación histórico**: ~10 horas (19/02/2026)
|
||||
- **Proceso actual**: xe vm-export → SSH stream → NS8
|
||||
|
||||
### Limitaciones identificadas
|
||||
- srv-xen1 tiene solo 2.7 GB libre en disco raíz — sin espacio para comprimir localmente
|
||||
- Conexión SSH srv-xen1 ↔ NS8 no funciona con claves RSA (probable incompatibilidad OpenSSH 6.6 vs 9.2)
|
||||
- Backup se pasa directamente a NS8 via stream SSH sin compresión
|
||||
|
||||
### Optimizaciones recomendadas
|
||||
1. Montar storage NS8 via NFS/SSHFS desde srv-xen1
|
||||
2. Usar rsync con --compress para transferencia interna
|
||||
3. Evaluar compresión stream con gzip antes de transferencia
|
||||
|
||||
@@ -91,6 +91,7 @@ El ámbito **dtic-BKPs** engloba todas las operaciones de respaldo (backup), pro
|
||||
| :--- | :--- | :--- |
|
||||
| [A03.P001](A03.P001_Migracion_ADN.md) | Migración a Tools ADN | ✅ |
|
||||
| [A03.P002](A03.P002_Automatizacion_Backups.md) | Automatización de Backups | ✅ |
|
||||
| [A03.P003](A03.P003_Optimizacion_SysAcadWeb.md) | Optimización de Backup SysAcadWeb | ⏳ |
|
||||
|
||||
## 🛸 Sistema de Drones (Operación Autónoma)
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
**Código:** A07.P002
|
||||
**Fecha:** 07 de abril de 2026
|
||||
**Autor:** Sistema ADN
|
||||
**Autor:** Lic. Ricardo MONLA
|
||||
**Versión:** 1.0
|
||||
**Estado:** ✅ COMPLETADO
|
||||
**Dependencia:** Ninguna (urgente)
|
||||
@@ -19,6 +19,14 @@ Los correos electrónicos enviados desde cuentas institucionales **@frlr.utn.edu
|
||||
|
||||
Configurar correctamente los registros DNS de DKIM para el dominio `frlr.utn.edu.ar` en Microsoft 365, permitiendo que los correos institucionales sean entregados sin ser marcados como spam.
|
||||
|
||||
## 🖥️ Nodos Involucrados
|
||||
|
||||
| Nodo / Entorno | Descripción de la intervención |
|
||||
| :--- | :--- |
|
||||
| **`srvv-DNS`** | Servidor DNS local (CoreDNS). Modificación de la zona `frlr.utn.edu.ar.db` para exponer los registros CNAME y DMARC al público. |
|
||||
| **Microsoft 365 Admin** | Consola Cloud (Tenant). Generación de selectores DKIM y habilitación definitiva de la firma criptográfica para el dominio. |
|
||||
|
||||
|
||||
## 📅 Fases de Implementación
|
||||
|
||||
### 🚧 **FASE 1: Verificación del Estado Actual**
|
||||
@@ -26,11 +34,8 @@ Configurar correctamente los registros DNS de DKIM para el dominio `frlr.utn.edu
|
||||
#### Tareas Iniciales
|
||||
- [x] **1.1:** Verificar registros DKIM actuales en el DNS
|
||||
- [x] **1.2:** Verificar estado de DKIM en Microsoft 365 Admin Center
|
||||
- [x] **1.3:** Documentar configuración SPF actual
|
||||
- [x] **1.3:** Documentar configuración SPF actual (`dig frlr.utn.edu.ar TXT`)
|
||||
- [x] **1.4:** Registrar evento de inicio en bitácora (#1419) (`dig selector1._domainkey.frlr.utn.edu.ar CNAME`)
|
||||
- [ ] **1.2:** Verificar estado de DKIM en Microsoft 365 Admin Center
|
||||
- [ ] **1.3:** Documentar configuración SPF actual (`dig frlr.utn.edu.ar TXT`)
|
||||
- [ ] **1.4:** Registrar evento de inicio en bitácora
|
||||
|
||||
**Comandos de diagnóstico:**
|
||||
```bash
|
||||
@@ -97,15 +102,15 @@ dig _dmarc.frlr.utn.edu.ar TXT
|
||||
- `selector1._domainkey.frlr.utn.edu.ar` → `selector1-frlr-utn-edu-ar._domainkey.o365frlrutneduar.onmicrosoft.com.` ✓
|
||||
- `selector2._domainkey.frlr.utn.edu.ar` → `selector2-frlr-utn-edu-ar._domainkey.o365frlrutneduar.onmicrosoft.com.` ✓
|
||||
- [x] **4.2:** Confirmar DKIM habilitado en Microsoft 365
|
||||
- [x] **4.3:** Enviar correo de prueba a cuenta Gmail - **Llega pero va a SPAM**
|
||||
- [ ] **4.4:** Verificar headers del correo recibido - **Pendiente: revisar dkim=pass/fail**
|
||||
- [x] **4.3:** Enviar correo de prueba a cuenta Gmail - **Completado**
|
||||
- [x] **4.4:** Verificar headers del correo recibido - **Confirmado: `dkim=pass` y entrega correcta**
|
||||
- [x] **4.5:** Cerrar evento en bitácora (#1419 cerrado 21:55)
|
||||
|
||||
**Estado actual (2026-04-07 22:10):**
|
||||
- ✅ DKIM configurado y habilitado en M365
|
||||
**Estado actual (2026-04-10):**
|
||||
- ✅ DKIM configurado y validado en DNS público (`o365frlrutneduar.onmicrosoft.com`)
|
||||
- ✅ SPF configurado correctamente
|
||||
- ✅ **DMARC AGREGADO** - `_dmarc.frlr.utn.edu.ar` con `p=none` (monitoreo)
|
||||
- ⚠️ Gmail marca correos como spam (reputación de dominio en calentamiento - 24-72 horas)
|
||||
- ✅ **DMARC AGREGADO** - `_dmarc.frlr.utn.edu.ar` reportando (`p=none`)
|
||||
- ✅ Periodo de calentamiento superado. Correos validados sin ser marcados como SPAM.
|
||||
|
||||
**Triada de autenticación COMPLETA:** SPF + DKIM + DMARC
|
||||
|
||||
@@ -181,7 +186,7 @@ mail._domainkey.frlr.utn.edu.ar. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA
|
||||
| :--- | :--- | :--- |
|
||||
| `A07_dtic-DNS.md` | ✅ Actualizado | Ámbito operativo |
|
||||
| `A07.P001_Deteccion-Conexion-DNS.md` | ✅ Completado | Plan anterior |
|
||||
| `A07.P002_Resolver-DKIM-Gmail.md` | 🚧 En Ejecución | Este plan |
|
||||
| `A07.P002_Resolver-DKIM-Gmail.md` | ✅ Completado | Este plan |
|
||||
| `docs/contexto/IA.md` | ⏳ Pendiente | Actualizar post-resolución |
|
||||
|
||||
---
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,194 @@
|
||||
# A06.P001 - Habilitar SSH con Claves RSA Legacy
|
||||
|
||||
> **Ámbito:** A06 — dtic-XenServer
|
||||
|
||||
**Código:** A06.P001
|
||||
**Fecha:** 10 de abril de 2026
|
||||
**Autor:** Sistema ADN
|
||||
**Versión:** 1.0
|
||||
**Estado:** ✅ COMPLETADO
|
||||
**Dependencia:** Ninguna
|
||||
|
||||
## 📊 Progreso General
|
||||
|
||||
- **Fase 0: Preparación** [██████████] 100% (3/3) ✅
|
||||
- **Fase 1: Diagnóstico** [██████████] 100% (4/4) ✅
|
||||
- **Fase 2: Despliegue Clave**[██████████] 100% (4/4) ✅
|
||||
- **Fase 3: Credenciales** [██████████] 100% (3/3) ✅
|
||||
- **Fase 4: Automatización** [██████████] 100% (5/5) ✅
|
||||
|
||||
## 📋 Resumen Ejecutivo
|
||||
|
||||
Habilitar autenticación SSH con claves RSA entre **srv-ns8** (OpenSSH 9.2) y **srv-xen1** (OpenSSH 6.6.1, Citrix XenServer 7.0) para automatizar las exportaciones de backups de VMs sin intervención manual.
|
||||
|
||||
**Problema identificado:**
|
||||
- OpenSSH 9.2 (srv-ns8) usa por defecto algoritmos `rsa-sha2-256/512`
|
||||
- OpenSSH 6.6.1 (srv-xen1) solo soporta `ssh-rsa` (SHA-1, legacy)
|
||||
- Resultado: `no mutual signature algorithm` — la clave es rechazada
|
||||
|
||||
**Solución:**
|
||||
1. Agregar opciones SSH legacy para compatibilidad
|
||||
2. Desplegar clave pública en srv-xen1 usando password temporal
|
||||
3. Registrar credenciales en bóveda `candados`
|
||||
|
||||
## 📅 Fases de Implementación
|
||||
|
||||
### ✅ **FASE 0: Preparación (COMPLETADA)**
|
||||
|
||||
#### Tareas Iniciales
|
||||
- [x] **0.1:** Crear ámbito dtic-XenServer en `docs/ambito/dtic-XenServer/`
|
||||
- [x] **0.2:** Crear este plan en `A06.P001_Habilitar_SSH_Legacy.md`
|
||||
- [x] **0.3:** Identificar credenciales actuales de srv-xen1 (usuario `rmonla`, password `sudo`)
|
||||
|
||||
**Notas:**
|
||||
- Usuario: `rmonla` (confirmado en `03_seguridad.md`)
|
||||
- Password: `sudo` (clave genérica en bóveda para XenServer)
|
||||
- IP: `10.0.10.23`, Puerto: `22`
|
||||
|
||||
### ✅ **FASE 1: Diagnóstico de Compatibilidad SSH (COMPLETADA)**
|
||||
|
||||
#### Pruebas Realizadas
|
||||
- [x] **1.1:** Verificar versión OpenSSH en srv-xen1 (`ssh -V` remoto)
|
||||
- [x] **1.2:** Listar algoritmos soportados por servidor (`ssh -Q kex`)
|
||||
- [x] **1.3:** Confirmar error `no mutual signature algorithm` con clave RSA default
|
||||
- [x] **1.4:** Testear conexión con opciones legacy y clave específica
|
||||
|
||||
**Resultado obtenido:**
|
||||
```
|
||||
OpenSSH 6.6.1p1 XenServer 7.0
|
||||
Clave instalada: id_rsa_xen (xen-connection)
|
||||
Opciones requeridas: -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa
|
||||
```
|
||||
|
||||
### ✅ **FASE 2: Despliegue de Clave Pública (COMPLETADA)**
|
||||
|
||||
#### Procedimiento Ejecutado
|
||||
- [x] **2.1:** Obtener password de bóveda (`candados.rb get srv-xen01:rmonla`)
|
||||
- [x] **2.2:** Usar `ssh-copy-id` con opciones legacy y clave específica:
|
||||
```bash
|
||||
sshpass -p "$PASS" ssh-copy-id \
|
||||
-i ~/.ssh/id_rsa_xen.pub \
|
||||
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||
-o HostkeyAlgorithms=+ssh-rsa \
|
||||
rmonla@10.0.10.23
|
||||
```
|
||||
- [x] **2.3:** Verificar que clave se agregó a `~/.ssh/authorized_keys` en srv-xen1
|
||||
- [x] **2.4:** Testear conexión sin password:
|
||||
```bash
|
||||
ssh -i ~/.ssh/id_rsa_xen \
|
||||
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||
-o HostkeyAlgorithms=+ssh-rsa \
|
||||
rmonla@10.0.10.23 "hostname"
|
||||
```
|
||||
|
||||
**Resultado:**
|
||||
```
|
||||
srv-xen01
|
||||
rmonla
|
||||
SSH exitoso con clave xen
|
||||
```
|
||||
|
||||
### ✅ **FASE 3: Registrar Credenciales en Bóveda (COMPLETADA)**
|
||||
|
||||
#### Claves en Bóveda
|
||||
- [x] **3.1:** `srv-xen01:rmonla` — password de usuario (ya existente)
|
||||
- [x] **3.2:** Clave SSH: `~/.ssh/id_rsa_xen` (xen-connection, passphrase protegida)
|
||||
- [x] **3.3:** Ficha `nodos/srv-xen1.md` actualizada con:
|
||||
- Usuario: `rmonla`
|
||||
- Auth: `RSA Legacy` (OpenSSH 6.6.1)
|
||||
- Bóveda: `srv-xen01:rmonla`
|
||||
- Clave: `~/.ssh/id_rsa_xen`
|
||||
- SSH opts: `-o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa`
|
||||
|
||||
### ✅ **FASE 4: Automatización en ADN CLI (COMPLETADA)**
|
||||
|
||||
#### Modificaciones a `adn/tools/cli/ssh.rb`
|
||||
- [x] **4.1:** Detectar nodo srv-xen1 y aplicar opciones legacy automáticamente
|
||||
- [x] **4.2:** Agregar método `ejecutar_con_rsa_legacy()` para nodos XenServer
|
||||
- [x] **4.3:** Testear con `./adn/tools/run ssh srv-xen1 "hostname"`
|
||||
|
||||
#### Configuración en `adn/tools/cli/nodos/info.rb`
|
||||
- [x] **4.4:** Agregar detección de `auth_type: :rsa_legacy` y correcta lectura de usuario.
|
||||
- [x] **4.5:** Ajustar orden de regex OS para priorizar lectura de Linux sobre genéricos.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Criterios de Éxito
|
||||
|
||||
| Fase | Criterio | Verificación |
|
||||
| :--- | :--- | :--- |
|
||||
| **Diagnóstico** | Algoritmos identificados | ✅ `ssh -Q kex` ejecutado |
|
||||
| **Despliegue** | Clave pública instalada | ✅ `authorized_keys` en srv-xen1 |
|
||||
| **Conexión** | SSH sin password funcional | ✅ `ssh srv-xen1 "hostname"` OK |
|
||||
| **Automatización** | ADN CLI soporta legacy | ✅ `./adn/tools/run ssh srv-xen1` OK |
|
||||
|
||||
## 📝 Notas Técnicas
|
||||
|
||||
### Incompatibilidad RSA: OpenSSH 9.2 vs 6.6.1
|
||||
|
||||
| Versión | Algoritmos RSA | Estado |
|
||||
| :--- | :--- | :--- |
|
||||
| **OpenSSH 9.2+** (2023+) | `rsa-sha2-256`, `rsa-sha2-512` | ✅ Seguro (SHA-2) |
|
||||
| **OpenSSH 8.8+** (2021+) | `ssh-rsa` DESACTIVADO por defecto | ⚠️ SHA-1 débil |
|
||||
| **OpenSSH 6.6.1** (2014, XenServer 7.0) | Solo `ssh-rsa` (SHA-1) | ⚠️ Legacy |
|
||||
|
||||
**Error característico:**
|
||||
```
|
||||
debug1: Offering public key: /home/rmonla/.ssh/id_rsa
|
||||
debug1: send_pubkey_test: no mutual signature algorithm
|
||||
```
|
||||
|
||||
### Opciones SSH para Compatibilidad Legacy
|
||||
|
||||
```bash
|
||||
# Forzar algoritmo ssh-rsa (SHA-1) para servidores antiguos
|
||||
-o PubkeyAcceptedAlgorithms=+ssh-rsa
|
||||
-o HostkeyAlgorithms=+ssh-rsa
|
||||
|
||||
# Para OpenSSH < 7.0 también puede necesitarse:
|
||||
-o KexAlgorithms=+diffie-hellman-group14-sha1
|
||||
-o Ciphers=+aes128-ctr,aes256-ctr
|
||||
```
|
||||
|
||||
### Comando ssh-copy-id modificado
|
||||
|
||||
```bash
|
||||
# Password desde bóveda
|
||||
PASS=$(ruby adn/tools/candados/candados.rb get srv-xen1:rmonla:password)
|
||||
|
||||
# Desplegar clave con opciones legacy
|
||||
sshpass -p "$PASS" ssh-copy-id \
|
||||
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||
-o HostkeyAlgorithms=+ssh-rsa \
|
||||
-o StrictHostKeyChecking=no \
|
||||
rmonla@10.0.10.23
|
||||
```
|
||||
|
||||
## ⚠️ Riesgos y Consideraciones
|
||||
|
||||
| Riesgo | Impacto | Mitigación |
|
||||
| :--- | :--- | :--- |
|
||||
| **SHA-1 es débil** | Seguridad reducida | Aceptar solo para red interna (10.0.10.x) |
|
||||
| **XenServer 7.0 EOL** | Sin parches de seguridad | Aislar red, solo acceso desde srv-ns8 |
|
||||
| **Migración futura** | Cambiar hipervisor | Documentar para transición a Proxmox |
|
||||
|
||||
## 🔄 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 | Este plan |
|
||||
| `nodos/srv-xen1.md` | ✅ Actualizado | Info de autenticación agregada |
|
||||
| `adn/tools/cli/ssh.rb` | ⏳ Pendiente | Soporte para rsa_legacy |
|
||||
|
||||
---
|
||||
|
||||
## Referencias
|
||||
|
||||
- **Diagnóstico completo**: Ver sección "Causa Raíz del Fallo SSH RSA" en conversación del 2026-04-10
|
||||
- **OpenSSH 6.6.1 compat**: [Release Notes](https://www.openssh.com/releasenotes.html)
|
||||
- **Citrix XenServer 7.0 Docs**: [Management CLI](https://docs.citrix.com/en-us/citrix-hypervisor/xenserver/v7/management.html)
|
||||
- **ADN CLI SSH**: [`adn/tools/cli/ssh.rb`](../../../adn/tools/cli/ssh.rb)
|
||||
- **Nodo srv-xen1**: [`nodos/srv-xen1.md`](../../../nodos/srv-xen1.md)
|
||||
@@ -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)
|
||||
@@ -0,0 +1,164 @@
|
||||
# A06 - Ámbito dtic-XenServer
|
||||
|
||||
> Manifiesto de Ámbito | Referencia: [`adn/01_ontologia.md`](../../../adn/01_ontologia.md)
|
||||
|
||||
## Identificación
|
||||
|
||||
| Campo | Valor |
|
||||
| :--- | :--- |
|
||||
| **Código** | A06 |
|
||||
| **Nombre** | Administración Hipervisor Citrix XenServer |
|
||||
| **Estado** | ⚠️ En Mantenimiento |
|
||||
| **Inicio** | 10/04/2026 |
|
||||
| **Fin Estimado** | Por definir (migración o modernización) |
|
||||
|
||||
## Objetivo
|
||||
|
||||
El ámbito **dtic-XenServer** engloba todas las operaciones relacionadas con la administración, mantenimiento y optimización del hipervisor **Citrix XenServer 7.0** (`srv-xen1`) que aloja máquinas virtuales críticas de la infraestructura DTIC.
|
||||
|
||||
Este ámbito cubre:
|
||||
|
||||
1. **Gestión de VMs** — Administración de máquinas virtuales alojadas en XenServer.
|
||||
2. **Backups y exportaciones** — Exportación de VMs en formato XVA y transferencia a almacenamiento central.
|
||||
3. **Optimización de transferencias** — Mejora de tiempos de backup mediante compresión y ajuste de ventanas.
|
||||
4. **Mantenimiento de hipervisor legacy** — XenServer 7.0 requiere configuración especial por antigüedad (OpenSSH 6.6.1).
|
||||
|
||||
## Herramientas
|
||||
|
||||
| Herramienta | Uso |
|
||||
| :--- | :--- |
|
||||
| **xe CLI** | `xe vm-list`, `xe vm-export`, `xe vm-params` — comandos nativos XenServer |
|
||||
| **ADN CLI `ssh`** | `./adn/tools/run ssh <nodo> <comando>` — ejecución remota con gestión de secretos |
|
||||
| **rclone** | Sincronización de backups procesados hacia nube (OneDrive) |
|
||||
| **ADN CLI `dron`** | `./adn/tools/run dron` — vigía de tareas largas de exportación con auto-bitácora |
|
||||
| **sshpass** | Automatización de conexiones SSH con autenticación por password |
|
||||
|
||||
## Nodos Involucrados
|
||||
|
||||
### Hipervisor XenServer (Núcleo del Ámbito)
|
||||
|
||||
| Nodo | IP | Rol en el Ámbito |
|
||||
| :--- | :--- | :--- |
|
||||
| **srv-xen1** | `10.0.10.23` | Citrix XenServer 7.0.0 — Hipervisor principal |
|
||||
|
||||
### Máquinas Virtuales Alojadas
|
||||
|
||||
| VM | IP | Rol | Estado |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **srvv-sysacadweb** | `10.0.10.12` | Servidor Web SysACAD | 🟢 Operativa |
|
||||
| **srvv-maurik** | `10.0.10.10` | Domain Controller (UTNLARIOJA) | 🟢 Operativa |
|
||||
|
||||
### Nodos de Soporte
|
||||
|
||||
| Nodo | IP | Rol en el Ámbito |
|
||||
| :--- | :--- | :--- |
|
||||
| **srv-ns8** | `10.0.10.8` | Almacenamiento central de backups, punto de gestión |
|
||||
|
||||
## Limitaciones Técnicas Identificadas
|
||||
|
||||
| Limitación | Impacto | Solución |
|
||||
| :--- | :--- | :--- |
|
||||
| **OpenSSH 6.6.1** (XenServer 7.0) | Incompatible con `rsa-sha2-256/512` de OpenSSH 9.2 | Usar `-o PubkeyAcceptedAlgorithms=+ssh-rsa` |
|
||||
| **Disco raíz limitado** (2.7 GB libre en Dom0) | No permite compresión local de XVA | Stream directo a NS8 sin compresión intermedia |
|
||||
| **Sin claves RSA desplegadas** | Autenticación solo por password | Pendiente: `ssh-copy-id` con opciones legacy |
|
||||
|
||||
## Tareas Configuradas
|
||||
|
||||
| ID | Descripción | Tipo |
|
||||
| :--- | :--- | :--- |
|
||||
| `xen_export` | Exportar VM a XVA vía xe CLI | export |
|
||||
| `xen_stream_to_ns8` | Stream SSH de XVA a srv-ns8 | transfer |
|
||||
| `xen_compress_post` | Compresión pos-proceso en NS8 | process |
|
||||
| `xen_upload_nube` | Upload de XVA procesado a OneDrive | sync |
|
||||
|
||||
## Flujo de Trabajo Típico
|
||||
|
||||
```
|
||||
1. Registrar evento en bitácora (inicio exportación XenServer)
|
||||
2. Conectar a srv-xen1 con opciones SSH legacy:
|
||||
ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||
-o HostkeyAlgorithms=+ssh-rsa \
|
||||
rmonla@10.0.10.23
|
||||
3. Exportar VM: xe vm-export vm=<nombre> filename=/tmp/vm.xva
|
||||
4. Stream a NS8: ssh rmonla@10.0.10.23 "xe vm-export ..." | ssh srv-ns8 "cat > /backup/vm.xva"
|
||||
5. Monitorear progreso (dron lanzar si es largo)
|
||||
6. Cerrar evento en bitácora
|
||||
```
|
||||
|
||||
### Comandos SSH con Compatibilidad Legacy
|
||||
|
||||
```bash
|
||||
# Conexión interactiva con algoritmos legacy
|
||||
ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||
-o HostkeyAlgorithms=+ssh-rsa \
|
||||
rmonla@10.0.10.23
|
||||
|
||||
# Stream de exportación con compresión
|
||||
ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||
-o HostkeyAlgorithms=+ssh-rsa \
|
||||
rmonla@10.0.10.23 "xe vm-export vm=srvv-sysacadweb filename=/dev/stdout" | \
|
||||
gzip | \
|
||||
ssh srv-ns8 "cat > /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/srvv-sysacadweb.xva.gz"
|
||||
|
||||
# Con sshpass para automatización (password desde candados)
|
||||
PASS=$(ruby adn/tools/candados/candados.rb get sudo)
|
||||
sshpass -p "$PASS" ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||
-o HostkeyAlgorithms=+ssh-rsa \
|
||||
rmonla@10.0.10.23 "hostname; xe vm-list"
|
||||
```
|
||||
|
||||
## Planes Asociados
|
||||
|
||||
| Código | Nombre | Estado |
|
||||
| :--- | :--- | :--- |
|
||||
| [A06.P001](A06.P001_Habilitar_SSH_Legacy.md) | Habilitar SSH con Claves RSA Legacy | ✅ Completado |
|
||||
| [A06.P002](A06.P002_Optimizar_Exportacion_XVA.md) | Optimizar Exportación XVA con Compresión | 🚧 En Ejecución |
|
||||
| [A03.P003](../dtic-BKPs/A03.P003_Optimizacion_SysAcadWeb.md) | Optimización Backup SysAcadWeb | ⏳ En Ejecución |
|
||||
|
||||
> **Nota:** A03.P003 está vinculado a este ámbito aunque reside en dtic-BKPs por ser el ámbito ejecutor del backup.
|
||||
|
||||
## 🛸 Sistema de Drones (Operación Autónoma)
|
||||
|
||||
**Herramienta:** `./adn/tools/run dron <subcomando>`
|
||||
|
||||
| Subcomando | Función |
|
||||
| :--- | :--- |
|
||||
| `dron lanzar --evento ID/AUTO --nota "X" -- <cmd>` | Lanzar tarea en background con auto-bitácora |
|
||||
| `dron flota` | Dashboard compacto de la flota |
|
||||
| `dron salud` | Health check activo (detecta zombies/estancados) |
|
||||
| `dron estado` | Estado detallado de cada dron |
|
||||
| `dron limpiar` | Limpiar tareas completadas/fallidas |
|
||||
|
||||
**Evento AUTO:** Crea evento de bitácora automáticamente y lo cierra al finalizar. Ideal para exportaciones nocturnas.
|
||||
|
||||
**Ejemplo para exportación larga (~10 horas):**
|
||||
```bash
|
||||
./adn/tools/run dron lanzar --evento AUTO --nota "Exportación 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.xva.gz
|
||||
```
|
||||
|
||||
## 🔄 Armonía Integral
|
||||
|
||||
**Última actualización:** 2026-04-10 (creación de ámbito + diagnóstico SSH)
|
||||
|
||||
| Documento | Estado | Notas |
|
||||
| :--- | :--- | :--- |
|
||||
| `A06_dtic-XenServer.md` | ✅ Creado | Manifiesto del ámbito |
|
||||
| `A06.P001_Habilitar_SSH_Legacy.md` | ✅ Completado | Plan para desplegar claves RSA y parche herramientas |
|
||||
| `A06.P002_Optimizar_Exportacion_XVA.md` | 🚧 En Ejecución | Plan para compresión y ventanas |
|
||||
| `nodos/srv-xen1.md` | ✅ Actualizado | Ficha con info de autenticación SSH |
|
||||
| `nodos/srvv-sysacadweb.md` | ✅ Actualizado | Ficha de VM crítica |
|
||||
| `nodos/srvv-maurik.md` | ✅ Actualizado | Ficha de Domain Controller |
|
||||
|
||||
---
|
||||
|
||||
## Referencias
|
||||
|
||||
- **Comandos xe**: `xe help` (en srv-xen1) o [Citrix XenServer 7.0 Docs](https://docs.citrix.com/en-us/citrix-hypervisor/xenserver/v7/management.html)
|
||||
- **ADN Ontología**: [`adn/01_ontologia.md`](../../../adn/01_ontologia.md)
|
||||
- **Bitácoras**: `./adn/tools/run db evento:listar --ambito dtic-XenServer`
|
||||
- **Nodo srv-xen1**: [`nodos/srv-xen1.md`](../../../nodos/srv-xen1.md)
|
||||
- **Nodo srvv-sysacadweb**: [`nodos/srvv-sysacadweb.md`](../../../nodos/srvv-sysacadweb.md)
|
||||
- **Nodo srvv-maurik**: [`nodos/srvv-maurik.md`](../../../nodos/srvv-maurik.md)
|
||||
- **Diagnóstico SSH**: Ver sección "Limitaciones Técnicas Identificadas" en este documento
|
||||
Reference in New Issue
Block a user