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 von0.0.0.0bindet an alle verfügbaren Netzwerkschnittstellen.
yaml network.host: 192.168.1.100 # oder network.host: _site_ # oder network.host: 0.0.0.0http.port: Der Port für die HTTP REST API (Standard: 9200).
yaml http.port: 9200transport.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:
cluster.nameauf allen Knoten identisch ist.- Jeder Knoten einen eindeutigen
node.namehat (z. B.node-1,node-2). network.hostauf eine von anderen Knoten erreichbare IP-Adresse eingestellt ist.discovery.seed_hostsdie Adressen von mindestens einem Quorum master-fähiger Knoten auflistet.cluster.initial_master_nodesdie 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.