Instalacion de básica de Ceph en Debian 12

ceph

¿Que es ceph?

Ceph es un sistema de almacenamiento distribuido que nos permite crear un almacenamiento compartido entre varios nodos, de esta manera podemos crear un cluster de almacenamiento.

Requisitos

  • Sistema Debian 12 actualizado.
  • Privilegios de root o sudo.
  • Acceso a internet.
  • 3 nodos con Debian 12 instalado.
  • un disco duro adicional en cada nodo.

Instalacion

Primero tenemos que instalar ceph en los 3 nodos para ello utilizaremos ssh y un bucle for:

Creamos una llave ssh para poder acceder a los nodos sin contraseña:

root@ceph1:~# ssh-keygen -q -N ""

Ahora tenemos que crear un archivo de configuración para ssh y agregar los nodos:


root@ceph1:~# nano ~/.ssh/config

Host ceph1
    Hostname 192.168.50.34
    User root
Host ceph2
    Hostname 192.168.50.27
    User root
Host ceph3
    Hostname 192.168.50.25
    User root

Ajuntamos los permisos del archivo de configuración:

root@ceph1:~# chmod 600 ~/.ssh/config

Ahora tenemos que copiar la llave ssh a los nodos:

root@ceph1:~# ssh-copy-id ceph1
root@ceph1:~# ssh-copy-id ceph2
root@ceph1:~# ssh-copy-id ceph3

Mediante un bucle for instalamos ceph en los 3 nodos:

root@ceph1:~# for NODE in ceph1 ceph2 ceph3
do
    ssh $NODE "apt update; apt -y install ceph"
done

Configuracion del nodo monitor

Primero tenemos que crear un archivo de configuración para ceph:

root@ceph1:~# nano /etc/ceph/ceph.conf

Agregamos lo siguiente:

[global]
# specify cluster network for monitoring
cluster network = 192.168.50.0/24
# specify public network
public network = 192.168.50.0/24
# specify UUID genarated above
fsid = bc9df8e9-83aa-4e24-a2fa-428d6886054d
# specify IP address of Monitor Daemon
mon host = 192.168.50.34
# specify Hostname of Monitor Daemon
mon initial members = ceph1
osd pool default crush rule = -1

# mon.(Node name)
[mon.ceph1]
# specify Hostname of Monitor Daemon
host = ceph1
# specify IP address of Monitor Daemon
mon addr = 192.168.50.34
# allow to delete pools
mon allow pool delete = true

En la linea “fsid” tenemos que agregar un UUID, para generar un UUID podemos utilizar el siguiente comando:

root@ceph1:~# uuidgen

Ahora tenemos que crear las llaves de ceph:


root@ceph1:~# ceph-authtool --create-keyring /etc/ceph/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

root@ceph1:~# ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'

root@ceph1:~# ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'

Ahora tenemos que importar las llaves:

root@ceph1:~# ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring

root@ceph1:~# ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring

Generamos el mapa de monitores:

root@ceph1:~# FSID=$(grep "^fsid" /etc/ceph/ceph.conf | awk {'print $NF'})

root@ceph1:~# NODENAME=$(grep "^mon initial" /etc/ceph/ceph.conf | awk {'print $NF'})

root@ceph1:~# NODEIP=$(grep "^mon host" /etc/ceph/ceph.conf | awk {'print $NF'})

root@ceph1:~# monmaptool --create --add $NODENAME $NODEIP --fsid $FSID /etc/ceph/monmap

Ahora tenemos que crear el directorio para el monitor:

root@ceph1:~# mkdir /var/lib/ceph/mon/ceph-ceph1

Asociamos las llaves con el directorio:

root@ceph1:~# ceph-mon --cluster ceph --mkfs -i $NODENAME --monmap /etc/ceph/monmap --keyring /etc/ceph/ceph.mon.keyring

root@ceph1:~# chown ceph:ceph /etc/ceph/ceph.*

root@ceph1:~# chown -R ceph:ceph /var/lib/ceph/mon/ceph-ceph1 /var/lib/ceph/bootstrap-osd

root@ceph1:~# systemctl enable --now ceph-mon@$NODENAME

Habilitamos el protocolo msgr2:

root@ceph1:~# ceph mon enable-msgr2

root@ceph1:~# ceph config set mon auth_allow_insecure_global_id_reclaim false

Habilitamos el modulo pg_autoscaler:


root@ceph1:~# ceph mgr module enable pg_autoscaler

Creamos un directorio para el nodo:

root@ceph1:~# mkdir /var/lib/ceph/mgr/ceph-ceph1

Creamos una llave de autenticación para el nodo:


root@ceph1:~# ceph auth get-or-create mgr.$NODENAME mon 'allow profile mgr' osd 'allow *' mds 'allow *'

root@ceph1:~# ceph auth get-or-create mgr.ceph1 | tee /etc/ceph/ceph.mgr.admin.keyring

root@ceph1:~# cp /etc/ceph/ceph.mgr.admin.keyring /var/lib/ceph/mgr/ceph-ceph1/keyring

root@ceph1:~# chown ceph:ceph /etc/ceph/ceph.mgr.admin.keyring

root@ceph1:~# chown -R ceph:ceph /var/lib/ceph/mgr/ceph-ceph1

root@ceph1:~# systemctl enable --now ceph-mgr@$NODENAME

Resto de los nodos de almacenamiento

Ahora tenemos que configurar el resto de los nodos de almacenamiento, para ello tenemos que copiar el archivo de configuración, las llaves de autenticación y crear las particiones para ceph:

Para hacer esto más rápido, utilizaremos un bucle for:

root@ceph1:~# for NODE in ceph1 ceph2 ceph3
do
    if [ ! ${NODE} = "ceph1" ]
    then
        scp /etc/ceph/ceph.conf ${NODE}:/etc/ceph/ceph.conf
        scp /etc/ceph/ceph.client.admin.keyring ${NODE}:/etc/ceph
        scp /var/lib/ceph/bootstrap-osd/ceph.keyring ${NODE}:/var/lib/ceph/bootstrap-osd
    fi
    ssh $NODE \
    "chown ceph:ceph /etc/ceph/ceph.* /var/lib/ceph/bootstrap-osd/*; \
    parted --script /dev/vdb 'mklabel gpt'; \
    parted --script /dev/vdb "mkpart primary 0% 100%"; \
    ceph-volume lvm create --data /dev/vdb1"
done

Ya tenemos el resto de los nodos con ceph instalado y unido al cluster.

Para ver el estado del cluster podemos utilizar el siguiente comando:

root@ceph1:~# ceph -s

Para ver información y el estado de los nodos podemos utilizar los siguientes comandos:

root@ceph1:~# ceph osd tree
root@ceph1:~# ceph df
root@ceph1:~# ceph osd df

Cliente ceph (Dispositivo de bloque)

Ahora vamos realizar la siguiente configuración para que el cliente pueda utilizar un dispositivo de bloques de ceph.

Añadimos al archivo de configuración de ssh el nodo cliente:

root@ceph1:~# nano ~/.ssh/config

Host ceph1
    Hostname 192.168.50.34
    User root
Host ceph2
    Hostname 192.168.50.27
    User root
Host ceph3
    Hostname 192.168.50.25
    User root
Host ceph-client
    Hostname 192.168.50.23
    User root

Copiamos la llave ssh al nodo cliente:

root@ceph1:~# ssh-copy-id ceph-client

Instalamos los paquetes requeridos en el nodo cliente para poder utilizar ceph:

root@ceph1:~# ssh ceph-client "apt -y install ceph-common"

Copiamos el archivo de configuración y las llaves de autenticación al nodo cliente:

root@ceph1:~# scp /etc/ceph/ceph.conf ceph-client:/etc/ceph/

root@ceph1:~# scp /etc/ceph/ceph.client.admin.keyring ceph-client:/etc/ceph/

root@ceph1:~# ssh ceph-client "chown ceph:ceph /etc/ceph/ceph.*"

Creamos un pool rbd:

root@ceph-client:~# ceph osd pool create rbd 32

Habilitamos el modulo pg_autoscaler:

root@ceph-client:~# ceph osd pool set rbd pg_autoscale_mode on

Inicializamos el pool rbd:

root@ceph-client:~# rbd pool init rbd

Comprobamos el estado del autoscaler:

root@ceph-client:~# ceph osd pool autoscale-status

Creamos un dispositivo de bloques de 2GB:

root@ceph-client:~# rbd create --size 2G --pool rbd rbd01

Listamos los dispositivos de bloques:

root@ceph-client:~# rbd ls -l

Mapeamos el dispositivo de bloques:

root@ceph-client:~# rbd map rbd01

Listamos los dispositivos de bloques mapeados:

root@ceph-client:~# rbd showmapped

Creamos un sistema de archivos en el dispositivo de bloques:

root@ceph-client:~# mkfs.ext4 /dev/rbd0

Creamos un directorio para montar el dispositivo de bloques:

root@ceph-client:~# mkdir /mnt/rbd01

Montamos el dispositivo de bloques:

root@ceph-client:~# mount /dev/rbd0 /mnt/rbd01

Cliente ceph (Sistema de archivos)

Ahora a diferencia de la configuración anterior, vamos a configurar tanto el cliente como el servidor para que el cliente pueda utilizar un sistema de archivos de ceph en lugar de un dispositivo de bloques.

Añadimos al archivo de configuración de ssh el nodo cliente:

root@ceph1:~# nano ~/.ssh/config

Host ceph1
    Hostname 192.168.50.34
    User root
Host ceph2
    Hostname 192.168.50.27
    User root
Host ceph3
    Hostname 192.168.50.25
    User root
Host ceph-client
    Hostname 192.168.50.23
    User root

Copiamos la llave ssh al nodo cliente:

root@ceph1:~# ssh-copy-id ceph-client

Instalamos los paquetes requeridos en el nodo cliente para poder utilizar ceph:

root@ceph1:~# ssh ceph-client "apt -y install ceph-fuse ceph-common"

Copiamos el archivo de configuración y las llaves de autenticación al nodo cliente:

root@ceph1:~# scp /etc/ceph/ceph.conf ceph-client:/etc/ceph/

root@ceph1:~# scp /etc/ceph/ceph.client.admin.keyring ceph-client:/etc/ceph/

root@ceph1:~# ssh ceph-client "chown ceph:ceph /etc/ceph/ceph.*"

Configuramos MDS (Metadata Server) en el nodo ceph1:

root@ceph1:~# mkdir -p /var/lib/ceph/mds/ceph-ceph1

root@ceph1:~# ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-ceph1/keyring --gen-key -n mds.ceph1

root@ceph1:~# chown -R ceph:ceph /var/lib/ceph/mds/ceph-ceph1

root@ceph1:~# ceph auth add mds.ceph1 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-ceph1/keyring

root@ceph1:~# systemctl enable --now ceph-mds@ceph1

Creamos un pool para el sistema de archivos y otro para los metadatos:

root@ceph1:~# ceph osd pool create cephfs_data 32

root@ceph1:~# ceph osd pool create cephfs_metadata 32

root@ceph1:~# ceph fs new cephfs cephfs_metadata cephfs_data

root@ceph1:~# ceph fs ls

root@ceph1:~# ceph mds stat

root@ceph1:~# ceph fs status cephfs

Montamos el sistema de archivos en el cliente:

root@ceph-client:~# ceph-authtool -p /etc/ceph/ceph.client.admin.keyring > admin.key

root@ceph-client:~# chmod 600 admin.key

root@ceph-client:~# mount -t ceph 192.168.50.34:6789:/ /mnt -o name=admin,secretfile=admin.key

root@ceph-client:~# df -hT

Con esto ya hemos visto como instalar ceph en debian 12 y varias configuraciones básicas.