Ceph es un sistema de almacenamiento distribuido que reparte y replica los datos entre varios servidores, de modo que el cluster sigue funcionando aunque falle un disco o un nodo completo. Un mismo cluster ofrece almacenamiento de bloques (RBD), un sistema de archivos compartido (CephFS) y almacenamiento de objetos compatible con S3 (RGW). En este tutorial desplegarás un cluster de tres nodos en Ubuntu 24.04 con cephadm, la herramienta oficial de despliegue, crearás los OSD y probarás un volumen RBD y un montaje de CephFS.

Requisitos previos

  • Tres servidores con Ubuntu 24.04 LTS (por ejemplo, servidores dedicados o VPS de CubePath) en la misma red privada. En esta guía se llaman ceph1, ceph2 y ceph3, con las IP 10.0.0.11, 10.0.0.12 y 10.0.0.13.
  • En cada servidor, al menos 4 GB de RAM (Ceph recomienda unos 4 GB por OSD en producción) y un disco adicional vacío, sin particiones ni sistema de archivos, que se convertirá en OSD. En los ejemplos es /dev/vdb.
  • Acceso root por SSH desde ceph1 hacia ceph2 y ceph3 (cephadm administra los nodos como root) y un usuario con sudo en ceph1.
  • Relojes sincronizados. Ubuntu 24.04 usa systemd-timesyncd por defecto; en esta guía se instala chrony.

Paso 1: Preparar los tres nodos

Ejecuta este paso en los tres servidores. Primero, añade los nombres de los nodos a /etc/hosts para que se resuelvan entre sí:

sudo nano /etc/hosts
10.0.0.11 ceph1
10.0.0.12 ceph2
10.0.0.13 ceph3

Cada nodo debe tener como nombre de host el nombre corto que usarás en Ceph. Por ejemplo, en el primer servidor:

sudo hostnamectl set-hostname ceph1

Instala el motor de contenedores (cephadm ejecuta cada servicio de Ceph en un contenedor), LVM, que usan los OSD, y chrony para la hora:

sudo apt update
sudo apt install podman lvm2 chrony

Comprueba que el disco adicional aparece sin particiones:

lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vda    253:0    0   40G  0 disk
├─vda1 253:1    0   39G  0 part /
...
vdb    253:16   0  100G  0 disk

Si el cluster usa UFW, permite todo el tráfico entre los nodos por la red privada. Ceph utiliza los puertos 3300 y 6789 para los monitores y el rango 6800-7300 para los OSD, además del 8443 del panel:

sudo ufw allow from 10.0.0.0/24

Paso 2: Instalar cephadm e inicializar el cluster

Ejecuta los pasos 2 a 5 solo en ceph1. Ubuntu 24.04 incluye cephadm y las herramientas cliente de Ceph Squid (19.2) en sus repositorios:

sudo apt install cephadm ceph-common

Inicializa el cluster indicando la IP del primer monitor. bootstrap crea el primer monitor y el primer manager, genera la configuración en /etc/ceph y activa el panel web:

sudo cephadm bootstrap --mon-ip 10.0.0.11

Al terminar, la salida muestra la URL y las credenciales iniciales del panel. Guárdalas:

Ceph Dashboard is now available at:

	     URL: https://ceph1:8443/
	    User: admin
	Password: 8xk2m9qz1w

...
Bootstrap complete.

Comprueba el estado del cluster:

sudo ceph -s
  cluster:
    id:     5c7d1a2e-...
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3

  services:
    mon: 1 daemons, quorum ceph1 (age 2m)
    mgr: ceph1.abcdef(active, since 1m)
    osd: 0 osds: 0 up, 0 in

El aviso de salud es normal: todavía no hay OSD.

Paso 3: Añadir los otros dos nodos

cephadm se conecta a los demás nodos por SSH con su propia clave. Copia la clave pública del cluster al usuario root de ceph2 y ceph3:

sudo ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph2
sudo ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph3

Añade los nodos al cluster. La etiqueta _admin hace que cephadm copie también la configuración y el keyring de administración, para poder usar el comando ceph desde cualquiera de ellos:

sudo ceph orch host add ceph2 10.0.0.12 --labels _admin
sudo ceph orch host add ceph3 10.0.0.13 --labels _admin

Comprueba la lista de nodos:

sudo ceph orch host ls
HOST   ADDR        LABELS  STATUS
ceph1  10.0.0.11   _admin
ceph2  10.0.0.12   _admin
ceph3  10.0.0.13   _admin
3 hosts in cluster

Fija un monitor y un manager en cada nodo. Con tres monitores el cluster mantiene el quórum aunque caiga uno:

sudo ceph orch apply mon --placement="ceph1,ceph2,ceph3"
sudo ceph orch apply mgr --placement="ceph1,ceph2,ceph3"

Tras uno o dos minutos, sudo ceph -s debe mostrar mon: 3 daemons, quorum ceph1,ceph2,ceph3.

Paso 4: Crear los OSD

Cada OSD es un proceso que gestiona un disco. Lista los discos que cephadm considera utilizables:

sudo ceph orch device ls
HOST   PATH      TYPE  DEVICE ID   SIZE   AVAILABLE  REFRESHED  REJECT REASONS
ceph1  /dev/vdb  hdd               100G   Yes        1m ago
ceph2  /dev/vdb  hdd               100G   Yes        1m ago
ceph3  /dev/vdb  hdd               100G   Yes        1m ago

Crea un OSD en cada disco disponible. Esta orden también convertirá en OSD los discos vacíos que añadas más adelante:

sudo ceph orch apply osd --all-available-devices

Si prefieres elegir los discos uno a uno, usa sudo ceph orch daemon add osd ceph1:/dev/vdb para cada nodo en lugar de la orden anterior.

Espera unos minutos y comprueba el árbol de OSD:

sudo ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         0.29306  root default
-3         0.09769      host ceph1
 0    hdd  0.09769          osd.0       up   1.00000  1.00000
-5         0.09769      host ceph2
 1    hdd  0.09769          osd.1       up   1.00000  1.00000
-7         0.09769      host ceph3
 2    hdd  0.09769          osd.2       up   1.00000  1.00000

Con los tres OSD en estado up, el cluster debe pasar a HEALTH_OK:

sudo ceph health
HEALTH_OK

Por defecto, cada pool guarda tres copias de los datos, una en cada nodo, así que puedes perder un nodo completo sin perder datos.

Paso 5: Crear un volumen de bloques RBD

RBD ofrece discos virtuales que se usan como un disco local. Crea un pool para ellos e inicialízalo:

sudo ceph osd pool create rbd
sudo rbd pool init rbd

Crea una imagen de 10 GB, mapéala como dispositivo de bloques en ceph1, formatéala y móntala:

sudo rbd create --size 10G rbd/disco1
sudo rbd map rbd/disco1
/dev/rbd0
sudo mkfs.ext4 /dev/rbd0
sudo mkdir -p /mnt/rbd
sudo mount /dev/rbd0 /mnt/rbd
df -h /mnt/rbd
Filesystem      Size  Used Avail Use% Mounted on
/dev/rbd0       9.8G   24K  9.3G   1% /mnt/rbd

Cuando termines la prueba, desmonta y libera el dispositivo:

sudo umount /mnt/rbd
sudo rbd unmap /dev/rbd0

Paso 6: Crear y montar un sistema de archivos CephFS

ceph fs volume create crea los pools de datos y metadatos y despliega los servidores de metadatos (MDS) necesarios:

sudo ceph fs volume create cephfs

Comprueba que el sistema de archivos tiene un MDS activo:

sudo ceph fs status cephfs
cephfs - 0 clients
======
RANK  STATE            MDS               ACTIVITY     DNS    INOS   DIRS   CAPS
 0    active  cephfs.ceph2.xyzabc  Reqs:    0 /s    10     13     12      0
...

No uses la cuenta admin para montar. Crea un usuario de Ceph con acceso de lectura y escritura solo a este sistema de archivos y guarda su keyring:

sudo ceph fs authorize cephfs client.fsuser / rw | sudo tee /etc/ceph/ceph.client.fsuser.keyring
sudo chmod 600 /etc/ceph/ceph.client.fsuser.keyring

Monta CephFS con el cliente del kernel. El comando mount.ceph (paquete ceph-common) lee la dirección de los monitores de /etc/ceph/ceph.conf y la clave del keyring:

sudo mkdir -p /mnt/cephfs
sudo mount -t ceph [email protected]=/ /mnt/cephfs
df -h /mnt/cephfs
Filesystem              Size  Used Avail Use% Mounted on
[email protected]=/   94G     0   94G   0% /mnt/cephfs

Para montarlo en otro servidor, instala allí ceph-common, copia /etc/ceph/ceph.conf y el keyring de client.fsuser a su /etc/ceph/ y repite el comando. Para montarlo en el arranque, añade esta línea a /etc/fstab:

[email protected]=/ /mnt/cephfs ceph _netdev,noatime 0 0

Paso 7: Acceder al panel de Ceph

El panel web permite ver la salud del cluster, los OSD y los pools. Consulta en qué nodo está el manager activo:

sudo ceph mgr services
{
    "dashboard": "https://10.0.0.11:8443/"
}

Como el puerto 8443 solo está abierto a la red privada, accede mediante un túnel SSH desde tu equipo:

ssh -L 8443:10.0.0.11:8443 your_user@your_server_ip

Abre https://localhost:8443 e inicia sesión con el usuario admin y la contraseña mostrada en el paso 2. El panel te pedirá cambiarla en el primer acceso. El certificado es autofirmado, así que el navegador mostrará un aviso.

Solución de problemas

  • ceph orch device ls muestra AVAILABLE No: el disco tiene particiones, una firma de sistema de archivos o volúmenes LVM. Si puedes borrarlo, ejecuta sudo ceph orch device zap ceph1 /dev/vdb --force y vuelve a listar.
  • HEALTH_WARN clock skew detected: los relojes de los nodos difieren. Comprueba chronyc tracking en cada nodo y que chrony está activo.
  • ceph orch host add falla con un error de SSH: root del nodo destino no acepta la clave. Comprueba que /root/.ssh/authorized_keys contiene la clave de /etc/ceph/ceph.pub y que PermitRootLogin en /etc/ssh/sshd_config no está en no (prohibit-password es suficiente). Después ejecuta sudo ceph cephadm check-host ceph2.
  • Para ver los registros de un servicio concreto, usa sudo cephadm logs --name osd.0 en el nodo que lo ejecuta.

Conclusión

Tienes un cluster Ceph de tres nodos con tres monitores, tres OSD y replicación triple, que ofrece discos RBD y un sistema de archivos CephFS compartido. Como siguientes pasos puedes desplegar un Object Gateway con ceph orch apply rgw para tener almacenamiento S3, usar RBD como almacenamiento de Proxmox o Kubernetes (Ceph CSI), y separar el tráfico de replicación en una red de cluster dedicada.