Reemplazar un data nodo de Elasticsearch de forma segura

Es probable que en alguna ocasión necesitemos reemplazar uno de nuestros nodos de datos del cluster de Elasticsearch. Una opción (a lo loco, y nada recomendable) sería directamente eliminar el nodo, y añadir uno nuevo, el cual, en algún momento se sincronizará con el cluster. Obviamente lo malo de esta opción, es que el cluster quedará en status yellow o red mientras no termine la sincronización.

Una buena opción (probado en un ES 5.6.3) para hacer de este proceso, un proceso seguro y controlado, es como primer paso, quitar el nodo del cluster, esperar a que los shards (primarios y réplicas) se re-asignen, y una vez tengamos el nodo desacoplado del cluster, reemplazarlo. La idea es continuar con el cluster en “green” durante todo el proceso.

A continuación los pasos.

1- Primero confirmaremos el estado del cluster así como los nodos con que contamos, si no lo hemos hecho ya. En el ejemplo querremos reemplazar el nodo con IP 10.10.10.13.

2- En segundo lugar, redistribuiremos los shards asignados al nodo a reemplazar entre el resto de nodos del cluster. No podemos prever de antemano, cuanto tardará esta operación.

Info [1][2]

3- A partir de entonces, deberemos ir monitorizando el estado de nuestro cluster, y específicamente, del nodo que estamos quitando. Podemos usar varios comandos para ver el avance.

Podemos listar los shards del cluster y mostrar únicamente los referentes al nodo que estamos quitando, con el siguiente comando:

Por otra parte, podemos ver el estado del cluster, centrándonos en los valores para “number_of_pending_tasks” así como para los “number_of_*nodes”:

4- Al finalizar el proceso, el nodo no tendrá shards asignados, y podremos pasar a eliminarlo/retirarlo.

5- Tras añadir un nuevo nodo al cluster, deberemos darle algunos minutos para que se inicie y se una al cluster. De nuevo, podremos lanzar algunos de los comandos que ya hemos venido usando, para verificar el estado de la sincronización del nuevo cluster.

Verificamos que el nuevo nodo aparezca en el cluster

Monitorizamos los shards que se van asignando al nuevo nodo

Confirmamos que el cluster continúa “green”, y vemos cómo avanza el proceso mediante el “number_of_pending_tasks”

6- Cuando no haya más tareas pendientes, nuestro proceso habrá acabado, con suerte, sin downtimes y con el cluster siempre en “green”.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *