Procedimiento completo para eliminar un nodo hiperconvergente en Ceph y en Proxmox. Orden de eliminación de componentes (OSD, monitor, mgr), limpieza de archivos de configuración residuales y ajuste de pools para funcionar con menos nodos.

Revisar configuración y estado actual del clúster

En primer lugar, al ser un proceso crítico, revisaremos que el clúster esté OK, que haya miembros suficientes para soportar la pérdida de uno, tanto en el clúster Proxmox como en el almacenamiento hiperconvergente Ceph. Es decir, tenemos que estar seguros de que al retirar el nodo, el resto de nodos podrán asumir su «pérdida».

El clúster Proxmox debe estar OK:

Comprobaremos que el almacenamiento hiperconvergente Ceph esté OK (HEALTH_OK):

Nos aseguraremos de que en el almacenamiento de los nodos que van a quedar haya espacio libre suficiente para albergar el espacio usado en el nodo a eliminar.

Y, por supuesto, muy importante, antes de retirar un nodo, haremos copia de seguridad de toda la infraestructura de virtualización.

1º Eliminar OSD y retirar nodo de Ceph de almacenamiento

Con mucha precaución, una vez revisado el entorno y comprobado que puede soportar la retirada de un nodo, iremos apagando, progresivamente, los OSD del nodo a retirar. Es recomendable, si tenemos varios OSD, apagar de uno en uno, esperando varios minutos para asegurarnos de que las replicaciones de datos no generan errores por falta de candidatos.

Pasaremos el OSD a Out, desde cualquier nodo del clúster Ceph, accederemos a «Ceph» – «OSD», seleccionaremos el OSD del nodo a retirar y pulsando en «Out»:

También se puede hacer desde la línea de comandos, con:

El OSD quedará en estado Out:

A partir de este momento, el clúster deja de asignar nuevos datos a ese OSD, NO se eliminan los datos existentes. Ceph comenzará a rebalancear, copiando los datos a otros OSD. Si en este ponto hay cualquier problema, se puede volver a incluir el OSD, con:

Y todo volverá a la normalidad.

Dejaremos pasar unos minutos, dejando que los datos se «migren» a otros OSD.

Situaciones posibles durante el «out»

SíntomaQué significaAcción
HEALTH_WARN: reduced data availabilityAlgo está malHacer ceph osd in <ID> inmediatamente
El rebalanceo no avanzaPuede haber OSDs llenos o problemas de redInvestigar antes de continuar
HEALTH_WARN: near fullSe necesita más espacio en los otros nodosAntes de destruir el OSD hay que añadir más almacenamiento en el resto de nodos
Todo bien y HEALTH_OKSeguro para destruirContinúa con el stop y destroy

Cuando el clúster vuelva a estado HEALTH_OK, podremos continuar con el proceso.

Cuando hayamos revisado que no hay problemas en el almacenamiento, ni en el resto de nodos, ni en las máquinas virtuales, podremos apagar el ODS. De la misma forma que hemos hecho para marcarlo Out, desde cualquier nodo del clúster Ceph, accederemos a «Ceph» – «OSD», seleccionaremos el OSD que hemos pasado a Out del nodo a retirar y pulsaremos en «Stop»:

También se puede detener un OSD desde la línea de comandos, con:

El OSD quedará down/out:

Realizaremos todos estos pasos esperando varios minutos y revisando que Ceph no presente errores de falta de candidatos para sincronización. Estos pasos NO eliminan datos, son reversibles, si hay algún fallo, se pueden volver a incluir los OSD (con In) y volver a iniciar (con Start).

En cuanto hayamos detenido y retirado todos los OSD y hayan pasado varias horas (es lo recomendable), si no hay errores, podremos destruirlos definitivamente del clúster Ceph. Para destruir un OSD por completo (proceso NO reversible, aunque los discos físicos seguirán conteniendo los datos), lo seleccionaremos y pulsaremos en «More» – «Destroy»:

O bien, desde la línea de comandos:

Si usamos CephFS, una vez eliminados todos los OSD del nodo a retirar, conviene desactivarlo del MDS (metadatos), con el comando (para quitar el nodo proxmox3):

Eliminaremos el nodo del monitor de Ceph, desde uno de los nodos, en «Ceph» – «Monitor», seleccionaremos el nodo a retirar y pulsaremos en «Stop»:

Una vez detenido, lo destruiremos, en la misma ventana, pulsando en «Destroy»:

O bien, desde la línea de comandos, accediendo al nodo a eliminar, ejecutaremos:

Haremos lo mismo con el manager (detener y destruir):

Por línea de comando, desde el nodo a retirar:

Desde la línea de comandos, eliminaremos el nodo del mapa CRUSH, ejecutando el comando (para retirar el nodo proxmox3):

2º Eliminar el nodo del clúster Proxmox

Apagaremos el nodo a retirar del clúster, bien desde la consola web:

O bien desde la línea de comandos, accediendo a la consola shell del nodo a retirar y ejecutando:

Una vez apagado, desde la consola shell de otro nodo activo, ejecutaremos el siguiente comando para retirar el nodo apagado del clúster Proxmox:

Editaremos el fichero /etc/pve/priv/authorized_keys, con:

Buscaremos las líneas con proxmox3 (el nodo retirado), para buscarlas, hay que ir al final de la línea, que es donde se muestra el nombre del nodo. Eliminaremos todas las líneas con el nombre del nodo retirado (en nuestro caso proxmox3), pulsando, sobre la línea, Control + K:

3º Reajuste de pools, reducción

Por último, es conveniente reajustar el tamaño de los pools, reduciendo a uno todos los valores:

Pool 1: .mgr (pool interno del manager)

Pool 2: ceph_pool_1 (el pool RBD principal)

Pool 3: cephfs_metadata (metadatos de CephFS)

Pool 4: cephfs_data (datos de CephFS)

Tras ajustar el número de pools, conviene forzar el rebalanceo, con:

Podremos ver el progreso con:

El clúster Ceph debería quedar en estado HEALTH_OK, puede tardar varias horas en sincronizarse, en función del volumen de datos almacenado: