Site icon Eolya Consulting

Installation d’un cluster elasticsearch 8.x (et son piège)

Dans cet article nous abordons l’installation sous Linux d’un cluster elasticsearch et non pas d’une infrastructure ELK complète. L’installation de Kibana qui est néanmoins indispensable pour à minima l’administration du cluster sera décrite dans un autre article.

La procédure d’installation d’un cluster elasticsearch 8.x n’a pas fondamentalement changée comparée à la procédure pour une version 7.x. Cependant, il y a quelques nouveautés et un piège à éviter. 

Les nouveautés sont les suivantes :

Dans cette procédure basée sur les packages officiels, nous indiquons les étapes communes de l’installation des différents nœuds, puis les procédures spécifiques pour le premier nœud et les nœuds suivants. 

L’installation est réalisée sous Debian 12 sous un compte utilisateur qui n’est pas root. Nous installons deux nœuds dont les noms de host sont es1 et es2.

Étapes communes à tous les nœuds

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
$ sudo apt install apt-transport-https
$ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main"  | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
$ sudo useradd -m -d /home/elasticsearch -s /bin/bash elasticsearch
$ sudo passwd elasticsearch
$ sudo usermod -aG sudo elasticsearch
$ sudo apt update && sudo apt install elasticsearch

Nœud 1 (es1)

elasticsearch est installé et est configuré par défaut avec la sécurité activée et l’enrollment. Il est possible de les désactiver et dans ce cas, l’installation est identique à celle d’une version 7.x. Dans /etc/elasticsearch/elactiserach.yml, on modifie ces paramètres.

xpack.security.enabled: false
xpack.security.enrollment.enabled: false

Dans notre cas, nous poursuivons bien sûr en conservant ces deux fonctionnalités activées et surtout en ne modifiant pas le fichier de configuration avant le premier démarrage afin que tout se passe correctement. En effet, c’est lors du premier démarrage que tout se joue et que la configuration de sécurité suivante s’effectue automatiquement : 

$ sudo systemctl daemon-reload
$ sudo systemctl enable elasticsearch.service
$ sudo systemctl start elasticsearch.service
$ cd /usr/share/elasticsearch/bin/
$ ./elasticsearch-reset-password -i -u elastic
$ curl -k -u elastic:elastic https://localhost:9200/
$ curl -k -u elastic:elastic https://localhost:9200/_cluster/health?pretty
$ curl -k -u elastic:elastic https://localhost:9200/_cat/nodes
$ curl -k -u elastic:elastic https://localhost:9200/_cat/master

On constate qu’il n’y a qu’un nœud dans le cluster.

C’est là que l’on déjoue le piège. En effet, par défaut un nœud elasticsearch n’est accessible qu’en local sur son port 9300 (communications entre les nœuds d’un cluster) et donc les autres nœuds ne vont pas pouvoir communiquer avec lui et le premier effet est que leur « enrollment » va échouer.

C’est le paramètre « network.host » qui doit être positionné. Voici les paramètres à vérifier et éventuellement modifier dans le fichier /etc/elasticsearch/elasticsearch.yml

cluster.name: <- modifier si autre que "elasticsearch"
network.host: <- ip locale
discovery.seed_hosts: ["es1"]
cluster.initial_master_node: ["es1"]
$ sudo systemctl restart elasticsearch.service
$ cd /usr/share/elasticsearch/bin/
$ ./elasticsearch-create-enrollment-token -s node
eyJ2ZXIiOiI4LjExLjEi.........fQ==

Nœuds suivants (es2, …)

$ nc -zv es1 9300
Connection to es1 (192.168.1.33) 9300 port [tcp/*] succeeded!
$ cd /usr/share/elasticsearch/bin/
$ ./elasticsearch-reconfigure-node --enrollment-token eyJ2ZXIiOiI4LjExLjEi.........fQ==

Cette étape, modifie principalement la configuration dans le fichier /etc/elasticsearch/elasticsearch.yml en positionnant le paramètre discovery.seed_hosts afin d’indiquer ou joindre le nœud es1. Le port utilisé est le 9300 d’où la vérification précédente. 
discovery.seed_hosts: [« 192.168.1.33:9300 »]

Editer /etc/elasticsearch/elasticsearch.yml

cluster.name: <- modifier si autre que "elasticsearch"
network.host: <- ip locale
$ sudo systemctl daemon-reload
$ sudo systemctl enable elasticsearch.service
$ sudo systemctl start elasticsearch.service
$ curl -k -u elastic:elastic https://localhost:9200/
$ curl -k -u elastic:elastic https://localhost:9200/_cluster/health?pretty
$ curl -k -u elastic:elastic https://localhost:9200/_cat/nodes
$ curl -k -u elastic:elastic https://localhost:9200/_cat/master

On constate que le nouveau nœud est intégré au cluster.

Et ensuite 

Une fois tous les nœuds ajoutés et ensuite lors de chaque ajout ou suppression d’un nœud, on pense à : 

Dans cet article nous avons vu la procédure d’installation d’un cluster elastisearch et comment déjouer le piège de communication entre les nœuds. Ce dernier point n’est pas clairement indiqué dans la documentation officielle et peut faire perdre beaucoup de temps. Ce piège est également à contourner lors de l’installation avec les archives tar.

Quitter la version mobile