Schritt-für-Schritt-Anleitung zur Konfiguration eines grundlegenden Drei-Knoten-Clusters

Erfahren Sie, wie Sie schnell ein ausfallsicheres, grundlegendes Drei-Knoten-Elasticsearch-Cluster einrichten. Dieses Schritt-für-Schritt-Tutorial behandelt die wesentliche Konfiguration in `elasticsearch.yml`, das Bootstrapping der Cluster-Erkennung mithilfe von `cluster.initial_master_nodes`, das Starten der Dienste sowie die Überprüfung des Zustands und der Shard-Replikation über die Knoten hinweg mithilfe praktischer cURL-Befehle.

47 Aufrufe

Schritt-für-Schritt-Anleitung zur Konfiguration eines grundlegenden Drei-Knoten-Clusters

Die Einrichtung eines robusten Elasticsearch-Clusters ist grundlegend für hohe Verfügbarkeit und horizontale Skalierbarkeit Ihrer Such- und Analyseinfrastruktur. Ein Drei-Knoten-Cluster bietet einen hervorragenden Ausgangspunkt und bietet die Redundanz, die notwendig ist, um den Ausfall eines einzelnen Knotens ohne Serviceunterbrechung zu verkraften. Diese umfassende Anleitung führt Sie durch den Prozess der Installation, Konfiguration und Überprüfung eines grundlegenden Drei-Knoten-Elasticsearch-Clusters, der sich ideal für Entwicklungsumgebungen oder kleine Produktionsumgebungen eignet.

Am Ende dieses Tutorials werden Sie über einen funktionierenden Cluster verfügen, in dem Daten sicher verteilt und repliziert werden können, indem die verteilten Kernfähigkeiten von Elasticsearch genutzt werden.


Voraussetzungen

Stellen Sie vor Beginn der Konfiguration sicher, dass die folgenden Voraussetzungen erfüllt sind:

  1. Drei separate Server/VMs: Jeder wird einen Knoten hosten. Für diese Anleitung gehen wir davon aus, dass Sie drei verschiedene Maschinen oder Docker-Container bereit haben.
  2. Java Development Kit (JDK): Elasticsearch erfordert ein kompatibles JDK, das auf allen Knoten installiert ist (z. B. JDK 17, abhängig von Ihrer Elasticsearch-Version).
  3. Netzwerkkonnektivität: Stellen Sie sicher, dass alle drei Knoten über die erforderlichen Ports miteinander kommunizieren können (Standard-HTTP-Port: 9200, Standard-Transport-Port: 9300).
  4. Identische Elasticsearch-Installation: Laden Sie dieselbe Version von Elasticsearch herunter und entpacken Sie sie auf allen drei Knoten.

Schritt 1: Konfiguration der elasticsearch.yml jedes Knotens

Die Konfigurationsdatei elasticsearch.yml im Verzeichnis config/ Ihrer Elasticsearch-Installation ist entscheidend für die Definition des Verhaltens jedes Knotens innerhalb des Clusters. Sie müssen knotenspezifische Einstellungen anpassen.

Wir werden drei Rollen implizit definieren: ein Master-fähiger Knoten und drei Daten-fähige Knoten. Für einen Drei-Knoten-Cluster ist es üblich, allen Knoten zu erlauben, Master-, Daten- und Ingest-Rollen zu übernehmen.

Gemeinsame Einstellungen für alle Knoten

Stellen Sie sicher, dass diese Einstellungen in allen drei Konfigurationsdateien identisch sind:

# Cluster-Name: Muss auf allen Knoten gleich sein
cluster.name: my-three-node-cluster

# Discovery-Einstellungen (entscheidend für den ersten Beitritt)
# Verwenden Sie eine Seed-Liste bekannter Knoten, um die Erkennung zu initialisieren
discovery.seed_hosts: ["node1_ip:9300", "node2_ip:9300", "node3_ip:9300"]

# Erforderlich für Quorum (N/2 + 1). Für 3 Knoten benötigen wir 2 Stimmen.
cluster.initial_master_nodes: ["node1_name", "node2_name", "node3_name"]

# Netzwerkeinstellungen (stellen Sie die Bindung an die richtige IP sicher)
network.host: 0.0.0.0 # Oder die spezifische private IP des Hosts

# HTTP-Port (Externer Zugriff)
http.port: 9200

# Transport-Port (Interne Cluster-Kommunikation)
transport.port: 9300

Eindeutige Einstellungen pro Knoten

Jeder Knoten benötigt einen eindeutigen node.name und möglicherweise einen eindeutigen path.data, wenn er auf derselben Maschine läuft oder Speicher teilt.

Konfiguration Knoten 1 (node1_ip)

# Eindeutiger Identifikator für Knoten 1
node.name: node-1

# Wenn Pfade unterschiedlich sind
# path.data: /var/lib/elasticsearch/data_node1

Konfiguration Knoten 2 (node2_ip)

# Eindeutiger Identifikator für Knoten 2
node.name: node-2

Konfiguration Knoten 3 (node3_ip)

# Eindeutiger Identifikator für Knoten 3
node.name: node-3

Wichtiger Hinweis zu cluster.initial_master_nodes: Diese Einstellung wird nur verwendet, wenn der Cluster zum aller ersten Mal gestartet wird. Sobald der Cluster gebildet ist, verwaltet Elasticsearch die Master-Wahl intern. Wenn Sie jemals einen vollständig ausgefallenen Cluster neu starten müssen, stellen Sie sicher, dass diese Namen mit der ursprünglichen Konfiguration übereinstimmen.


Schritt 2: Rollen einrichten (Optional, aber empfohlen)

Während die Standardkonfiguration Knoten erlaubt, alle Rollen zu übernehmen (Master, Daten, Ingest, Koordination), werden in größeren Umgebungen die Rollen getrennt. Für ein robustes Drei-Knoten-Setup stellen wir sicher, dass alle Knoten für die Master-Rolle in Frage kommen.

Fügen Sie diese Rollenkonfiguration zu allen drei elasticsearch.yml-Dateien hinzu:

# Aktivieren Sie alle Standardrollen auf allen Knoten für dieses anfängliche Setup
node.roles: [ master, data, ingest, remote_cluster_client ]

Quorum für Ausfallsicherheit handhaben

Mit drei Knoten kann der Cluster den Verlust eines Knotens tolerieren und dabei das Quorum aufrechterhalten (2 von 3 Knoten bleiben erhalten). Dies wird durch die in Schritt 1 angegebene Liste cluster.initial_master_nodes verwaltet.


Schritt 3: Starten der Cluster-Knoten

Starten Sie Elasticsearch sequenziell auf jedem Knoten. Es ist im Allgemeinen am sichersten, zuerst die Knoten zu starten, die in cluster.initial_master_nodes zuerst aufgeführt sind, obwohl modernes Elasticsearch unsortierte Starts gut bewältigt.

Auf Knoten 1, Knoten 2 und Knoten 3:

Navigieren Sie zu Ihrem Elasticsearch-Installationsverzeichnis und führen Sie aus:

# Für die Ausführung im Vordergrund (nützlich für Debugging)
bin/elasticsearch

# Für die Ausführung im Hintergrund (Produktion empfohlen)
bin/elasticsearch -d

Überwachen Sie die Protokolle (logs/elasticsearch.log) auf jedem Knoten auf erfolgreiche Startmeldungen, insbesondere auf solche, die darauf hinweisen, dass sie erfolgreich dem Cluster beigetreten sind.


Schritt 4: Überprüfung des Cluster-Status

Sobald alle Knoten gestartet sind, verwenden Sie die _cat/health-API, die über den HTTP-Port jedes Knotens (Standard 9200) erreichbar ist, um den Cluster-Status zu bestätigen.

Rufen Sie dies von einem Rechner aus auf, der die Knoten erreichen kann (z. B. über curl):

Gesundheit prüfen:

curl -X GET "http://node1_ip:9200/_cat/health?v"

Erwarteter Ausgabe-Snippet:

epoch timestamp cluster status node.total node.data shards pri relo init unassigned unpersisted
1701331200 12:00:00 my-three-node-cluster green 3 3 0 0 0 0 0 0

Wenn status green und node.total 3 ist, ist Ihr Cluster korrekt hochgefahren und läuft.

Überprüfung der Knotenzugehörigkeit

Um zu bestätigen, dass sich alle Knoten gegenseitig sehen, überprüfen Sie die Knotenliste:

curl -X GET "http://node1_ip:9200/_cat/nodes?v"

Sie sollten drei verschiedene Einträge sehen, die node-1, node-2 und node-3 entsprechen, wobei jeweils ihre IP-Adressen und Rollen (m für Master-fähig, d für Daten) angezeigt werden.


Schritt 5: Erstellen eines Testindex mit Replikation

Um die Fähigkeit des Clusters zur Datenverteilung und Replikation zu überprüfen, müssen wir einen Index erstellen, der mindestens eine Replik angibt.

In einem Drei-Knoten-Cluster stellt die Einstellung von number_of_replicas auf 1 sicher, dass jeder Primär-Shard eine Kopie (Replik) auf einem anderen Knoten verteilt hat, was eine sofortige Fehlertoleranz bietet.

Befehl zum Erstellen des Index:

```bash
curl -X PUT "http://node1_ip:9200/test_data_index?pretty" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 3