Despliegue de un Clúster de Almacenamiento Distribuido Ceph Reef en Rocky Linux

Requisitos Previos y Configuración del Entorno

Para la implementación de este clúster de almacenamiento distribuido, se utilizarán tres nodos basados en Rocky Linux 9.3. Cada nodo contará con 2 vCPU y 4 GB de RAM. En cuanto al almacenamiento, cada máquina dispondrá de un disco de sistema de 60 GB (excluido del clúster) y tres discos de datos adicionales de 60 GB cada uno (/dev/sdb, /dev/sdc, /dev/sdd), sumando un total de 540 GB de capacidad útil.

La topología de red requiere dos interfaces de red por nodo para segregar el tráfico:

  • eth0: Red pública para el acceso externo y la API.
  • eth1: Red de clúster para la comunicación interna y replicación de datos.

La asignación de direcciones IP y nombres de host es la siguiente:

  • 192.168.10.10 - ceph-node-01 (eth0) / 10.0.50.10 (eth1)
  • 192.168.10.11 - ceph-node-02 (eth0) / 10.0.50.11 (eth1)
  • 192.168.10.12 - ceph-node-03 (eth0) / 10.0.50.12 (eth1)

Es fundamentla registrar estas resoluciones en el archivo /etc/hosts de todos los nodos.

Preparación del Sistema Operativo

La herramienta oficial cephadm utiliza contenedores para el despliegue. Por lo tanto, el sistema anfitrión requiere Python 3, Systemd, un motor de contenedores (Docker o Podman), sincronización horaria (chrony) y LVM2.

Configuraciones básicas obligaotrias en todos los nodos:

  • Deshabilitar el firewall y SELinux.
  • Sincronizar la hora del sistema.
  • Desinstalar Podman para evitar conflictos con el motor de contenedores seleccionado.

Instalación y Configuración de Docker

Se utilizará Docker CE como motor de ejecución. Primero, añadimos el repositorio oficial:

cat << 'REPO_EOF' | tee /etc/yum.repos.d/docker-ce.repo > /dev/null
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
REPO_EOF

Procedemos a instalar los paquetes necesarios y a eliminar Podman si estuviera presente:

dnf makecache
dnf install -y docker-ce docker-ce-cli containerd.io
dnf remove -y podman buildah skopeo

Configuramos el demonio de Docker para optimizar el registro de logs y establecer el controlador de cgroups:

cat << 'DAEMON_EOF' | tee /etc/docker/daemon.json > /dev/null
{
  "registry-mirrors": [
    "https://registry-mirror.example.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  }
}
DAEMON_EOF

Iniciamos y habilitamos el servicio:

systemctl daemon-reload
systemctl enable --now docker

Instalación de las Herramientas de Ceph

Rocky Linux 9 incluye los repositorios necesarios. Instalaremos la versión Reef (18.x) de las herramientas de administración:

dnf install -y centos-release-ceph-reef epel-release
dnf install -y cephadm ceph-common ceph-base

Verificamos que ambas herramientas compartan la misma versión:

ceph --version
cephadm version

Nota: Si la instalación de cephadm trajo Podman como dependencia nuevamente, debe ser desinstalado otra vez para forzar el uso de Docker.

Inicialización del Clúster (Bootstrap)

Para acelerar el proceso y evitar descargas repetitivas, pre-cargamos la imagen oficial de Ceph en el nodo primario:

docker pull quay.io/ceph/ceph:v18

Ejecutamos el comando de inicialización en ceph-node-01:

cephadm --docker bootstrap \
  --mon-ip 192.168.10.10 \
  --cluster-network 10.0.50.0/24 \
  --allow-fqdn-hostname \
  --allow-overwrite

Parámetros clave:

  • --docker: Fuerza el uso de Docker en lugar de Podman.
  • --mon-ip: IP pública del primer monitor.
  • --cluster-network: Subred dedicada para el tráfico de replicación interna.

Este proceso genera los certificados, las claves SSH para la comunicación entre nodos, el archivo de configuración /etc/ceph/ceph.conf y el keyring de administración. Al finalizar, se mostrarán las credenciales para acceder al panel web (Ceph Dashboard) a través del puerto 8443.

Expansión del Clúster y Despliegue de OSD

Adición de Nodos Secundarios

cephadm utiliza SSH para desplegar servicios en nuevos nodos. Distribuimos la clave pública generada durante el bootstrap:

ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node-02
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node-03

Registramos los nuevos hosts en el orquestador:

ceph orch host add ceph-node-02 192.168.10.11
ceph orch host add ceph-node-03 192.168.10.12

Configuración de los OSD (Object Storage Daemons)

Los OSD son los demonois que gestionan los discos físicos. Podemos inspeccionar los dispositivos disponibles en todos los nodos:

ceph orch device ls

Aunque existe el comando ceph orch apply osd --all-available-devices, su ejecución asíncrona puede resultar en una numeración de OSD caótica. Para mantener un orden predecible y facilitar la administración futura, es recomendable añadir los discos secuencialmente mediante un bucle:

for node in ceph-node-01 ceph-node-02 ceph-node-03; do
  for disk in sdb sdc sdd; do
    echo "Desplegando OSD en $node para el dispositivo /dev/$disk..."
    ceph orch daemon add osd "$node":/dev/"$disk"
    sleep 5 # Pausa breve para asegurar la transición de estado
  done
done

Verificación del Estado Final

Una vez que los OSD están en funcionamiento, verificamos la topología del clúster:

ceph osd tree

Finalmente, comprobamos el estado de salud general del clúster. Un despliegue exitoso y completamente operativo devolverá un estado HEALTH_OK con todos los monitores y OSD activos:

ceph -s

Etiquetas: ceph Rocky Linux Distributed Storage Docker cephadm

Publicado el 7-5 07:00