Cómo crear un storage CephFS en un clúster de almacenamiento hiperconvergente Ceph sobre nodos Proxmox. Usaremos este tipo de almacenamiento «Directory» como destino del backup de las máquinas virtuales. Aprovechando así la alta tolerancia a fallos que el sistema Ceph proporciona.
- Requisitos para montar storage CephFS y usarlo como destino de backup en Proxmox.
- Obtener información actual para crear CephFS sobre Ceph.
- Crear pool CephFS en nodos Proxmox y habilitar servicio ceph-mds.
- Montaje de CephFS en Proxmox y configuración como storage.
- Programar backup con destino al CephFS montado.
Requisitos para montar storage CephFS y usarlo como destino de backup en Proxmox
Necesitaremos disponer de un clúster de virtualización con varios nodos Proxmox. En el siguiente tutorial indicamos cómo montar un clúster Proxmox:
Dado que CephFS se monta «sobre» Ceph, necesitaremos disponer de un sistema de almacenamiento hiperconvergente con Ceph. En el siguiente tutorial explicamos cómo montar un sistema Ceph en Proxmox:
Para realizar la configuración, necesitaremos acceder al shell (línea de comandos) de cada nodo que compone el clúster Ceph. Por lo que necesitaremos saber sus IP y usuario y contraseña de acceso al sistema.
Dado que este servicio se monta sobre el almacenamiento Ceph, necesitaremos disponer de espacio libre suficiente.
Obtener información actual para crear CephFS sobre Ceph
En primer lugar, nos aseguraremos de tener espacio suficiente libre en el clúster Ceph, podemos comprobarlo con el comando (desde el shell de uno de los nodos Proxmox):
|
1 |
ceph df |

El diagrama de la infraestructura lógica del almacenamiento que queremos establecer, añadiendo el pool CephFS, para este estudio de caso, sería:

En cuanto a la distribución de los nodos físicos del clúster Proxmox (tres nodos, con uno principal), con el montaje que vamos a realizar del pool CephFS, el diagrama completo sería:

En este estudio de caso, crearemos un directorio CephFS de 2TB, dado que disponemos de 11TB libres en Ceph, no tendremos problema. Además, si disponemos de espacio libre en SSD, lo recomendable, al menos los metadatos, es colocarlos en este tipo de almacenamiento, para que no haya cuellos de botella.
Obtendremos los OSD y PG actuales, para calcular los que asignaremos al nuevo CephFS. Para ello, ejecutaremos los siguientes comandos:
|
1 2 3 |
ceph osd stat | awk '{osds=$3} END {print "PGs para metadata pool: " int(osds*5)}' ceph osd stat | awk '{print "OSDs activos: " $3}' ceph pg stat | awk '{print "PGs totales: " $1}' |

Para la fórmula, necesitaremos conocer el número de réplicas que tengamos configuradas en el clúster Ceph, podemos obtenerlo con el siguiente comando:
|
1 |
ceph config get mon osd_pool_default_size |

Con los datos obtenidos, haremos una pequeña fórmula para calcular el valor correcto de PG del nuevo pool:
Con 12 OSD y replica 3:
- LÍMITE_MAX_PGs = (12 × 100) / 3 = 400 PGs totales
- PG_disponibles = 400 – 33 = 367 PGs para nuevos pools
Para este caso, con 12 OSD activos y 60 PG:
- Metadata_pool_PG = 12 × 5 = 60 → Redondear a: 64 PG ✓
- Data_pool_PG = 12 × 10 = 120 → Redondear a: 128 PG ✓
Crear pool CephFS en nodos Proxmox y habilitar servicio ceph-mds
Con los datos anteriores, para crear el pool CephFS bien dimensionado, ejecutaremos los siguientes comandos. En primer lugar, crearemos el pool de metadatos, lo llamaremos cephfs_metadata (con 64PG, los obtenidos aproximadamente en la fórmula anterior):
|
1 |
ceph osd pool create cephfs_metadata 64 |
Crearemos el pool de datos de 2TB, lo llamaremos cephfs_data (con 128 PG, los obtenidos aproximadamente en la fórmula anterior):
|
1 2 |
ceph osd pool create cephfs_data 128 ceph osd pool set-quota cephfs_data max_bytes 2147483648000 |
Si queremos calcular el número exacto de bytes, para no cometer errores, podemos ejecutar los siguientes comandos (que ejecutarán finalmente el mismo comando que el anterior):
|
1 2 3 |
TB=2 BYTES=$((TB * 1024 * 1024 * 1024 * 1024)) ceph osd pool set-quota cephfs_data max_bytes $BYTES |
Crearemos el filesystem para el pool de 2TB, lo llamaremos proxmox-backups, con el comando:
|
1 |
ceph fs new proxmox-backups cephfs_metadata cephfs_data |

En el nodo principal del clúster Proxmox, crearemos la carpeta para MDS (servidor de metadatos) y estableceremos los permisos:
|
1 2 |
mkdir -p /var/lib/ceph/mds/ceph-proxmox chown -R ceph:ceph /var/lib/ceph/mds/ |
Crearemos el keyring (archivo que contiene las credenciales de autenticación para acceder al clúster Ceph) con:
|
1 |
ceph auth get-or-create mds.proxmox mon 'allow profile mds' osd 'allow *' mds 'allow' mgr 'allow *' > /var/lib/ceph/mds/ceph-proxmox/keyring |
Estableceremos los permisos con:
|
1 2 |
chown ceph:ceph /var/lib/ceph/mds/ceph-proxmox/keyring chmod 600 /var/lib/ceph/mds/ceph-proxmox/keyring |
Crearemos el archivo «sysvinit» y sus permisos, necesario para systemd, con:
|
1 2 |
touch /var/lib/ceph/mds/ceph-proxmox/sysvinit chown ceph:ceph /var/lib/ceph/mds/ceph-proxmox/sysvinit |
Y habilitaremos e iniciaremos el servicio ceph-mds:
|
1 2 |
systemctl enable ceph-mds@proxmox systemctl start ceph-mds@proxmox |

Esperaremos unos segundos y ejecutaremos este otro comando para verificar que el filesystem CephFS se ha montado correctamente:
|
1 |
ceph mds stat |
Debe mostrar:
proxmox-backups:1 {0=proxmox=up:active}

Montaje de CephFS en Proxmox y configuración como storage
Ahora que tenemos activo el MDS en el nodo 1 (proxmox), vamos a montar el sistema de archivos CephFS, para ello, en uno de los nodos de Proxmox, obtendremos el «secret», necesario para crear el punto de montaje. Este valor se encuentra en el fichero /etc/ceph/ceph.client.admin.keyring, mostraremos su contenido con:
|
1 |
cat /etc/ceph/ceph.client.admin.keyring |
Copiaremos el valor del atributo «key»:

Dado que en este escenario tenemos tres nodos Proxmox:

Ejecutaremos los siguientes comandos en el nodo principal de Proxmox (en este caso, en proxmox 192.168.1.102), reemplazando «mi_secret» por el valor del atributo key anterior:
|
1 2 3 4 5 |
SECRET="mi_secret" mkdir -p /mnt/cephfs-backups mount -t ceph :/ /mnt/cephfs-backups -o name=admin,secret=$SECRET echo ":/ /mnt/cephfs-backups ceph name=admin,secret=$SECRET,noatime,_netdev 0 0" >> /etc/fstab df -h | grep cephfs |
En el segundo nodo (en este caso, en proxmox2 192.168.1.59), ejecutaremos:
|
1 2 3 4 5 |
SECRET="mi_secret" mkdir -p /mnt/cephfs-backups mount -t ceph 192.168.1.102:6789:/ /mnt/cephfs-backups -o name=admin,secret=$SECRET echo "192.168.1.102:6789:/ /mnt/cephfs-backups ceph name=admin,secret=$SECRET,noatime,_netdev 0 0" >> /etc/fstab df -h | grep cephfs |

Y en el tercer nodo (proxmox3 192.168.1.), ejecutaremos:
|
1 2 3 4 5 |
SECRET="mi_secret" mkdir -p /mnt/cephfs-backups mount -t ceph 192.168.1.102:6789:/ /mnt/cephfs-backups -o name=admin,secret=$SECRET echo "192.168.1.102:6789:/ /mnt/cephfs-backups ceph name=admin,secret=$SECRET,noatime,_netdev 0 0" >> /etc/fstab df -h | grep cephfs |

Ahora, por último, añadiremos el CephFS como storage de backups. Para ello, desde el shell del nodo principal (proxmox):
|
1 2 3 4 5 6 |
pvesm add dir ceph-backups --path /mnt/cephfs-backups --content backup --is_mountpoint 1 --nodes proxmox,proxmox2,proxmox3 --shared 1 |
Verificaremos que se ha añadido, con el comando:
|
1 |
pvesm status |
Nos devolverá una línea del tipo:
ceph-backups dir active 3725807616 0 3725807616 0.00%

A partir de ahora tendremos disponible el almacenamiento de 2TB de CephFS, que podremos usar como destino de las copias de seguridad programadas.
Desde la web de gestión de Proxmox, en cada nodo, en «Ceph» – «CephFS», aparecerá el servicio de CephFS activo con la IP del nodo principal:

Y en el clúster, en «Storage», aparecerá el CephFS creado, en nuestro caso «ceph-backups», de tipo «Directory»:

Por lo que ya podremos usarlo como destino de los backups de máquinas virtuales programados.
Programar copia de seguridad automática de máquinas virtuales en clúster Proxmox
Dado que tenemos configurado un filesystem (storage) de tipo Directory y CephFS, podremos usarlo como destino de las copias de seguridad. La ventaja de CephFS es que está montado, como ya hemos indicado en este tutorial, sobre el sistema de almacenamiento hiperconvergente Ceph, que en este despliegue tiene 3 réplicas, es decir, cada bloque de datos se replica 3 veces en diferentes discos duros físicos, por lo que si se avería un disco, la información no se pierde. CephFS también aprovecha esta ventaja.
Para programar un backup pulsaremos en el Datacenter (en el clúster Proxmox), y en «Backup». Pulsaremos en «Add» para programar un nuevo trabajo de copia de seguridad:

Elegiremos los nodos (por defecto todos los del clúster), seleccionaremos el Storage (por defecto seleccionará el pool CephFS creado anteriormente), la periodicidad de la copia, marcaremos las máquinas virtuales de las que queramos hacer copia de seguridad y el modo, normalmente «Snapshot»:

Elegiremos una política de retención, para que, de forma automática, las copias antiguas se vayan eliminando. Por ejemplo, en «Keep Daily» indicaremos el valor 4, para que las copias más antiguas de 4 días se eliminen:

En cuanto se inicie la copia de seguridad, los archivos del backup de las máquinas seleccionadas se almacenarán en:
/mnt/cephfs-backups/dump
Para mostrarlos, desde cualquiera de los nodos Proxmox (al tratarse de un almacenamiento compartido), ejecutaremos:
|
1 2 |
cd /mnt/cephfs-backups/dump ls -lah |
