Recherche…


Remarques

Elasticsearch est livré avec un ensemble de valeurs par défaut qui offrent une expérience de développement optimale. L’affirmation implicite est qu’il n’est pas nécessairement bon pour la production, qui doit être adaptée à vos propres besoins et ne peut donc pas être prédite.

Les paramètres par défaut facilitent le téléchargement et l'exécution de plusieurs nœuds sur le même ordinateur sans modification de la configuration.

Où sont les paramètres?

A l'intérieur de chaque installation d'Elasticsearch se trouve un config/elasticsearch.yml . C'est là que vivent les paramètres suivants:

  • cluster.name
    • Le nom du cluster auquel le nœud se joint. Tous les nœuds du même cluster doivent partager le même nom.
    • Actuellement, par défaut, elasticsearch .
  • node.*
    • node.name
      • S'il n'est pas fourni, un nom aléatoire sera généré à chaque démarrage du nœud . Cela peut être amusant, mais ce n'est pas bon pour les environnements de production.
      • Les noms ne doivent pas nécessairement être uniques, mais ils doivent être uniques.
    • node.master
      • Un réglage booléen. Lorsque la valeur est true , cela signifie que le nœud est un nœud maître éligible et qu'il peut s'agir du nœud maître élu.
      • La valeur par défaut est true , ce qui signifie que chaque nœud est un nœud maître éligible.
    • node.data
      • Un réglage booléen. Lorsque la valeur est true , cela signifie que le nœud stocke des données et gère l'activité de recherche.
      • La valeur par défaut est true .
  • path.*
    • path.data
      • L'emplacement des fichiers écrits pour le noeud. Tous les nœuds utilisent ce répertoire pour stocker les métadonnées, mais les nœuds de données l'utilisent également pour stocker / indexer les documents.
      • Par défaut à ./data .
        • Cela signifie que des data seront créées pour vous en tant que répertoire homologue à config dans le répertoire Elasticsearch.
    • path.logs
      • L'emplacement des fichiers journaux est écrit.
      • La valeur par défaut est ./logs .
  • network.*
    • network.host

      • Par défaut, _local_ , qui est effectivement localhost .
        • Cela signifie que, par défaut, les nœuds ne peuvent pas être communiqués depuis l'extérieur de la machine actuelle!
    • network.bind_host

      • Potentiellement un tableau, cela indique à Elasticsearch quelles adresses de la machine en cours pour lier les sockets également.
        • C'est cette liste qui permet aux machines extérieures à la machine (par exemple, d'autres nœuds du cluster) de communiquer avec ce nœud.
      • Par défaut, network.host .
    • network.publish_host

      • Un hôte singulier utilisé pour annoncer aux autres nœuds comment communiquer au mieux avec ce nœud.
        • Lors de la fourniture d' un tableau à network.bind_host , cela devrait être le seul hôte qui est destiné à être utilisé pour la communication inter-noeuds.
      • Par défaut, network.host`.
  • discovery.zen.*
    • discovery.zen.minimum_master_nodes
      • Définit le quorum pour l'élection principale. Cela doit être défini en utilisant cette équation: (M / 2) + 1M est le nombre de nœuds maîtres éligibles (nœuds utilisant node.master: true implicitement ou explicitement).
      • La valeur par défaut est 1 , ce qui est uniquement valable pour un cluster à nœud unique!
    • discovery.zen.ping.unicast.hosts
      • Le mécanisme permettant de joindre ce noeud au reste d'un cluster.
      • Cela devrait répertorier les nœuds principaux éligibles afin qu'un nœud puisse trouver le reste du cluster.
      • La valeur à utiliser ici est le network.publish_host de ces autres nœuds.
      • La valeur par défaut est localhost , ce qui signifie qu’elle ne regarde que la machine locale pour qu’un cluster puisse se joindre.

Quels types de paramètres existent?

Elasticsearch propose trois types de paramètres différents:

  • Paramètres à l'échelle du cluster
    • Ces paramètres s'appliquent à tous les éléments du cluster, tels que tous les nœuds ou tous les index.
  • Paramètres du noeud
    • Ce sont des paramètres qui s'appliquent uniquement au nœud actuel.
  • Paramètres d'index
    • Ce sont des paramètres qui s'appliquent uniquement à l'index.

Selon le réglage, il peut être:

  • Changé dynamiquement à l'exécution
  • Changé suite à un redémarrage (fermeture / ouverture) de l'index
    • Certains paramètres de niveau index ne nécessitent pas la fermeture et la réouverture de l'index, mais peuvent nécessiter une nouvelle fusion forcée de l'index pour que le paramètre s'applique.
      • Le niveau de compression d'un index est un exemple de ce type de paramètre. Il peut être changé dynamiquement, mais seuls les nouveaux segments profitent du changement. Donc, si un index ne change pas, il ne profite jamais de la modification, sauf si vous forcez l'index à recréer ses segments.
  • Changé suite à un redémarrage du noeud
  • Changé suite à un redémarrage du cluster
  • Jamais changé

Vérifiez toujours la documentation de votre version d'Elasticsearch pour savoir ce que vous pouvez ou ne pouvez pas faire avec un paramètre.

Comment puis-je appliquer les paramètres?

Vous pouvez définir les paramètres de plusieurs manières, dont certaines ne sont pas suggérées:

  • Arguments de ligne de commande

Dans Elasticsearch 1.x et 2.x, vous pouvez soumettre la plupart des paramètres en tant que propriétés système Java avec le préfixe es. :

$ bin/elasticsearch -Des.cluster.name=my_cluster -Des.node.name=`hostname`

Dans Elasticsearch 5.x, cela change pour éviter d'utiliser les propriétés du système Java, en utilisant plutôt un type d'argument personnalisé avec -E à la place de -Des. :

$ bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=`hostname`

Cette approche de l'application des paramètres fonctionne parfaitement lorsque vous utilisez des outils tels que Puppet, Chef ou Ansible pour démarrer et arrêter le cluster. Cependant, cela fonctionne très mal lorsque vous le faites manuellement.

  • Paramètres YAML
    • Illustré dans des exemples
  • Paramètres dynamiques
    • Illustré dans des exemples

L'ordre dans lequel les paramètres sont appliqués est dans l'ordre le plus dynamique:

  1. Paramètres transitoires
  2. Paramètres persistants
  3. Paramètres de ligne de commande
  4. Paramètres YAML (statique)

Si le réglage est défini deux fois, une fois à l'un de ces niveaux, le niveau le plus élevé prend effet.

Paramètres statiques d'Elasticsearch

Elasticsearch utilise un fichier de configuration YAML (Yet Another Markup Language) qui se trouve dans le répertoire Elasticsearch par défaut (les installations RPM et DEB changent cet emplacement, entre autres ).

Vous pouvez définir les paramètres de base dans config/elasticsearch.yml :

# Change the cluster name. All nodes in the same cluster must use the same name!
cluster.name: my_cluster_name

# Set the node's name using the hostname, which is an environment variable!
# This is a convenient way to uniquely set it per machine without having to make
#  a unique configuration file per node.
node.name: ${HOSTNAME}

# ALL nodes should set this setting, regardless of node type
path.data: /path/to/store/data

# This is a both a master and data node (defaults)
node.master: true
node.data: true

# This tells Elasticsearch to bind all sockets to only be available
#  at localhost (default)
network.host: _local_

Paramètres de cluster dynamique persistants

Si vous devez appliquer un paramètre de manière dynamique après le démarrage du cluster et qu'il peut effectivement être défini dynamiquement, vous pouvez le définir à l'aide de l'API _cluster/settings .

Les paramètres persistants sont l'un des deux types de paramètres à l'échelle du cluster pouvant être appliqués. Un paramètre persistant survivra un redémarrage du cluster complet.

Remarque: Tous les paramètres ne peuvent pas être appliqués dynamiquement. Par exemple, le nom du cluster ne peut pas être renommé dynamiquement. La plupart des paramètres au niveau du nœud ne peuvent pas non plus être définis dynamiquement (car ils ne peuvent pas être ciblés individuellement).

Ce n'est pas l'API à utiliser pour définir les paramètres de niveau index. Vous pouvez dire que ce paramètre est un paramètre de niveau d'index car il doit commencer par index. . Paramètres dont le nom est sous forme d' indices. sont des paramètres à l'échelle du cluster car ils s'appliquent à tous les index.

POST /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}

Attention : Dans Elasticsearch 1.x et 2.x, vous ne pouvez pas désactiver un paramètre persistant.

Heureusement, cela a été amélioré dans Elasticsearch 5.x et vous pouvez maintenant supprimer un paramètre en le définissant sur null :

POST /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}

Un paramètre non défini reprendra sa valeur par défaut ou toute valeur définie à un niveau de priorité inférieur (par exemple, paramètres de ligne de commande).

Paramètres de cluster dynamique transitoire

Si vous devez appliquer un paramètre de manière dynamique après le démarrage du cluster et qu'il peut effectivement être défini dynamiquement, vous pouvez le définir à l'aide de l'API _cluster/settings .

Les paramètres transitoires sont l'un des deux types de paramètres à l'échelle du cluster pouvant être appliqués. Un paramètre transitoire ne survivra pas à un redémarrage complet du cluster.

Remarque: Tous les paramètres ne peuvent pas être appliqués dynamiquement. Par exemple, le nom du cluster ne peut pas être renommé dynamiquement. La plupart des paramètres au niveau du nœud ne peuvent pas non plus être définis dynamiquement (car ils ne peuvent pas être ciblés individuellement).

Ce n'est pas l'API à utiliser pour définir les paramètres de niveau index. Vous pouvez dire que ce paramètre est un paramètre de niveau d'index car il doit commencer par index. . Paramètres dont le nom est sous forme d' indices. sont des paramètres à l'échelle du cluster car ils s'appliquent à tous les index.

POST /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}

Avertissement : Dans Elasticsearch 1.x et 2.x, vous ne pouvez pas désactiver les paramètres transitoires sans un redémarrage complet du cluster.

Heureusement, cela a été amélioré dans Elasticsearch 5.x et vous pouvez maintenant supprimer un paramètre en le définissant sur null:

POST /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": null
  }
}

Un paramètre non défini reprendra sa valeur par défaut ou toute valeur définie à un niveau de priorité inférieur (par exemple, paramètres persistent ).

Paramètres d'index

Les paramètres d'index sont les paramètres qui s'appliquent à un seul index. Ces paramètres commenceront par index. . L'exception à cette règle est number_of_shards et number_of_replicas , qui existent également sous la forme index.number_of_shards et index.number_of_replicas .

Comme son nom l'indique, les paramètres de niveau index s'appliquent à un seul index. Certains paramètres doivent être appliqués au moment de la création, car ils ne peuvent pas être modifiés dynamiquement, tels que le paramètre index.number_of_shards , qui contrôle le nombre de fragments primaires pour l'index.

PUT /my_index
{
  "settings": {
    "index.number_of_shards": 1,
    "index.number_of_replicas": 1
  }
}

ou, dans un format plus concis, vous pouvez combiner des préfixes clés à chacun . :

PUT /my_index
{
  "settings": {
    "index": {
      "number_of_shards": 1,
      "number_of_replicas": 1
    }
  }
}

Les exemples ci-dessus créeront un index avec les paramètres fournis. Vous pouvez modifier dynamiquement les paramètres par index à l'aide du _settings final index _settings . Par exemple, ici, nous modifions dynamiquement les paramètres de ralentissement uniquement pour le niveau d’avertissement:

PUT /my_index/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

Attention : Elasticsearch 1.x et 2.x n'ont pas validé très strictement les noms de paramètres au niveau de l'index. Si vous aviez une faute de frappe, ou simplement créé un paramètre, alors il l'accepterait aveuglément, mais l'ignorerait sinon. Elasticsearch 5.x valide strictement les noms de paramètres et rejette toute tentative d'application de paramètres d'index avec un ou des paramètres inconnus (en raison d'une erreur de frappe ou d'un plug-in manquant). Les deux instructions s'appliquent à la modification dynamique des paramètres d'index et au moment de la création.

Paramètres d'index dynamique pour plusieurs indices en même temps

Vous pouvez appliquer la même modification indiquée dans l'exemple des Index Settings à tous les index existants avec une seule demande, voire un sous-ensemble:

PUT /*/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

ou

PUT /_all/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

ou

PUT /_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

Si vous préférez le faire de manière plus sélective, vous pouvez sélectionner plusieurs options sans tout fournir:

PUT /logstash-*,my_other_index,some-other-*/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow