🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Almacenamiento Definido por Software (SDS) con Ceph: Rendimiento a Escala

Actualizado el 29 de noviembre de 2025

Introducción: El cambio de paradigma en el almacenamiento empresarial

El crecimiento exponencial de datos no estructurados, la virtualización masiva y la adopción de contenedores han puesto contra las cuerdas a los sistemas de almacenamiento tradicionales basados en hardware propietario. Las SAN/NAS clásicas, con sus controladores dedicados y discos JBOD, se enfrentan a problemas de escalabilidad vertical, costes elevados y cuellos de botella que limitan el rendimiento. Aquí es donde irrumpe el almacenamiento definido por software (SDS).

El SDS desacopla el software de gestión de datos del hardware subyacente, permitiendo utilizar servidores commodity y discos estándar para crear pools de almacenamiento distribuidos, altamente escalables y con tolerancia a fallos nativa. Dentro de este ecosistema, Ceph se ha consolidado como el estándar de facto para entornos cloud, clústeres de OpenStack y plataformas Kubernetes.

Este artículo profundiza en cómo Ceph logra ofrecer alto rendimiento a escala sin sacrificar la fiabilidad. Analizaremos su arquitectura interna, las claves de rendimiento, las estrategias de tuning y los casos de uso donde realmente brilla.


¿Qué hace a Ceph diferente? La arquitectura RADOS

Para entender el rendimiento de Ceph, hay que olvidarse de los volúmenes LUN y los cabezales de control. Ceph se basa en RADOS (Reliable Autonomic Distributed Object Store), un sistema de almacenamiento distribuido que opera a nivel de objetos.

Componentes críticos de un clúster Ceph

  • OSD (Object Storage Daemon): El corazón del sistema. Cada disco físico o partición ejecuta un proceso OSD. Es responsable de almacenar objetos, replicarlos, realizar operaciones de lectura/escritura y participar en el rebalanceo. El número de OSDs es el principal factor de rendimiento agregado.
  • MON (Monitor): Mantienen el mapa del clúster (cluster map), incluyendo el estado de cada OSD, los pools y la configuración de CRUSH. Necesitan consenso (Paxos) y son el punto de entrada de los clientes.
  • MGR (Manager): Recopila métricas de rendimiento, uso y salud. Esencial para el balanceo de carga y la integración con sistemas de monitorización como Prometheus.
  • MDS (Metadata Server): Solo necesario para el sistema de archivos CephFS. Almacenan metadatos de archivos y directorios, permitiendo operaciones POSIX.

[INFO] A diferencia de sistemas como GlusterFS, Ceph no tiene un único punto de fallo a nivel de metadatos (gracias a los MDS múltiples y el uso de RADOS para los metadatos en CephFS).

El algoritmo CRUSH: La inteligencia distribuida

CRUSH (Controlled Replication Under Scalable Hashing) es el algoritmo que decide dónde colocar cada objeto. En lugar de usar una tabla de lookup centralizada (como en HDFS o sistemas tradicionales), CRUSH calcula la ubicación de forma determinista usando el ID del objeto, el número de réplicas y la jerarquía del clúster (racks, hosts, discos).

Ventajas clave de CRUSH para el rendimiento:

  • Escalabilidad lineal: No hay un cuello de botella central. Cada cliente puede calcular directamente dónde leer/escribir.
  • Balanceo automático: Al añadir o quitar OSDs, CRUSH redistribuye los objetos de forma casi uniforme.
  • Tolerancia a fallos jerárquica: Puedes definir reglas como "tres réplicas en tres racks diferentes" para sobrevivir a fallos de rack completos.

Estrategias de alto rendimiento en Ceph

Lograr que Ceph rinda a escala no es cuestión de magia, sino de entender sus parámetros de configuración y el hardware subyacente.

1. Elección de hardware y redes

El rendimiento de Ceph está directamente ligado a:

  • Redes: Una red de 10 Gbps es el mínimo absoluto para producción. Para clústeres medianos/grandes, 25 Gbps o 100 Gbps son recomendables. El uso de Redes separadas (front-end para clientes, back-end para replicación interna) es una práctica obligada.
  • Discos: Para alto rendimiento en IOPS, usa NVMe o SSD SATA. Para capacidad masiva, HDD de 7200 rpm con un NVMe como cache (WAL/DB) en el mismo OSD.
  • RAM: Cada OSD necesita al menos 4 GB de RAM, pero para cargas de trabajo pesadas, 8-16 GB por OSD es lo normal. La RAM se usa para cache de lectura y operaciones de journal.

2. Tuning de parámetros críticos

Ajustar los siguientes parámetros en /etc/ceph/ceph.conf puede marcar la diferencia:

[global]
# Reducir el número de PGs por OSD para mejorar rendimiento (regla general: 100-200 PGs por OSD)
mon pg warn max per osd = 0
osd max backfills = 4
osd recovery max active = 4

# Ajustar el tamaño de los buffers de red
ms dispatch throttle bytes = 104857600
ms inject socket failures = 0

# Cache de objetos (para OSDs con SSD)
osd memory target = 4294967296  # 4GB por OSD

[osd]
# Ajustar el número de hilos de trabajo
osd op threads = 8
osd disk threads = 4

[TIP] Para cargas de trabajo con muchas escrituras aleatorias (bases de datos), considera usar BlueStore (el backend por defecto desde Jewel) con NVMe para el WAL y el DB. Esto reduce drásticamente la latencia.

3. Planificación de Pools y PG (Placement Groups)

Las PGs son contenedores lógicos que agrupan objetos. Un número inadecuado de PGs puede causar desbalanceo o sobrecarga de red.

Fórmula recomendada:

Total PGs = (Número de OSDs * 100) / Número de réplicas

Ejemplo: 30 OSDs, 3 réplicas → 30 * 100 / 3 = 1000 PGs.

Para pools con erasure coding, el rendimiento de lectura puede ser excelente, pero la escritura es más lenta (necesita reconstruir datos). Úsalo solo para datos fríos o de backup.


Tolerancia a fallos: El pilar del SDS con Ceph

La tolerancia a fallos en Ceph no es una característica añadida, es parte del ADN del sistema.

Mecanismos de resiliencia

  • Replicación síncrona: Por defecto, Ceph replica los objetos en N OSDs (normalmente 3). La escritura solo se confirma cuando todas las réplicas han escrito en disco. Esto garantiza consistencia fuerte.
  • Erasure Coding (EC): Divide los datos en fragmentos (k) y añade fragmentos de paridad (m). Ejemplo: k=8, m=3 → sobrevive a la pérdida de 3 OSDs con solo un 37.5% de overhead (vs 200% de 3 réplicas). Ideal para datos de gran tamaño.
  • Self-healing: Si un OSD falla, CRUSH recalcula las ubicaciones y los OSDs restantes rebalancean los datos automáticamente sin intervención manual.

Escenarios de fallo comunes que Ceph maneja bien

  1. Fallo de un disco: El OSD se marca como "down" y "out". Los datos se replican a otros OSDs. El rendimiento puede degradarse temporalmente durante el rebalanceo, pero el sistema sigue funcionando.
  2. Fallo de un nodo completo: Si un servidor con 10 OSDs cae, los 10 OSDs se marcan como out. Ceph redistribuye los datos entre los nodos restantes.
  3. Fallo de red de un rack: Si configuras jerarquías CRUSH con reglas de rack, Ceph asegurará que las réplicas estén en diferentes racks. Un rack caído no provoca pérdida de datos.

[WARNING] La tolerancia a fallos no es gratuita. Durante un rebalanceo masivo (por ejemplo, añadir 10 OSDs nuevos), la red y los discos se saturan. Es crucial limitar el ancho de banda de recuperación con parámetros como osd recovery max active y osd max backfills.


Despliegue práctico: Un clúster básico de alto rendimiento

Vamos a montar un clúster mínimo de 3 nodos (cada uno con 4 OSDs SSD) para ilustrar los conceptos.

Requisitos de hardware (por nodo)

  • CPU: 8 cores (Intel Xeon o AMD EPYC)
  • RAM: 32 GB
  • Red: 2 x 10 Gbps (una para cluster, otra para clientes)
  • Discos: 4 x NVMe de 1 TB (para OSDs) + 1 x SSD de 240 GB (para sistema operativo)

Instalación con cephadm (Ceph Octopus+)

# En el nodo administrador (bootstrap)
cephadm bootstrap --mon-ip <IP_NODO1>

# Añadir los otros nodos
ceph orch host add nodo2 <IP_NODO2>
ceph orch host add nodo3 <IP_NODO3>

# Desplegar OSDs automáticamente
ceph orch apply osd --all-available-devices

# Crear un pool para datos calientes con 3 réplicas
ceph osd pool create hotpool 128 128 replicated
ceph osd pool set hotpool size 3

# Crear un pool con erasure coding para datos fríos
ceph osd erasure-code-profile set coldprofile k=4 m=2
ceph osd pool create coldpool 64 64 erasure coldprofile

Verificación de rendimiento

# Benchmark básico con rados bench
rados bench -p hotpool 60 write --no-cleanup
rados bench -p hotpool 60 seq
rados bench -p hotpool 60 rand

Casos de uso reales: ¿Dónde brilla Ceph?

1. Almacenamiento para OpenStack (Cinder + Glance)

Ceph es el backend de almacenamiento por defecto en OpenStack. Proporciona volúmenes Cinder, imágenes Glance y discos efímeros para instancias. La integración con QEMU/KVM mediante librbd permite live migration y snapshots instantáneos.

2. Persistent Volumes para Kubernetes

Con Rook, Ceph se despliega como un operador nativo de Kubernetes. Proporciona:

  • Block Storage (RBD): Para bases de datos (MySQL, PostgreSQL) y aplicaciones stateful.
  • File Storage (CephFS): Para múltiples pods que necesitan acceso concurrente a archivos.
  • Object Storage (RGW): Para logs, backups y datos de aplicaciones cloud-native.

3. Archivado y backup a gran escala

Usando puertas de enlace S3 (RGW) y erasure coding, Ceph puede reemplazar a soluciones como AWS S3 o MinIO en entornos on-premise. El rendimiento para lecturas secuenciales de objetos grandes (vídeo, imágenes médicas) es excelente.


Desafíos y consideraciones finales

A pesar de su potencia, Ceph no es una bala de plata. Algunos puntos a tener en cuenta:

  • Complejidad operativa: La curva de aprendizaje es empinada. Monitorizar, tunear y solucionar problemas requiere experiencia.
  • Rendimiento en escrituras pequeñas: Con 3 réplicas, cada escritura genera 3 E/S de red y 3 escrituras en disco. Para cargas de trabajo con muchas escrituras pequeñas (bases de datos OLTP), puede ser menos eficiente que un sistema NVMe-oF.
  • Coste de red: Para clústeres grandes (>50 OSDs), la red se convierte en el cuello de botella. Invertir en switches de alta velocidad es obligatorio.

[INFO] Para entornos con requisitos de latencia ultrabaja (menos de 1 ms), considera combinar Ceph con NVMe over Fabrics o usar SPDK para acelerar el path de datos.

Conclusión

El almacenamiento definido por software (SDS) con Ceph representa la evolución lógica del almacenamiento empresarial. Su arquitectura basada en RADOS, el algoritmo CRUSH y la tolerancia a fallos nativa lo convierten en la plataforma ideal para escalar desde unos pocos terabytes hasta varios petabytes sin cambiar la filosofía de diseño.

Para lograr alto rendimiento a escala, la clave está en planificar cuidadosamente la red, elegir el hardware adecuado (NVMe + SSDs), ajustar los parámetros de BlueStore y entender cómo funcionan los PGs y las reglas CRUSH. No es un sistema plug-and-play, pero una vez dominado, ofrece una flexibilidad y resiliencia que los sistemas tradicionales simplemente no pueden igualar.

Si estás construyendo una nube privada, una plataforma de contenedores o simplemente necesitas un sistema de almacenamiento que crezca contigo, Ceph merece un lugar central en tu arquitectura. El futuro del almacenamiento es software-defined, y Ceph es su máximo exponente.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel