Ir al contenido

Ceph: qué es y cómo desplegar un sistema de almacenamiento distribuido

13 de octubre de 2025 por
Ilimit Comunicacions S.L., Oscar Mas

Soy Òscar Mas y os quiero enseñar una herramienta de Storage, que es como una navaja suiza, ya que sirve para cualquier tipo de Storage que queramos presentar a un equipo. Esta herramienta se llama Ceph.

Antes de entrar en profundidad a explicar qué es Ceph, debemos tener claro todos los tipos de Storage que existen. Por suerte nuestra, solo hay tres tipos:

  • De archivos, más conocido como: File Storage
  • De bloques, más conocido como: Block Storage
  • De objetos, más conocido como: Object Storage

Cada tipo de Storage tiene una funcionalidad concreta y es muy importante saber diferenciarlos, ya que si por ejemplo, usamos un tipo de Storage para una cosa que no es la más adecuada, podríamos llegar a tener problemas. Imaginemos por ejemplo que ponemos una máquina virtual en un sistema de objetos, eso sería catastrófico, ya que el rendimiento que nos daría sería pésimo. Pero mejor abordamos en profundidad cada tipo de Storage.

File Storage

Este tipo de sistema de archivos es el que todo el mundo conoce. Es el que usamos en nuestros equipos para trabajar diariamente, el cual está estructurado en carpetas y se pueden dar permisos de acceso a unas carpetas o archivos. En pocas palabras, es donde almacenamos nuestras fotos, música, películas, documentos de texto, hojas de cálculo, etc...

Un detalle muy importante (que igual es obvio), es que si por ejemplo tenemos un archivo de texto muy grande, cuando modificamos el archivo y queremos guardar un cambio aunque sea muy pequeño, se modifica todo el archivo. Esto se debe tener en cuenta para más adelante.

Block Storage

Este tipo de sistema de almacenamiento es muy frecuente verlo en sistemas de virtualización, y es donde se ubican los discos duros de los equipos virtuales.

Al ser un sistema bastante crítico, para acceder a este tipo de almacenamiento normalmente se usan varios caminos o como técnicamente se dice paths. Para decirlo de una manera más sencilla: se conectan varios cables que van a parar al mismo sitio, para garantizar que si falla algún cable (path), siempre habrá otro cable por el cual podremos acceder a los datos.

La gran diferencia que hay con el sistema de archivos File Storage, es que si tienes un archivo muy grande y modificas una pequeña parte, lo que estás modificando es esa pequeña parte, no todo el archivo entero. Gracias a eso, cuando se hacen copias de seguridad, la primera vez que se hace esta copia, copia el archivo entero, y en las siguientes veces que se realiza la copia, solo se copian las diferencias (block), que pueden ser muchas o pocas en función de las modificaciones que se hayan hecho.​

Object Storage

Este sistema de almacenamiento es el menos conocido y es un sistema para gestionar grandes cantidades de datos "no estructurados". Estos datos "no estructurados" pueden ser todo tipo de archivos.

Gracias a Amazon (en concreto AWS), este sistema de almacenamiento de datos se ha hecho muy popular, gracias a su almacenamiento estrella, que se llama S3 (Simple Storage Service).

Ceph

Una vez tenemos claros los tres tipos de almacenamiento, podemos empezar a explicar Ceph, el cual puede entregar los tres tipos de almacenamiento. De ahí viene el término que he usado antes de navaja suiza.

Lo primero que debemos saber es que Ceph es software libre y de código abierto. Su primera versión oficial fue en 2012. En 2018 se creó la Ceph Foundation (con miembros como RedHat, Intel, Canonical o Western Digital) para gestionar la dirección y futuro del proyecto. 

Red Hat introdujo Ceph en su sistema de virtualización Red Hat Enterprise Virtualization (RHEV), como consecuencia de tener muchos problemas con su sistema de almacenamiento, que hasta entonces utilizaba GlusterFS. GlusterFS es un buen sistema de almacenamiento, pero como dice su propio nombre es un File Storage y no es el mejor sistema para gestionar máquinas virtuales.

El nombre de Ceph viene de "cephalopod", el cual tiene muchos tentáculos y los mueve todos de forma coordinada. Esto simboliza perfectamente un sistema distribuido con muchos equipos trabajando de forma simultánea. Cuando hablamos de un sistema distribuido, lo que queremos decir es que si cogemos unos equipos físicos, les ponemos una serie de discos duros e instalamos Ceph, todos trabajarán unidos como si fuesen uno solo y podemos hacer que los datos se graben en discos que están ubicados en diferentes equipos. De esta manera, si uno o varios equipos se detuvieran por cualquier motivo, los datos seguirían disponibles.

La gracia que tiene Ceph es que, además de distribuir los datos entre equipos y hacer que todos trabajen de forma coordinada, podemos llegar a ubicar los datos en diferentes ubicaciones: imaginemos que tenemos unos equipos con unos cuantos discos duros en la primera planta y en la segunda tenemos otros equipos con otros discos duros. Podemos hacer que un dato se grabe dos veces, una vez en la primera planta y otra en la segunda planta. De esta manera, si pasara algo en una de las plantas, los datos estarían intactos en la otra planta.

Teniendo estos conceptos claros, para hacer una demostración del funcionamiento de Ceph, el que haremos es en vez de montar una mega infraestructura, al ser una demostración haremos que un equipo solo haga de Ceph.

Laboratorio con Ceph

⚠️ Este montaje es para estudiar el funcionamiento de Ceph, nunca debe ponerse en producción, ya que toda la lógica reside en un solo equipo y eso rompe toda la filosofía de Ceph. ⚠️

Este tipo de laboratorio se llama técnicamente All-in-One y para hacerlo necesitamos:

  • Un equipo con sistema operativo Debian GNU/Linux
  • El equipo debe tener varios discos duros. En este caso le hemos puesto tres discos de tamaños distintos, para que quede todo más claro.

Configuración de la máquina virtual con Ceph All-in-One sobre Debian 12 con varios discos duros

Una vez desplegado el sistema operativo, verificaremos que se ven correctamente los discos duros. No debemos hacer nada más con ellos, ya que Ceph se encargará de gestionarlos.

root@ceph-aio:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vda    254:0    0   64G  0 disk
├─vda1 254:1    0   63G  0 part /
├─vda2 254:2    0    1K  0 part
└─vda5 254:5    0  975M  0 part [SWAP]
vdb    254:16   0   15G  0 disk
vdc    254:32   0   20G  0 disk
vdd    254:48   0   30G  0 disk

Seguidamente, instalaremos la herramienta cephadm, que nos permitirá más adelante instalar el sistema Ceph. Si queremos ver las versiones de Ceph, las podemos encontrar en esta URL.

root@ceph-aio:~# apt update && apt install -y cephadm
root@ceph-aio:~# cephadm add-repo --release squid

root@ceph-aio:~# apt-cache show versions cephadm | grep Version
Version: 19.2.0-1~bpo12+1
Version: 16.2.11+ds-2

Una vez sabemos la versión de Ceph que queremos instalar, que en nuestro caso será la versión 19 (Squid), prepararemos el sistema para que el despliegue salga correcto y lo instalaremos:

root@ceph-aio:~# useradd -m -s /bin/bash cephadm
root@ceph-aio:~# echo "cephadm ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers.d/cephadm
root@ceph-aio:~# chmod 0440 /etc/sudoers.d/cephadm
root@ceph-aio:~# mkdir -p /home/cephadm/.ssh
root@ceph-aio:~# chown cephadm:cephadm -R /home/cephadm/
root@ceph-aio:~# passwd cephadm
root@ceph-aio:~# apt update && apt install -y cephadm=19.2.0-1~bpo12+1

root@ceph-aio:~# su cephadm -
cephadm@ceph-aio:/root$ sudo cephadm bootstrap --mon-ip 172.26.0.239

Como nota importante, hay que decir que la IP (172.26.0.239) es la IP del equipo que hemos desplegado.

Una vez instalado el sistema de Ceph, le indicaremos que queremos usar todos los discos duros que hemos añadido anteriormente:

root@ceph-aio:~# cephadm shell
root@ceph-aio:/# ceph orch apply osd --all-available-devices

Para no entrar en temas técnicos, podemos decir que Ceph llama OSDs a los discos duros.

Una vez añadidos todos los discos duros al sistema Ceph, verificaremos que todos estén “up”:​

root@ceph-aio:/# ceph osd status
ID  HOST       USED  AVAIL  WR OPS  WR DATA  RD OPS  RD DATA  STATE
0  ceph-aio  26.4M  14.9G      0        0       0        0   exists,up
1  ceph-aio  26.4M  19.9G      0        0       0        0   exists,up
2  ceph-aio  26.4M  29.9G      0        0       0        0   exists,up

Ahora lo que haremos es poner una contraseña a la administración web (GUI), para posteriormente poder acceder a ella, y aprovecharemos para habilitar el módulo de telemetría y aceptar la EULA vía cli.

root@ceph-aio:/# echo "SuperPassword" > dashboard_password.yml
root@ceph-aio:/# ceph dashboard ac-user-set-password admin -i dashboard_password.yml
root@ceph-aio:/# ceph mgr module enable telemetry
root@ceph-aio:/# ceph telemetry on --license sharing-1-0

Ahora ya tendríamos nuestro sistema Ceph preparado para poder entregar almacenamiento de todos los tipos. El problema que encontramos es que, como he dicho antes, este sistema está pensado para un mínimo de tres equipos, por si ocurre alguna incidencia. Entonces lo que haremos es permitir que se puedan crear almacenamientos con una sola réplica.

root@ceph-aio:/# ceph osd lspools
1 .mgr
root@ceph-aio:/# ceph config set global mon_allow_pool_size_one true
root@ceph-aio:/# ceph osd pool set .mgr size 1 --yes-i-really-mean-it
root@ceph-aio:/# ceph health mute POOL_NO_REDUNDANCY

Una vez hecho todo el procedimiento anterior, ya tendríamos preparado un sistema Ceph. Ahora solo quedaría verificar que todo está bien:

root@ceph-aio:/# ceph -s
  cluster:
    id:     91ac2cd2-a784-11ef-b15c-bc241146a3a9
    health: HEALTH_OK
            (muted: POOL_NO_REDUNDANCY)

  services:
    mon: 1 daemons, quorum ceph-aio (age 11m)
    mgr: ceph-aio.yfbdlq(active, since 6m)
    osd: 3 osds: 3 up (since 3m), 3 in (since 6m)

  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 449 KiB
    usage:   80 MiB used, 65 GiB / 65 GiB avail
    pgs:     1 active+clean

Y por último, y no menos importante, acceder a la administración web (GUI) de Ceph. Los datos de acceso serían:

Dashboard de Ceph mostrando el estado inicial del clúster, la versión 19.2 Squid y las métricas de utilización

Para no alargarnos más, en siguientes posts explicaremos cómo acceder a los datos del Ceph que hemos desplegado.