Suche…


Bemerkungen

Elasticsearch verfügt über eine Reihe von Standardwerten, die eine gute Erfahrung für die Entwicklung bieten. Die implizite Aussage dort ist, dass es nicht unbedingt großartig für die Produktion ist, die auf Ihre eigenen Bedürfnisse zugeschnitten sein muss und daher nicht vorhergesagt werden kann.

Die Standardeinstellungen erleichtern das Herunterladen und Ausführen mehrerer Knoten auf derselben Maschine ohne Konfigurationsänderungen.

Wo sind die einstellungen

In jeder Installation von Elasticsearch befindet sich eine config/elasticsearch.yml . Hier leben die folgenden Einstellungen :

  • cluster.name
    • Der Name des Clusters, dem der Knoten beitritt. Alle Knoten in demselben Cluster müssen denselben Namen haben.
    • Derzeit ist die elastische elasticsearch standardmäßig elasticsearch .
  • node.*
    • node.name
      • Wenn nicht angegeben, wird bei jedem Start des Knotens ein zufälliger Name generiert. Das kann Spaß machen, ist aber für Produktionsumgebungen nicht geeignet.
      • Namen müssen nicht eindeutig sein, sie sollten jedoch eindeutig sein.
    • node.master
      • Eine boolesche Einstellung. Wenn true , bedeutet dies, dass der Knoten ein in Frage kommender Master-Knoten ist und er kann der ausgewählte Master-Knoten sein.
      • Der Standardwert ist " true , dh jeder Knoten ist ein in Frage kommender Master-Knoten.
    • node.data
      • Eine boolesche Einstellung. Wenn dies true , bedeutet dies, dass der Knoten Daten speichert und Suchaktivitäten verarbeitet.
      • Der Standardwert ist " true .
  • path.*
    • path.data
      • Der Ort, an dem Dateien für den Knoten geschrieben werden. Alle Knoten verwenden dieses Verzeichnis zum Speichern von Metadaten, Datenknoten jedoch auch zum Speichern / Indexieren von Dokumenten.
      • ./data .
        • Dies bedeutet, dass data für Sie als Peer-Verzeichnis für die config innerhalb des Elasticsearch-Verzeichnisses erstellt werden.
    • path.logs
      • Der Speicherort, an den Protokolldateien geschrieben werden.
      • ./logs .
  • network.*
    • network.host

      • Der _local_ ist _local_ , was effektiv localhost .
        • Das bedeutet, dass Knoten standardmäßig nicht von außerhalb der aktuellen Maschine kommuniziert werden können!
    • network.bind_host

      • Möglicherweise ein Array. Dies teilt Elasticsearch mit, welche Adressen der aktuellen Maschine auch Sockets binden sollen.
        • Mit dieser Liste können Maschinen von außerhalb der Maschine (z. B. andere Knoten im Cluster) mit diesem Knoten kommunizieren.
      • Standardmäßig ist network.host .
    • network.publish_host

      • Ein einzelner Host, mit dem anderen Knoten mitgeteilt wird, wie sie am besten mit diesem Knoten kommunizieren.
        • Wenn Sie ein Array an network.bind_host , sollte dies derjenige Host sein, der für die Kommunikation zwischen Knoten verwendet werden soll.
      • Voreinstellung für network.host`.
  • discovery.zen.*
    • discovery.zen.minimum_master_nodes
      • Definiert das Quorum für die Masterwahl. Dies muss mithilfe der folgenden Gleichung festgelegt werden: (M / 2) + 1 wobei M die Anzahl der in Frage node.master: true Master-Knoten ist (Knoten, die node.master: true implizit oder explizit).
      • Der Standardwert ist 1 , was nur für einen einzelnen Knotencluster gilt!
    • discovery.zen.ping.unicast.hosts
      • Der Mechanismus zum Verbinden dieses Knotens mit dem Rest eines Clusters.
      • Hier sollten geeignete Hauptknoten aufgelistet werden, damit ein Knoten den Rest des Clusters finden kann.
      • Der Wert, der hier verwendet werden soll, ist der network.publish_host dieser anderen Knoten.
      • Der Standardwert ist localhost Dies bedeutet, dass auf dem lokalen Computer nur nach einem Cluster gesucht wird.

Welche Einstellungen gibt es?

Elasticsearch bietet drei verschiedene Arten von Einstellungen:

  • Clusterweite Einstellungen
    • Dies sind Einstellungen, die für alles im Cluster gelten, beispielsweise für alle Knoten oder alle Indizes.
  • Knoteneinstellungen
    • Diese Einstellungen gelten nur für den aktuellen Knoten.
  • Indexeinstellungen
    • Diese Einstellungen gelten nur für den Index.

Je nach Einstellung kann es sein:

  • Zur Laufzeit dynamisch geändert
  • Geändert nach einem Neustart (Schließen / Öffnen) des Index
    • Einige Einstellungen auf Indexebene erfordern nicht, dass der Index geschlossen und erneut geöffnet wird. Es kann jedoch erforderlich sein, dass der Index zwangsweise erneut zusammengefügt wird, damit die Einstellung wirksam wird.
      • Der Kompressionsgrad eines Index ist ein Beispiel für diesen Einstellungstyp. Sie kann dynamisch geändert werden, aber nur neue Segmente nutzen die Änderung. Wenn sich also ein Index nicht ändert, nutzt er die Änderung niemals aus, es sei denn, Sie erzwingen, dass der Index seine Segmente neu erstellt.
  • Geändert nach einem Neustart des Knotens
  • Geändert nach einem Neustart des Clusters
  • Nie geändert

Überprüfen Sie immer die Dokumentation Ihrer Version von Elasticsearch, was Sie mit einer Einstellung tun können oder nicht.

Wie kann ich Einstellungen vornehmen?

Sie können einige Einstellungen festlegen, von denen einige nicht vorgeschlagen werden:

  • Kommandozeilenargumente

In Elasticsearch 1.x und 2.x können Sie die meisten Einstellungen als Java-Systemeigenschaften mit dem Präfix es. :

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

In Elasticsearch 5.x ändert sich dies, um die Verwendung von Java-Systemeigenschaften zu vermeiden, statt eines benutzerdefinierten Argumenttyps mit -E anstelle von -Des. :

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

Diese Methode zum Anwenden von Einstellungen eignet sich hervorragend, wenn Sie zum Starten und Stoppen des Clusters Tools wie Puppet, Chef oder Ansible verwenden. Es funktioniert jedoch sehr schlecht, wenn es manuell ausgeführt wird.

  • YAML-Einstellungen
    • In Beispielen gezeigt
  • Dynamische Einstellungen
    • In Beispielen gezeigt

Die Reihenfolge, in der die Einstellungen angewendet werden, liegt in der Reihenfolge der dynamischsten:

  1. Transiente Einstellungen
  2. Ständige Einstellungen
  3. Befehlszeileneinstellungen
  4. YAML (statische) Einstellungen

Wenn die Einstellung zweimal auf einer dieser Ebenen eingestellt ist, wird die höchste Stufe wirksam.

Statische Elasticsearch-Einstellungen

Elasticsearch verwendet eine YAML-Konfigurationsdatei (Yet Another Another Markup Language), die sich im Standard-Elasticsearch-Verzeichnis befindet ( RPM- und DEB-Installationen ändern diesen Speicherort unter anderem ).

Sie können grundlegende Einstellungen in config/elasticsearch.yml vornehmen:

# 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_

Permanente dynamische Clustereinstellungen

Wenn Sie eine Einstellung dynamisch anwenden müssen, nachdem der Cluster bereits gestartet wurde und tatsächlich dynamisch festgelegt werden kann, können Sie sie mit der _cluster/settings API _cluster/settings .

Persistente Einstellungen sind eine der zwei Arten von clusterweiten Einstellungen, die angewendet werden können. Eine hartnäckige Einstellung wird einen vollständigen Cluster - Neustart überleben.

Hinweis: Nicht alle Einstellungen können dynamisch angewendet werden. Beispielsweise kann der Name des Clusters nicht dynamisch umbenannt werden. Die meisten Einstellungen auf Knotenebene können auch nicht dynamisch festgelegt werden (da sie nicht einzeln anvisiert werden können).

Dies ist nicht die API, die zum Einstellen der Einstellungen auf Indexebene verwendet wird. Sie können erkennen, dass es sich bei der Einstellung um eine Indexebene handelt, da sie mit dem index. . Einstellungen, deren Name in Form von indices. vorliegt indices. sind clusterweite Einstellungen, da sie für alle Indizes gelten.

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

Warnung : In Elasticsearch 1.x und 2.x können Sie eine permanente Einstellung nicht aufheben .

Glücklicherweise wurde dies in Elasticsearch 5.x verbessert und Sie können eine Einstellung jetzt entfernen, indem Sie sie auf null :

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

Eine nicht festgelegte Einstellung wird auf den Standardwert oder einen Wert zurückgesetzt, der auf einer niedrigeren Prioritätsstufe definiert ist (z. B. Befehlszeileneinstellungen).

Einstellungen für transiente dynamische Cluster

Wenn Sie eine Einstellung dynamisch anwenden müssen, nachdem der Cluster bereits gestartet wurde und tatsächlich dynamisch festgelegt werden kann, können Sie sie mit der _cluster/settings API _cluster/settings .

Transiente Einstellungen sind eine der zwei Arten von clusterweiten Einstellungen, die angewendet werden können. Eine vorübergehende Einstellung wird keinen vollständigen Cluster - Neustart überleben.

Hinweis: Nicht alle Einstellungen können dynamisch angewendet werden. Beispielsweise kann der Name des Clusters nicht dynamisch umbenannt werden. Die meisten Einstellungen auf Knotenebene können auch nicht dynamisch festgelegt werden (da sie nicht einzeln anvisiert werden können).

Dies ist nicht die API, die zum Einstellen der Einstellungen auf Indexebene verwendet wird. Sie können erkennen, dass es sich bei der Einstellung um eine Indexebene handelt, da sie mit dem index. . Einstellungen, deren Name in Form von indices. vorliegt indices. sind clusterweite Einstellungen, da sie für alle Indizes gelten.

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

Warnung : In Elasticsearch 1.x und 2.x können Sie keine Übergangseinstellungen ohne einen vollständigen Neustart des Clusters aufheben.

Glücklicherweise wurde dies in Elasticsearch 5.x verbessert und Sie können eine Einstellung jetzt entfernen, indem Sie sie auf null setzen:

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

Eine nicht festgelegte Einstellung wird auf den Standardwert oder einen Wert zurückgesetzt, der auf einer niedrigeren Prioritätsstufe definiert ist (z. B. persistent Einstellungen).

Indexeinstellungen

Indexeinstellungen sind Einstellungen, die für einen einzelnen Index gelten. Solche Einstellungen beginnen mit dem index. . Die Ausnahme von dieser Regel sind number_of_shards und number_of_replicas , die auch in der Form index.number_of_shards und index.number_of_replicas .

Wie der Name vermuten lässt, gelten die Einstellungen auf Indexebene für einen einzelnen Index. Einige Einstellungen müssen zum Zeitpunkt der Erstellung angewendet werden, da sie nicht dynamisch geändert werden können, z. B. die Einstellung index.number_of_shards , die die Anzahl der primären Shards für den Index steuert.

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

oder, in einem übersichtlicheren Format, können Sie die Schlüsselpräfixe jeweils miteinander kombinieren . :

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

Die obigen Beispiele erstellen einen Index mit den angegebenen Einstellungen. Sie können die Einstellungen pro Index dynamisch ändern, indem Sie den Endpunkt des Index _settings . Zum Beispiel ändern wir hier die Slowlog-Einstellungen nur für die Warnstufe :

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

Warnung : Elasticsearch 1.x und 2.x haben die Einstellungsnamen auf Indexebene nicht sehr streng überprüft. Wenn Sie einen Tippfehler hätten oder einfach eine Einstellung vorgenommen hätten, würde er diese blind akzeptieren, ansonsten aber ignorieren. Elasticsearch 5.x überprüft die Namen der Einstellungen streng und lehnt jeden Versuch ab, Indexeinstellungen mit unbekannten Einstellungen anzuwenden (aufgrund von Tippfehlern oder fehlendem Plug-In). Beide Anweisungen gelten für dynamisch sich ändernde Indexeinstellungen und zum Zeitpunkt der Erstellung.

Dynamische Indexeinstellungen für mehrere Indizes gleichzeitig

Sie können die gleiche Änderung in der gezeigten Anwendung Index Settings - Index Settings Beispiel für alle vorhandenen Indizes mit einer Anfrage oder sogar eine Teilmenge von ihnen:

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

oder

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

oder

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

Wenn Sie es vorziehen, es auch selektiver zu machen, können Sie mehrere auswählen, ohne alle zu liefern:

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow