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.
- 1º Eliminar OSD y retirar nodo de Ceph de almacenamiento.
- 2º Eliminar el nodo del clúster Proxmox.
- 3º Reajuste de pools, reducción.
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:
|
1 |
ceph osd out osd.9 |

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:
|
1 |
ceph osd in osd.9 |
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íntoma | Qué significa | Acción |
|---|---|---|
HEALTH_WARN: reduced data availability | Algo está mal | Hacer ceph osd in <ID> inmediatamente |
| El rebalanceo no avanza | Puede haber OSDs llenos o problemas de red | Investigar antes de continuar |
HEALTH_WARN: near full | Se necesita más espacio en los otros nodos | Antes de destruir el OSD hay que añadir más almacenamiento en el resto de nodos |
Todo bien y HEALTH_OK | Seguro para destruir | Continú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:
|
1 |
systemctl stop ceph-osd@9 |
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:
|
1 |
ceph osd destroy osd.9 --force |
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):
|
1 |
pveceph mds destroy 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:
|
1 |
pveceph mon destroy |
Haremos lo mismo con el manager (detener y destruir):

Por línea de comando, desde el nodo a retirar:
|
1 |
pveceph mgr destroy |
Desde la línea de comandos, eliminaremos el nodo del mapa CRUSH, ejecutando el comando (para retirar el nodo proxmox3):
|
1 |
ceph osd crush rm 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:
|
1 |
shutdown -h now |
Una vez apagado, desde la consola shell de otro nodo activo, ejecutaremos el siguiente comando para retirar el nodo apagado del clúster Proxmox:
|
1 |
pvecm delnode proxmox3 |

Editaremos el fichero /etc/pve/priv/authorized_keys, con:
|
1 |
nano /etc/pve/priv/authorized_keys |
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)
|
1 2 3 4 5 6 7 |
# Ver configuración actual ceph osd pool get .mgr size ceph osd pool get .mgr min_size # Ajustar para 2 nodos ceph osd pool set .mgr size 2 ceph osd pool set .mgr min_size 1 |
Pool 2: ceph_pool_1 (el pool RBD principal)
|
1 2 3 4 5 6 7 |
# Ver configuración actual ceph osd pool get ceph_pool_1 size ceph osd pool get ceph_pool_1 min_size # Ajustar para 2 nodos ceph osd pool set ceph_pool_1 size 2 ceph osd pool set ceph_pool_1 min_size 1 |
Pool 3: cephfs_metadata (metadatos de CephFS)
|
1 2 3 4 5 6 7 |
# Ver configuración actual ceph osd pool get cephfs_metadata size ceph osd pool get cephfs_metadata min_size # Ajustar para 2 nodos ceph osd pool set cephfs_metadata size 2 ceph osd pool set cephfs_metadata min_size 1 |
Pool 4: cephfs_data (datos de CephFS)
|
1 2 3 4 5 6 7 |
# Ver configuración actual ceph osd pool get cephfs_data size ceph osd pool get cephfs_data min_size # Ajustar para 2 nodos ceph osd pool set cephfs_data size 2 ceph osd pool set cephfs_data min_size 1 |

Tras ajustar el número de pools, conviene forzar el rebalanceo, con:
|
1 |
ceph osd reweight-by-utilization |

Podremos ver el progreso con:
|
1 |
watch -n 5 ceph -s |

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:
