LVM en rbd Ceph

Queremos usar LVM sobre un dispositivo de bloques Ceph. Por defecto, LVM ignora este tipo de dispositivos (lo primero que hemos hecho ha sido mapear la imagen a dispositivo del sistema con rbd map obteniendo el dispositivo /dev/rbd0).

Para permitirlo, hay que editar el fichero de configuración de LVM (/etc/lvm/lvm.conf)y añadir/editar estas líneas:

preferred_names = [ "^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d" , "^/dev/rbd" ]
types = ["rbd", 1024]

NFS en alta redundancia

Queremos compartir un punto de montaje NFS con alta disponibilidad para evitar que la caída del server provoque que el servicio se detenga. Para evitar cualquier punto de fallo, para almacenar los datos se va a utilizar ceph. El sistema de replicación que hace ceph permite que se puedan seguir accediendo a los datos a pesar de sufrir la caída de parte de los servidores que conforman el cluster. Con la alta disponibilidad, conseguimos que si cae el servidor NFS, otro nodo del cluster asuma ese rol.

Partimos de un escenario en el que tenemos un cluster ceph funcionando y un cluster de alta disponibilidad con corosync, pacemaker y pcs.

En resumen, haremos lo siguiente: usaremos una imagen rbd de ceph para albergar los archivos que queremos compartir por NFS. Usando el cluster de alta disponibilidad, montaremos ese dispositivo de bloques e iniciaremos el servidor NFS que usará una IP virtual.

Pasemos a detallar paso a paso ese proceso:

  1. Creamos una imagen en ceph

    [bash] rbd create –size 100000 pool/nombreimagen # el tamaño se expresa en megabytes, así pues, crearíamos un disposivito de 100GB [/bash]

  2. Mapear la imagen a dispositivo de bloques. Con esto, la imagen se puede utilizar como cualquier otro dispositivo de bloques, como un disco duro.

    [bash] rbd map pool/nombreimagen [/bash]

    Se crea un dispositivo /dev/rbdX y un enlace simbólico en /dev/rbd/pool/nombreimagen a ese dispositivo. Este proceso se puede automatizar añadiendo al fichero /etc/ceph/rbdmap la imagen que queramos mapear y el usuario a usar:

    [bash] poolname/imagename     id=client,keyring=/etc/ceph/ceph.client.keyring [/bash]

    y llamar directamente al script

    [bash] rbdmap map [/bash]

    ó

    [bash] systemctl start rbdmap [/bash]

  3. Le damos formato a la imagen
    [bash] mkfs.ext4 /dev/rbd0 [/bash]
    y la montamos
    [bash] mount /dev/rbd0 /mountpoint [/bash]
    . Ahora ya podemos copiar o sincronizar los datos que queremos compartir