Configuration d'un cluster Elasticsearch : Guide étape par étape
Configurez un cluster Elasticsearch avec des rôles de nœuds sécurisés, des paramètres de découverte, la mise en réseau, le dimensionnement du tas et des vérifications de santé.
Configuration d'un cluster Elasticsearch : Guide étape par étape
La mise en place d'un cluster Elasticsearch consiste principalement à faire quelques choix initiaux correctement : noms de nœuds, découverte, rôles, mise en réseau et mémoire. Si ces bases sont erronées, votre cluster peut se former de manière peu fiable, s'exposer sur la mauvaise interface ou rencontrer des difficultés lors des redémarrages de nœuds.
Ce guide présente les paramètres essentiels à vérifier avant de mettre Elasticsearch en production. Les exemples utilisent elasticsearch.yml et supposent un petit cluster de trois nœuds, mais les mêmes vérifications s'appliquent lorsque vous passez à l'échelle.
Prérequis
Avant de plonger dans la configuration, assurez-vous d'avoir les éléments suivants en place :
- Environnement d'exécution Java : De nombreuses distributions Elasticsearch incluent un JDK intégré. Si vous fournissez votre propre environnement d'exécution Java, vérifiez la matrice de support pour votre version d'Elasticsearch.
java -version - Ressources système : Allouez suffisamment de RAM, de CPU et d'espace disque pour vos nœuds Elasticsearch. Les exigences exactes dépendent de votre volume de données et de la complexité des requêtes.
- Accès réseau : Assurez-vous que les nœuds peuvent communiquer entre eux sur les ports de transport configurés (par défaut 9300).
Installation
Bien que ce guide se concentre sur la configuration, une installation réussie commence par une installation correcte. Elasticsearch peut être installé via des gestionnaires de paquets (apt, yum), en téléchargeant l'archive ou en utilisant Docker. Référez-vous à la documentation officielle d'Elasticsearch pour des instructions d'installation détaillées spécifiques à votre système d'exploitation ou méthode de déploiement.
Fichiers de configuration principaux
Le fichier de configuration principal d'Elasticsearch est elasticsearch.yml, généralement situé dans le répertoire config/ de votre installation Elasticsearch. Les paramètres clés de ce fichier dictent le comportement du cluster.
Configuration du cluster : Directives de configuration clés
1. Nom du cluster (cluster.name)
Ce paramètre identifie de manière unique votre cluster. Tous les nœuds d'un même cluster doivent partager le même cluster.name. S'il n'est pas défini, il prend par défaut la valeur elasticsearch.
- Importance : Essentiel pour que les nœuds découvrent et rejoignent le bon cluster. Différents clusters sur le même réseau doivent avoir des noms distincts.
- Exemple (
elasticsearch.yml) :cluster.name: mon-cluster-de-production
2. Rôle du nœud (node.roles)
Les nœuds Elasticsearch peuvent se voir attribuer des rôles spécifiques pour optimiser l'allocation des ressources et les performances. Les rôles courants incluent master, data, ingest et ml. Pour les petits clusters, un seul nœud peut avoir plusieurs rôles.
- Nœud éligible au rôle de master : Responsable des actions à l'échelle du cluster comme la création/suppression d'index, le suivi des nœuds et l'allocation des shards. Il est recommandé d'avoir des nœuds master dédiés dans les environnements de production pour la stabilité.
node.roles: [ master ] - Nœud de données : Stocke les données et effectue des opérations liées aux données comme l'indexation et la recherche. Les nœuds de données dédiés sont cruciaux pour les performances.
node.roles: [ data ] - Nœud d'ingestion : Utilisé pour le prétraitement des documents avant l'indexation (par exemple, en utilisant des pipelines d'ingestion).
node.roles: [ ingest ] - Nœud de Machine Learning : Exécute les fonctionnalités de machine learning pour la détection d'anomalies et d'autres tâches.
node.roles: [ ml ] - Nœud de coordination uniquement : Gère les requêtes de recherche et les requêtes en bloc mais ne stocke pas les données et ne participe pas à l'élection du master. Utile pour décharger les charges de requêtes lourdes des nœuds de données ou master.
node.roles: []
Meilleure pratique : En production, dédiez des nœuds à des rôles spécifiques (par exemple, séparez les nœuds master des nœuds de données) pour une meilleure tolérance aux pannes et de meilleures performances. Pour les configurations plus petites, les nœuds peuvent avoir des rôles combinés.
3. Paramètres réseau (network.host, http.port, transport.port)
Ces paramètres contrôlent la façon dont vos nœuds Elasticsearch communiquent.
network.host: L'adresse IP ou le nom d'hôte auquel le nœud se lie. Pour les clusters multi-nœuds, définissez-le sur une adresse IP accessible par les autres nœuds. L'utilisation de0.0.0.0lie toutes les interfaces réseau disponibles.network.host: 192.168.1.100 # ou network.host: _site_ # ou network.host: 0.0.0.0http.port: Le port pour l'API REST HTTP (par défaut : 9200).http.port: 9200transport.port: Le port pour la communication entre nœuds (par défaut : 9300).transport.port: 9300
Avertissement : Soyez attentif aux règles de pare-feu pour garantir que les nœuds peuvent communiquer sur le transport.port.
4. Paramètres de découverte (discovery.seed_hosts, cluster.initial_master_nodes)
Ces paramètres sont cruciaux pour que les nœuds trouvent et rejoignent le cluster.
discovery.seed_hosts: Une liste d'adresses IP ou de noms d'hôte d'autres nœuds du cluster auxquels les nouveaux nœuds peuvent se connecter pour découvrir le cluster.discovery.seed_hosts: - "hote1:9300" - "hote2:9300" - "192.168.1.101:9300"cluster.initial_master_nodes: Une liste de noms de nœuds éligibles au rôle de master utilisée uniquement pour amorcer un tout nouveau cluster. Supprimez ce paramètre après la formation du cluster. Laisser des paramètres d'amorçage obsolètes en place peut entraîner une confusion lors des reconstructions ultérieures ou de la formation accidentelle de clusters.cluster.initial_master_nodes: - "nœud-1" - "nœud-2" - "nœud-3"
Astuce : Dans les environnements cloud ou les réseaux dynamiques, envisagez d'utiliser des services comme DNS ou des mécanismes de découverte de fournisseur de cloud.
Configuration d'un cluster multi-nœuds
Pour configurer un cluster multi-nœuds, vous configurerez le fichier elasticsearch.yml de chaque nœud. Assurez-vous que :
cluster.nameest identique sur tous les nœuds.- Chaque nœud a un
node.nameunique (par exemple,nœud-1,nœud-2). network.hostest défini sur une adresse IP accessible par les autres nœuds.discovery.seed_hostsrépertorie les adresses d'au moins un quorum de nœuds éligibles au rôle de master.cluster.initial_master_nodesinclut les noms des nœuds éligibles au rôle de master initiaux uniquement lors du premier amorçage du cluster.
Exemple pour nœud-1 :
cluster.name: mon-cluster-de-production
node.name: nœud-1
node.roles: [ master, data ]
network.host: 192.168.1.100
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
- "192.168.1.100:9300"
- "192.168.1.101:9300"
- "192.168.1.102:9300"
cluster.initial_master_nodes:
- "nœud-1"
- "nœud-2"
- "nœud-3"
Exemple pour nœud-2 (similaire, avec node.name: nœud-2) :
cluster.name: mon-cluster-de-production
node.name: nœud-2
node.roles: [ master, data ]
network.host: 192.168.1.101
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
- "192.168.1.100:9300"
- "192.168.1.101:9300"
- "192.168.1.102:9300"
cluster.initial_master_nodes:
- "nœud-1"
- "nœud-2"
- "nœud-3"
5. Taille du tas (jvm.options)
Elasticsearch utilise une quantité importante de mémoire. La taille du tas de la machine virtuelle Java (JVM) est configurée dans le fichier jvm.options (généralement dans le répertoire config/). Il est recommandé de définir la taille de tas minimale et maximale à la même valeur pour éviter les problèmes de performances causés par le redimensionnement du tas.
- Meilleure pratique : Définissez la taille du tas à pas plus de la moitié de la RAM système et laissez de la mémoire pour le cache du système de fichiers. Évitez les tas surdimensionnés ; de nombreux déploiements restent en dessous du seuil des pointeurs d'objets ordinaires compressés, qui se situe généralement autour de la plage de 30 Go mais dépend de la JVM.
Exemple (jvm.options) :
-Xms4g
-Xmx4g
Cela définit la taille de tas initiale et maximale à 4 gigaoctets.
6. Allocation et réplication des shards (cluster.routing.*)
Ces paramètres contrôlent la façon dont les shards sont distribués et répliqués sur les nœuds.
cluster.routing.allocation.disk.watermark.low,high,flood_stage: Seuils pour empêcher l'allocation de shards sur des disques qui manquent d'espace.cluster.routing.allocation.enable: Contrôle l'allocation des shards (par exemple,all,primaries,new_primaries,none).
Exemple :
cluster.routing.allocation.disk.watermark.low: "85%"
cluster.routing.allocation.disk.watermark.high: "90%"
cluster.routing.allocation.disk.watermark.flood_stage: "95%"
Vérification de la santé du cluster
Une fois les nœuds démarrés, vous pouvez vérifier la santé et l'état du cluster à l'aide de l'API Cluster Health.
curl -X GET "localhost:9200/_cluster/health?pretty"
Champs de sortie clés :
status:green(tous les shards alloués),yellow(certaines répliques non attribuées),red(certains shards primaires non attribués).number_of_nodes: Le nombre total de nœuds dans le cluster.number_of_data_nodes: Le nombre de nœuds désignés comme nœuds de données.active_shards,relocating_shards,initializing_shards,unassigned_shards.
Astuce : Visez un statut green. Un statut yellow indique que même si vos données sont en sécurité (les shards primaires sont alloués), vous manquez peut-être de répliques suffisantes pour une haute disponibilité. Un statut red signifie que les données sont en danger et nécessitent une attention immédiate.
Prochaines étapes
Après avoir configuré avec succès votre cluster Elasticsearch, vous procéderez généralement à :
- Création d'index : Définissez comment vos données seront stockées et organisées.
- Mapping : Définissez le schéma de vos documents, en spécifiant les types de données pour les champs.
- Analyseurs : Configurez l'analyse de texte pour une recherche en texte intégral efficace.
- Sécurité : Mettez en œuvre l'authentification et l'autorisation.
Ce guide fournit les bases essentielles pour un cluster Elasticsearch stable et performant. Une surveillance continue et un réglage en fonction de votre charge de travail spécifique sont essentiels pour un succès à long terme.