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,ceph2yceph3, con las IP10.0.0.11,10.0.0.12y10.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
ceph1haciaceph2yceph3(cephadm administra los nodos como root) y un usuario consudoenceph1. - Relojes sincronizados. Ubuntu 24.04 usa
systemd-timesyncdpor defecto; en esta guía se instalachrony.
Advertenciacephadm borra y reutiliza los discos que detecta como disponibles. Asegúrate de que los discos adicionales no contienen datos que necesites.
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
Notauna imagen RBD con ext4 solo debe montarse en un servidor a la vez. Para compartir archivos entre varios servidores usa CephFS.
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 lsmuestraAVAILABLE No: el disco tiene particiones, una firma de sistema de archivos o volúmenes LVM. Si puedes borrarlo, ejecutasudo ceph orch device zap ceph1 /dev/vdb --forcey vuelve a listar.HEALTH_WARN clock skew detected: los relojes de los nodos difieren. Compruebachronyc trackingen cada nodo y quechronyestá activo.ceph orch host addfalla con un error de SSH: root del nodo destino no acepta la clave. Comprueba que/root/.ssh/authorized_keyscontiene la clave de/etc/ceph/ceph.puby quePermitRootLoginen/etc/ssh/sshd_configno está enno(prohibit-passwordes suficiente). Después ejecutasudo ceph cephadm check-host ceph2.- Para ver los registros de un servicio concreto, usa
sudo cephadm logs --name osd.0en 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.
