Supprimer proprement un node Elasticsearch

Publié par Jonathan Estevez le

Il arrive un moment où l’on souhaite supprimer un node d’un cluster Elasticsearch. Si les données sont répliquées sur au moins deux serveurs, il peut être tentant de simplement éteindre un node. Si cela fonctionne, ce n’est clairement pas une solution très propre. Si les données étaient de la forme d’un principal et d’un replica, il suffit qu’au même moment le second node ait un problème pour perdre potentiellement des données.

La solution ?

Dire au cluster de ne plus mettre de données sur un node en particulier. Les données seront alors réarrangées sur le cluster pour avoir le minimum d’un node principal pour chaque indice et un replica.

Comment faire ?

La première étape est de dire au cluster quel(s) node(s) exclure pour l’allocation de données. Cela peut se faire via la commande ci-dessous sur un des nodes du cluster.

Attention, lancer cette commande remplacera ce qui se trouvait déjà dans cluster.routing.allocation.exclude._ip. Si vous devez y mettre plusieurs adresses ip, il faudra alors le faire en les séparant par une virgule et avec un espace après la virgule.

curl -XPUT localhost:9200/_cluster/settings -H 'Content-Type: application/json' -d '{
    "transient" :{
       "cluster.routing.allocation.exclude._ip" : "192.168.0.10, 192.168.1.10"
    }
}';

Dans l’exemple ci-dessous, nous allons dire au cluster d’exclure les nodes 192.168.0.10 et 192.168.1.10 des serveurs capables d’allouer des ressources pour le stockage de données.

Si tout passe bien, vous recevez en retour un « aknowledge ». Les différents serveurs vont alors petit à petit se réorganiser. En fonction du nombre de nodes, d’indices et de shards, cette réorganisation pourra prendre un certains temps.

Dans le mode actuel, le serveur Elasticsearch est toujours actif et membre du cluster. Il peut donc être gardé en réserve ou utiliser pour la gestion des connexions externes sans plus y avoir directement les données dessus.

Si vous souhaitez le garder actif et y bloquer le stockage de données, il suffit de rajouter/modifier le fichier de configuration d’Elasticsearch avec la ligne suivante

node.data: false

Pour que la configuration soit prise en compte, il faut alors relancer le service elasticsearch. Avec ce changement, qu’importe ce que contient la configuration « cluster.routing.allocation.exclude._ip », ce serveur ne stockera plus de données.

Si par contre vous souhaitez simplement supprimer le node. Il suffit d’arrêter le service et/ou le serveur sur lequel le service tournait.

Catégories : Base de connaissance

Jonathan Estevez

J’aime les nouvelles technologies, au point d’avoir fait de ma passion mon métier en étant « System Administrator ». Ma vie en Hastag ? #Geek #ICT #Telecom #Mobile #Smartphone #4G #Android #iOS #Windows #MacOS #Belgium #Brussels

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :