Neu bei Elasticsearch? Nehmen Sie an unserem Webinar „Erste Schritte mit Elasticsearch“ teil. Sie können jetzt auch eine kostenlose Cloud-Testversion starten oder Elastic auf Ihrem Rechner testen.
Wenn Sie einen Elasticsearch-Cluster aktualisieren möchten, ist es manchmal einfacher, einen neuen, separaten Cluster zu erstellen und Daten vom alten Cluster auf den neuen zu übertragen. Dies bietet den Benutzern den Vorteil, dass sie alle ihre Daten und Konfigurationen auf dem neuen Cluster mit allen ihren Anwendungen testen können, ohne dass das Risiko von Ausfallzeiten oder Datenverlust besteht.
Die Nachteile dieses Ansatzes bestehen darin, dass er eine gewisse Duplizierung der Hardware erfordert und bei dem Versuch, alle Daten reibungslos zu übertragen und zu synchronisieren, zu Schwierigkeiten führen kann.
Ein ähnliches Verfahren kann auch erforderlich sein, wenn Sie Anwendungen von einem Rechenzentrum in ein anderes migrieren müssen.
In diesem Artikel besprechen und beschreiben wir drei Möglichkeiten zur Datenübertragung zwischen Elasticsearch-Clustern.
Wie migriere ich Daten zwischen Elasticsearch-Clustern?
Es gibt drei Möglichkeiten, Daten zwischen Elasticsearch-Clustern zu übertragen:
- Neuindizierung von einem Remote-Cluster
- Übertragen von Daten mithilfe von Snapshots
- Datenübertragung mit Logstash
Die Verwendung von Snapshots ist normalerweise die schnellste und zuverlässigste Methode zur Datenübertragung. Bedenken Sie jedoch, dass Sie einen Snapshot nur auf einem Cluster mit gleicher oder höherer Version wiederherstellen können und niemals mit einem Unterschied von mehr als einer Hauptversion. Das bedeutet, dass Sie einen 6.x-Snapshot auf einem 7.x-Cluster wiederherstellen können, aber nicht auf einem 8.x-Cluster.
Wenn Sie um mehr als eine Hauptversion erhöhen müssen, müssen Sie neu indizieren oder Logstash verwenden.
Sehen wir uns nun jede der drei Optionen zum Übertragen von Daten zwischen Elasticsearch-Clustern im Detail an.
1. Neuindizierung von Daten aus einem Remote-Cluster
Bevor Sie mit der Neuindizierung beginnen, denken Sie daran, dass Sie für alle Indizes im neuen Cluster entsprechende Zuordnungen einrichten müssen. Dazu müssen Sie die Indizes entweder direkt mit den entsprechenden Zuordnungen erstellen oder Indexvorlagen verwenden.
Neuindizierung von Remote – Konfiguration erforderlich
Um eine Neuindizierung aus der Ferne durchzuführen, sollten Sie die folgende Konfiguration zur Datei elasticseearch.yml für den Cluster hinzufügen, der die Daten empfängt. In Linux-Systemen befindet sich diese Datei normalerweise hier: /etc/elasticsearch/elasticsearch.yml. Die hinzuzufügende Konfiguration lautet wie folgt:
Wenn Sie SSL verwenden, sollten Sie jedem Knoten das CA-Zertifikat hinzufügen und Folgendes in den Befehl für jeden Knoten in elasticsearch.yml aufnehmen:
Alternativ können Sie allen Elasticsearch-Knoten die folgende Zeile hinzufügen, um die SSL-Verifizierung zu deaktivieren. Dieser Ansatz ist jedoch weniger empfehlenswert, da er nicht so sicher ist wie die vorherige Option:
Sie müssen diese Änderungen auf jedem Knoten vornehmen und einen rollierenden Neustart durchführen. Weitere Informationen hierzu finden Sie in unserem Handbuch.
Befehl zur Neuindizierung
Nachdem Sie den Remote-Host in der Datei elasticsearch.yml definiert und ggf. die SSL-Zertifikate hinzugefügt haben, können Sie mit dem folgenden Befehl mit der Neuindizierung der Daten beginnen:
Dabei können Timeout-Fehler auftreten. Daher kann es sinnvoll sein, großzügige Werte für Timeouts festzulegen, anstatt sich auf Standardwerte zu verlassen.
Sehen wir uns nun einige andere häufige Fehler an, die bei der Neuindizierung aus der Ferne auftreten können.
Häufige Fehler bei der Neuindizierung von Remote
1. Neuindizierung nicht auf der Whitelist
Wenn dieser Fehler auftritt, bedeutet dies, dass Sie die IP-Adresse des Remote-Hosts oder den DNS-Knotennamen in Elasticsearch nicht wie oben beschrieben definiert haben oder vergessen haben, die Elasticsearch-Dienste neu zu starten.
Um dies für den Elasticsearch-Cluster zu beheben, müssen Sie den Remote-Host zu allen Elasticsearch-Knoten hinzufügen und die Elasticsearch-Dienste neu starten.
2. SSL-Handshake-Ausnahme
Dieser Fehler bedeutet, dass Sie vergessen haben, reindex.ssl.certificate_authorities wie oben beschrieben zu elasticsearch.yml hinzuzufügen. So fügen Sie es hinzu:
2. Daten mit Snapshots übertragen
Denken Sie daran, dass Sie, wie oben erwähnt, einen Snapshot nur auf einem Cluster einer gleichen oder höheren Version wiederherstellen können und niemals mit einem Unterschied von mehr als einer Hauptversion
Wenn Sie um mehr als eine Hauptversion erhöhen müssen, müssen Sie neu indizieren oder Logstash verwenden.
Für die Datenübertragung per Snapshot sind folgende Schritte erforderlich:
Schritt 1. Hinzufügen des Repository-Plugins zum ersten Elasticsearch-Cluster – Um Daten über Snapshots zwischen Clustern zu übertragen, müssen Sie sicherstellen, dass sowohl vom neuen als auch vom alten Cluster auf das Repository zugegriffen werden kann. Cloud-Speicher-Repositories wie AWS, Google und Azure sind hierfür grundsätzlich ideal. Um Schnappschüsse zu machen, lesen Sie bitte unsere Anleitung und befolgen Sie die darin beschriebenen Schritte.
Schritt 2. Starten Sie den Elasticsearch-Dienst neu (Rolling Restart).
Schritt 3. Erstellen Sie ein Repository für den ersten Elasticsearch-Cluster.
Schritt 4: Fügen Sie das Repository-Plugin zum zweiten Elasticsearch-Cluster hinzu.
Schritt 5 – Repository als schreibgeschützt zum zweiten Elasticsearch-Cluster hinzufügen – Sie müssen ein Repository hinzufügen, indem Sie dieselben Schritte wiederholen, die Sie zum Erstellen des ersten Elasticsearch-Clusters ausgeführt haben.
Wichtiger Hinweis: Wenn Sie den zweiten Elasticsearch-Cluster mit demselben AWS S3-Repository verbinden, sollten Sie das Repository als schreibgeschütztes Repository definieren:
Dies ist wichtig, da Sie das Risiko einer Vermischung von Elasticsearch-Versionen im selben Snapshot-Repository vermeiden möchten.
Schritt 6 – Wiederherstellen der Daten im zweiten Elasticsearch-Cluster – Nachdem Sie die oben genannten Schritte ausgeführt haben, können Sie die Daten wiederherstellen und in den neuen Cluster übertragen. Befolgen Sie die in diesem Artikel beschriebenen Schritte, um Daten im neuen Cluster wiederherzustellen.
3. Datenübertragung mit Logstash
Bevor Sie mit der Datenübertragung mit Logstash beginnen, denken Sie daran, dass Sie für alle Indizes im neuen Cluster entsprechende Zuordnungen einrichten müssen. Dazu müssen Sie die Indizes entweder direkt erstellen oder Indexvorlagen verwenden.
Um Daten zwischen zwei Elasticsearch-Clustern zu übertragen, können Sie einen temporären Logstash-Server einrichten und ihn zum Übertragen Ihrer Daten zwischen zwei Clustern verwenden. Für kleine Cluster sollte eine Instanz mit 2 GB RAM ausreichen. Für größere Cluster können Sie Vierkern-CPUs mit 8 GB RAM verwenden.
Eine Anleitung zur Installation von Logstash finden Sie hier.
Logstash-Konfiguration zum Übertragen von Daten von einem Cluster zu einem anderen
Eine grundlegende Konfiguration zum Kopieren eines einzelnen Indexes von Cluster A nach Cluster B ist:
Für eine sichere Elasticsearch können Sie die folgende Konfiguration verwenden:
Index-Metadaten
Die obigen Befehle schreiben in einen einzelnen benannten Index. Wenn Sie mehrere Indizes übertragen und die Indexnamen beibehalten möchten, müssen Sie der Logstash-Ausgabe die folgende Zeile hinzufügen:
Wenn Sie die ursprüngliche ID des Dokuments beibehalten möchten, müssen Sie außerdem Folgendes hinzufügen:
Bedenken Sie, dass die Datenübertragung durch das Festlegen der Dokument-ID erheblich langsamer wird. Behalten Sie die Original-ID daher nur bei, wenn es unbedingt erforderlich ist.
Synchronisierung von Updates
Alle oben beschriebenen Methoden dauern relativ lange und Sie stellen möglicherweise fest, dass Daten im ursprünglichen Cluster aktualisiert wurden, während Sie auf den Abschluss des Vorgangs gewartet haben.
Es gibt verschiedene Strategien, um die Synchronisierung aller Aktualisierungen zu ermöglichen, die während des Datenübertragungsprozesses aufgetreten sind. Sie sollten sich vor dem Starten dieses Prozesses einige Gedanken über diese Probleme machen. Insbesondere müssen Sie über Folgendes nachdenken:
- Über welche Methode können Sie Daten identifizieren, die seit Beginn des Datenübertragungsprozesses aktualisiert/hinzugefügt wurden (z. B. ein Feld „last_update_time“ in den Daten)?
- Mit welcher Methode können Sie die letzten Daten übertragen?
- Besteht die Gefahr, dass Datensätze dupliziert werden? Normalerweise ist dies der Fall, es sei denn, die von Ihnen verwendete Methode setzt die Dokument-ID während der Neuindizierung auf einen bekannten Wert.
Nachfolgend werden die verschiedenen Methoden zum Aktivieren der Synchronisierung von Updates beschrieben.
1. Einsatz von Warteschlangensystemen
Einige Aufnahme-/Aktualisierungssysteme verwenden Warteschlangen, die es Ihnen ermöglichen, in den letzten x Tagen empfangene Datenänderungen „wiederzugeben“. Dies kann eine Möglichkeit bieten, alle durchgeführten Änderungen zu synchronisieren.
2. Neuindizierung von Remote
Wiederholen Sie den Neuindizierungsprozess für alle Elemente, bei denen „last_update_time“ > x Tage her ist. Sie können dies tun, indem Sie der Neuindizierungsanforderung einen „Abfrage“-Parameter hinzufügen.
3. Logstash
In der Logstash-Eingabe können Sie eine Abfrage hinzufügen, um alle Elemente zu filtern, bei denen „last_update_time“ > x Tage her ist. Dieser Vorgang führt jedoch zu Duplikaten in Nicht-Zeitreihendaten, sofern Sie die Dokument-ID nicht festgelegt haben.
4. Schnappschüsse
Es ist nicht möglich, nur einen Teil eines Index wiederherzustellen. Sie müssten daher eine der anderen oben beschriebenen Datenübertragungsmethoden (oder ein Skript) verwenden, um alle Änderungen zu aktualisieren, die seit der Durchführung des Datenübertragungsprozesses stattgefunden haben.
Allerdings ist die Wiederherstellung von Snapshots ein viel schnellerer Prozess als die Neuindizierung/Logstash. Daher ist es möglicherweise möglich, Aktualisierungen für einen kurzen Zeitraum auszusetzen, während Snapshots übertragen werden, um das Problem insgesamt zu vermeiden.




