Elasticsearch-Cluster-Setup: Ein Schritt-für-Schritt-Konfigurationsleitfaden

Dieser umfassende Leitfaden bietet eine Schritt-für-Schritt-Anleitung zur Einrichtung und Konfiguration Ihres Elasticsearch-Clusters. Erlernen Sie wesentliche Schritte von der Installation bis zur Knotenkonfiguration, einschließlich wichtiger Einstellungen wie Clustername, Knotenrollen, Netzwerkkonfiguration und Erkennung. Optimieren Sie Ihre verteilte Such- und Analyse-Engine für optimale Leistung und Skalierbarkeit mit praktischen Beispielen und Best Practices.

38 Aufrufe

Elasticsearch Cluster-Einrichtung: Eine Schritt-für-Schritt-Konfigurationsanleitung

Die Einrichtung eines robusten Elasticsearch-Clusters ist der grundlegende Schritt, um dessen leistungsstarke verteilte Such- und Analysefunktionen nutzen zu können. Unabhängig davon, ob Sie für ein kleines Projekt oder eine groß angelegte Unternehmenslösung bereitstellen, ist das Verständnis der grundlegenden Konfigurationsprinzipien entscheidend für die Gewährleistung optimaler Leistung, Skalierbarkeit und Zuverlässigkeit. Diese Anleitung bietet einen umfassenden Schritt-für-Schritt-Durchgang zur Konfiguration eines Elasticsearch-Clusters, der wesentliche Aspekte von der Erstinstallation bis zur Feinabstimmung der Knoteneinstellungen abdeckt.

Die richtige Cluster-Einrichtung stellt nicht nur sicher, dass Ihre Elasticsearch-Instanz reibungslos läuft, sondern bereitet sie auch darauf vor, zunehmende Datenmengen und Abfragelasten zu bewältigen. Eine fehlerhafte Konfiguration kann zu Leistungseinbußen, Dateninkonsistenzen und sogar zu Cluster-Instabilität führen. Durch die Befolgung dieser Anleitung erhalten Sie das Wissen, um eine widerstandsfähige und effiziente Elasticsearch-Umgebung aufzubauen, die auf Ihre spezifischen Bedürfnisse zugeschnitten ist.

Voraussetzungen

Bevor Sie mit der Konfiguration beginnen, stellen Sie sicher, dass folgende Voraussetzungen erfüllt sind:

  • Java Development Kit (JDK): Elasticsearch erfordert ein kompatibles JDK. Elasticsearch 7.x und spätere Versionen erfordern JDK 11 oder neuer. Überprüfen Sie Ihre Java-Installation:
    bash java -version
  • Systemressourcen: Stellen Sie genügend RAM, CPU und Speicherplatz für Ihre Elasticsearch-Knoten bereit. Die genauen Anforderungen hängen von Ihrem Datenvolumen und Ihrer Abfragekomplexität ab.
  • Netzwerkzugriff: Stellen Sie sicher, dass die Knoten über die konfigurierten Transportports (Standard: 9300) miteinander kommunizieren können.

Installation

Obwohl sich diese Anleitung auf die Konfiguration konzentriert, beginnt eine erfolgreiche Einrichtung mit einer korrekten Installation. Elasticsearch kann über Paketmanager (apt, yum), durch Herunterladen des Archivs oder mithilfe von Docker installiert werden. Detaillierte Installationsanweisungen für Ihr Betriebssystem oder Ihre Bereitstellungsmethode finden Sie in der offiziellen Elasticsearch-Dokumentation.

Zentrale Konfigurationsdateien

Die primäre Konfigurationsdatei für Elasticsearch ist elasticsearch.yml, die sich normalerweise im Verzeichnis config/ Ihrer Elasticsearch-Installation befindet. Wichtige Einstellungen in dieser Datei bestimmen das Cluster-Verhalten.

Cluster-Einrichtung: Wichtige Konfigurationsdirektiven

1. Clustername (cluster.name)

Diese Einstellung identifiziert Ihren Cluster eindeutig. Alle Knoten im selben Cluster müssen denselben cluster.name teilen. Falls nicht festgelegt, lautet der Standardwert elasticsearch.

  • Wichtigkeit: Unerlässlich, damit Knoten den richtigen Cluster entdecken und ihm beitreten können. Verschiedene Cluster im selben Netzwerk sollten unterschiedliche Namen haben.
  • Beispiel (elasticsearch.yml):
    yaml cluster.name: my-production-cluster

2. Knotenrolle (node.roles)

Elasticsearch-Knoten können spezifische Rollen zugewiesen werden, um die Ressourcenzuweisung und Leistung zu optimieren. Gängige Rollen sind master, data, ingest und ml. Bei kleineren Clustern kann ein einzelner Knoten mehrere Rollen haben.

  • Master-fähiger Knoten: Verantwortlich für Cluster-weite Aktionen wie das Erstellen/Löschen von Indizes, die Nachverfolgung von Knoten und die Zuweisung von Shards. Für Stabilität in Produktionsumgebungen wird empfohlen, dedizierte Master-Knoten zu haben.
    yaml node.roles: [ master ]
  • Datenknoten: Speichert Daten und führt datenbezogene Operationen wie Indizierung und Suche durch. Dedizierte Datenknoten sind entscheidend für die Leistung.
    yaml node.roles: [ data ]
  • Ingest-Knoten: Wird zur Vorverarbeitung von Dokumenten vor der Indizierung verwendet (z. B. mithilfe von Ingest Pipelines).
    yaml node.roles: [ ingest ]
  • Machine Learning-Knoten: Führt Machine-Learning-Funktionen zur Anomalieerkennung und für andere Aufgaben aus.
    yaml node.roles: [ ml ]
  • Nur koordinierender Knoten: Behandelt Such- und Bulk-Anfragen, speichert jedoch keine Daten und nimmt nicht an der Master-Wahl teil. Nützlich, um schwere Abfragelasten von Daten- oder Master-Knoten abzulasten.
    yaml node.roles: [ ] # Keine spezifischen Rollen impliziert standardmäßig nur koordinierend, falls nicht master/data

Best Practice: Weisen Sie in der Produktion Knoten spezifischen Rollen zu (z. B. trennen Sie Master-Knoten von Datenknoten), um eine bessere Fehlertoleranz und Leistung zu erzielen. Bei kleineren Setups können Knoten kombinierte Rollen haben.

3. Netzwerkeinstellungen (network.host, http.port, transport.port)

Diese Einstellungen steuern, wie Ihre Elasticsearch-Knoten kommunizieren.

  • network.host: Die IP-Adresse oder der Hostname, an den der Knoten gebunden wird. Für Multi-Node-Cluster legen Sie hier eine IP-Adresse fest, die von anderen Knoten erreicht werden kann. Die Verwendung von 0.0.0.0 bindet an alle verfügbaren Netzwerkschnittstellen.
    yaml network.host: 192.168.1.100 # oder network.host: _site_ # oder network.host: 0.0.0.0
  • http.port: Der Port für die HTTP REST API (Standard: 9200).
    yaml http.port: 9200
  • transport.port: Der Port für die Knoten-zu-Knoten-Kommunikation (Standard: 9300).
    yaml transport.port: 9300

Warnung: Achten Sie auf Firewall-Regeln, um sicherzustellen, dass Knoten über den transport.port kommunizieren können.

4. Discovery-Einstellungen (discovery.seed_hosts, cluster.initial_master_nodes)

Diese Einstellungen sind entscheidend dafür, dass Knoten den Cluster finden und ihm beitreten können.

  • discovery.seed_hosts: Eine Liste von IP-Adressen oder Hostnamen anderer Knoten im Cluster, mit denen neue Knoten sich verbinden können, um den Cluster zu entdecken.
    ```yaml
    discovery.seed_hosts:
    • "host1:9300"
    • "host2:9300"
    • "192.168.1.101:9300"
      ```
  • cluster.initial_master_nodes: Eine Liste von Knotennamen, die berechtigt sind, der initiale Master-Knoten zu werden, wenn der Cluster zum ersten Mal gestartet wird. Dies ist für das Bootstrapping eines Clusters unerlässlich. Sobald der Cluster läuft, werden diese Einstellungen für neue Knoteneintritte weniger wichtig, sind aber für Cluster-Neustarts weiterhin relevant.
    ```yaml
    cluster.initial_master_nodes:
    • "node-1"
    • "node-2"
    • "node-3"
      ```

Tipp: In Cloud-Umgebungen oder dynamischen Netzwerken sollten Sie Dienste wie DNS oder Discovery-Mechanismen des Cloud-Anbieters in Betracht ziehen.

Konfiguration eines Multi-Node-Clusters

Um einen Multi-Node-Cluster einzurichten, konfigurieren Sie die elasticsearch.yml-Datei jedes Knotens. Stellen Sie sicher, dass:

  1. cluster.name auf allen Knoten identisch ist.
  2. Jeder Knoten einen eindeutigen node.name hat (z. B. node-1, node-2).
  3. network.host auf eine von anderen Knoten erreichbare IP-Adresse eingestellt ist.
  4. discovery.seed_hosts die Adressen von mindestens einem Quorum master-fähiger Knoten auflistet.
  5. cluster.initial_master_nodes die Namen aller Knoten enthält, die für den initialen Bootstrap als master-fähig festgelegt wurden.

Beispiel für node-1:

cluster.name: my-production-cluster
node.name: node-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:
  - "node-1"
  - "node-2"
  - "node-3"

Beispiel für node-2 (ähnlich, mit node.name: node-2):

cluster.name: my-production-cluster
node.name: node-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:
  - "node-1"
  - "node-2"
  - "node-3"

5. Heap-Größe (jvm.options)

Elasticsearch verbraucht eine erhebliche Menge an Speicher. Die Größe des Java Virtual Machine (JVM) Heaps wird in der Datei jvm.options (normalerweise im Verzeichnis config/) konfiguriert. Es wird empfohlen, die minimale und maximale Heap-Größe auf denselben Wert einzustellen, um Leistungsprobleme durch Heap-Größenänderungen zu vermeiden.

  • Best Practice: Legen Sie die Heap-Größe auf nicht mehr als 50 % des verfügbaren RAM Ihres Systems fest und überschreiten Sie aufgrund der Einschränkungen durch komprimierte gewöhnliche Objektzeiger (oops) niemals 30-32 GB.

Beispiel (jvm.options):

-Xms4g
-Xmx4g

Dies setzt sowohl die initiale als auch die maximale Heap-Größe auf 4 Gigabyte.

6. Shard-Zuweisung und Replikation (cluster.routing.*)

Diese Einstellungen steuern, wie Shards über Knoten verteilt und repliziert werden.

  • cluster.routing.allocation.disk.watermark.low, high, flood_stage:** Schwellenwerte, um eine Shard-Zuweisung auf Festplatten zu verhindern, die keinen Speicherplatz mehr haben.
  • cluster.routing.allocation.enable: Steuert die Shard-Zuweisung (z. B. all, primaries, new_primaries, none).

Beispiel:

cluster.routing.allocation.disk.watermark.low: "85%"
cluster.routing.allocation.disk.watermark.high: "90%"
cluster.routing.allocation.disk.watermark.flood_stage: "95%"

Überprüfung des Cluster-Zustands

Sobald die Knoten gestartet sind, können Sie den Zustand und die Status des Clusters mithilfe der Cluster Health API überprüfen.

curl -X GET "localhost:9200/_cluster/health?pretty"

Wichtige Ausgabefelder:

  • status: green (alle Shards zugewiesen), yellow (einige Replikas nicht zugewiesen), red (einige primäre Shards nicht zugewiesen).
  • number_of_nodes: Die Gesamtzahl der Knoten im Cluster.
  • number_of_data_nodes: Die Anzahl der Knoten, die als Datenknoten ausgewiesen sind.
  • active_shards, relocating_shards, initializing_shards, unassigned_shards.

Tipp: Streben Sie einen green Status an. Ein yellow Status bedeutet, dass Ihre Daten zwar sicher sind (primäre Shards sind zugewiesen), Ihnen aber möglicherweise ausreichende Replikas für Hochverfügbarkeit fehlen. Ein red Status bedeutet, dass Daten gefährdet sind und sofortige Aufmerksamkeit erfordern.

Nächste Schritte

Nachdem Sie Ihren Elasticsearch-Cluster erfolgreich eingerichtet haben, fahren Sie in der Regel mit folgenden Schritten fort:

  • Indexerstellung: Definieren Sie, wie Ihre Daten gespeichert und organisiert werden sollen.
  • Mapping: Definieren Sie das Schema für Ihre Dokumente und legen Sie die Datentypen für Felder fest.
  • Analyzer: Konfigurieren Sie die Textanalyse für eine effektive Volltextsuche.
  • Sicherheit: Implementieren Sie Authentifizierung und Autorisierung.

Diese Anleitung bietet die wesentliche Grundlage für einen stabilen und performanten Elasticsearch-Cluster. Kontinuierliche Überwachung und Abstimmung auf der Grundlage Ihrer spezifischen Workload sind der Schlüssel zum langfristigen Erfolg.