Problema
Muchas organizaciones intentan sustituir hipervisores tradicionales por Proxmox VE para aprovechar hardware reutilizado y reducir costes. El salto a producción suele tropezar con tres grupos de síntomas recurrentes:
- Almacenamiento mixto – se combina Ceph, ZFS y arrays externos (iSCSI/NFS/FC) sin una estrategia clara, lo que genera cuellos de botella y pérdida de rendimiento.
- Corosync inestable – enlaces dedicados con latencia variable, configuraciones de dos nodos sin quorum y dispositivos Q que provocan split‑brain.
- Migración de VMs – importaciones desde ESXi, controladores VirtIO para Windows y snapshots QCOW2 que no se comportan como se espera.
En entornos donde la disponibilidad es crítica, cualquiera de estos puntos puede desencadenar caídas inesperadas, pérdida de datos o migraciones fallidas que obligan a volver al hipervisor anterior.
Causa
Almacenamiento heterogéneo
- Ceph sin planificación de red: Ceph depende de una red de baja latencia y alta capacidad. Cuando se mezcla con tráfico de gestión o backup, la congestión degrada tanto el backend de bloques como el de objetos.
- ZFS sobre discos SSD sin alineación: ZFS aprovecha la caché L2ARC y la deduplicación, pero si los discos no están alineados o el pool se crea con tamaños dispares, el rendimiento se vuelve impredecible.
- Arrays externos sin tuning: iSCSI/NFS/FC pueden quedar bajo‑utilizados o, por el contrario, saturar el enlace si el MTU no coincide o si el multipathing no está habilitado.
Corosync sensible a latencia
- Enlaces de gestión compartidos: usar la misma NIC para tráfico de VM y para el anillo de corosync introduce jitter que rompe el algoritmo de consenso.
- Dos nodos sin quorum: un cluster de dos sin un QDevice carece de mayoría, por lo que cualquier caída de nodo genera split‑brain.
- Configuración de latencia: valores por defecto (ping‑interval 1000 ms, max‑miss‑count 5) son demasiado laxos para entornos con enlaces de < 1 ms.
Migración desde VMware
- Import wizard incompleto: el asistente de importación de ESXi no traduce todas las configuraciones de red y discos, dejando VMs sin drivers VirtIO o con discos en modo “thick”.
- Snapshots QCOW2: al copiar una VM con snapshots, Proxmox crea una cadena de capas que puede colapsar el espacio de almacenamiento si no se compacta.
- Drivers Windows: la falta del paquete de drivers VirtIO para Windows obliga a arrancar en modo IDE, lo que impacta el rendimiento y la estabilidad.
Solución
1. Arquitectura de almacenamiento coherente
- Define un dominio de red exclusivo para Ceph (por ejemplo, VLAN 30). Asegúrate de que todos los OSD y monitores usen MTU 9000 y QoS para priorizar tráfico de replicación.
- Crea pools ZFS alineados: usa
zpool create -o ashift=12para discos de 4 KB y agrupa discos de capacidad similar. Habilitacompression=lz4y desactiva deduplicación a menos que sea estrictamente necesario. - Integra arrays externos mediante multipathing: en
/etc/multipath.confdefinedefaults { user_friendly_names yes }y habilitafeatures "1 queue_if_no_path"para evitar I/O stalls. - Unifica la capa de presentación: exporta los volúmenes Ceph y ZFS como LVM‑thin o RBD y usa NFS solo como gateway de backup, nunca como datastore primario.
2. Corosync robusto
- Separa físicamente los enlaces: dedica al menos una NIC de 10 GbE exclusivamente al anillo de corosync. Conecta los nodos mediante un switch de capa 2 sin STP.
- Implementa un QDevice: en clusters de dos nodos, añade un tercer nodo ligero (puede ser un VM) como QDevice. Configura con
pcs qdevice add model nety apunta al endpoint. - Ajusta los timers: en
/etc/corosync/corosync.confestablece:Estos valores reducen la ventana de split‑brain y mejoran la detección de fallos.totem { version: 2 token: 2000 token_retransmits_before_loss_const: 10 join: 60 consensus: 6000 max_messages: 20 interface { ringnumber: 0 bindnetaddr: 10.0.30.0 mcastaddr: 239.192.0.1 mcastport: 5405 } }
3. Migración fiable de VMs
- Exporta VMs como OVF desde ESXi, no como VMDK bruto. El OVF conserva la topología de red y los discos en formato “thin”.
- Importa con
qm importovfen Proxmox, especificando el storage destino (qm importovf vm100.ovf local-lvm). - Instala drivers VirtIO antes del arranque: monta la ISO de VirtIO (
virtio-win.iso) como CD‑ROM y ejecuta el instalador de drivers de red y disco dentro de la VM. - Compacta cadenas QCOW2 después de la importación:
qemu-img convert -O qcow2 -c vm100-disk-0.qcow2 vm100-disk-0-compacted.qcow2 && mv vm100-disk-0-compacted.qcow2 vm100-disk-0.qcow2. - Valida la configuración de backup: crea un job de backup Vzdump con
mode snapshoty verifica que la VM se pueda restaurar en un nodo diferente.
Cuándo aplicar esta solución
- Entornos con alta disponibilidad: cualquier cluster que requiera uptime > 99.9 % necesita la separación de enlaces y QDevice.
- Infraestructura mixta: si ya existen arrays iSCSI/NFS, la estrategia de multipathing y VLAN dedicada evita la sobrecarga de Ceph.
- Migraciones masivas: cuando se trasladan decenas de VMs desde VMware, el flujo OVF + drivers VirtIO reduce errores de arranque y pérdida de rendimiento.
- No aplicar: en laboratorios de pruebas donde la latencia y la disponibilidad no son críticas, la configuración completa de QDevice y VLAN puede ser excesiva.
Código
# Configuración básica de multipath
cat > /etc/multipath.conf <<EOF
defaults {
user_friendly_names yes
}
blacklist {
devnode "^sd[a-z]"
}
EOF
systemctl restart multipathd
# Ajuste de Corosync (ejemplo simplificado)
cat > /etc/corosync/corosync.conf <<EOF
totem {
version: 2
token: 2000
token_retransmits_before_loss_const: 10
join: 60
consensus: 6000
max_messages: 20
interface {
ringnumber: 0
bindnetaddr: 10.0.30.0
mcastaddr: 239.192.0.1
mcastport: 5405
}
}
nodelist {
node {
ring0_addr: node1
nodeid: 1
}
node {
ring0_addr: node2
nodeid: 2
}
}
quorum {
provider: corosync_votequorum
}
EOF
systemctl restart corosync
# Importar VM desde OVF
qm importovf vm101.ovf local-lvm
Verificación
- Almacenamiento: ejecuta
zpool statusyceph -s. Ambos deben mostrar HEALTH OK y sin OSD down. - Corosync:
corosync-cfgtool -sdebe listar los nodos y el QDevice.pvecm statusdebe indicar quorum 2/3. - Migración: arranca la VM importada, verifica que los dispositivos de red aparecen como
virtioy quedmesgno muestra errores de driver. Realiza un backup convzdumpy restaura en el nodo secundario. - Rendimiento: usa
fiooddcontra el storage para confirmar que los IOPS y latencias están dentro de los umbrales esperados (por ejemplo, < 5 ms para reads en SSD).
Notas adicionales
- Monitoreo: integra
prometheus-node-exporterypve-exporterpara alertas tempranas de latencia de corosync y degradación de OSD. - Actualizaciones: siempre prueba los upgrades de Proxmox en un nodo de prueba antes de aplicar al cluster productivo; los cambios en la versión de Ceph pueden requerir migración de crush map.
- Backup externo: aunque Proxmox ofrece snapshots, mantén copias fuera del cluster (por ejemplo, a un bucket S3 compatible) para cubrir escenarios de pérdida total del datacenter.
- Documentación interna: registra la topología de red, los IDs de QDevice y los pools de storage en un wiki interno; facilita la resolución de incidentes y la incorporación de nuevo personal.