Instalacion de básica de Ceph en Debian 12
¿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.