Als erfahrenes DevOps-Beratungsunternehmen wissen wir um die Bedeutung von Elasticsearch für die Bereitstellung unternehmenskritischer Anwendungen und Dienste. Mit Elasticsearch, einer verteilten Open-Source-Such- und Analyse-Engine, können Benutzer große Datenmengen in Echtzeit speichern, durchsuchen und analysieren. Elasticsearch baut auf der Lucene-Suchmaschinenbibliothek auf und ist skalierbar, robust und hochverfügbar.
Mit zunehmender Abhängigkeit von Elasticsearch ist es jedoch unerlässlich, robuste Sicherungs- und Wiederherstellungsprozeduren einzurichten. In einem DevOps-Kontext, in dem kontinuierliche Bereitstellung und kontinuierlicher Einsatz zentrale Prinzipien sind, sind zuverlässige Backups von Elasticsearch-Daten entscheidend für eine effiziente Wiederherstellung bei Datenverlust oder Systemausfällen. Dies hilft, Ausfallzeiten und Datenverluste zu minimieren und trägt gleichzeitig zu einer schnelleren Wiederherstellung und verbesserten Geschäftskontinuität bei.
In der heutigen Anleitung wird gezeigt, wie Sie Elasticsearch mit AWS S3 als Snapshot-Repository sichern und wiederherstellen können. Allerdings ist bei Elasticsearch die S3-Option nicht standardmäßig aktiviert. Um diese Funktion zu ermöglichen, müssen wir das S3-Plugin direkt in das Elasticsearch-Docker-Image installieren und es dann in Kubernetes mithilfe des offiziellen Elasticsearch-Helmdiagramms bereitstellen.
Voraussetzungen
Bevor wir die Dockerdatei erstellen, müssen wir einige Voraussetzungen erfüllen. Wir benötigen einen AWS IAM-Benutzer mit Zugriffsschlüsseln, die als Umgebungsvariablen in das Docker-Image injiziert werden können. Es ist wichtig, die Best Practices für IAM zu befolgen und die Berechtigungen mit den geringsten Rechten festzulegen, indem Sie nur die S3-Berechtigungen für das S3-Bucket zuweisen, in dem Sie die Snapshots speichern möchten. Außerdem müssen Sie einen S3-Bucket einrichten.
Dies ist ein Beispiel dafür, wie unser Dockerfile aussehen wird:
# Set the Elasticsearch version as a build argument
ARG elasticsearch_version
# Use the official Elasticsearch Docker image as the base
FROM docker.elastic.co/elasticsearch/elasticsearch:${elasticsearch_version}
# Define the AWS access key ID and secret access key as build arguments
ARG ENV_VAR_AWS_ACCESS_KEY_ID
ARG ENV_VAR_AWS_SECRET_ACCESS_KEY
# Set the AWS access key ID and secret access key as environment variables
ENV AWS_ACCESS_KEY_ID=${ENV_VAR_AWS_ACCESS_KEY_ID}
ENV AWS_SECRET_ACCESS_KEY=${ENV_VAR_AWS_SECRET_ACCESS_KEY}
# Install the S3 repository plugin and create a new Elasticsearch keystore
RUN bin/elasticsearch-plugin install --batch repository-s3
RUN /usr/share/elasticsearch/bin/elasticsearch-keystore create
# Add the AWS access key ID and secret access key to the Elasticsearch keystore
RUN echo $AWS_ACCESS_KEY_ID | /usr/share/elasticsearch/bin/elasticsearch-keystore add --stdin s3.client.default.access_key
RUN echo $AWS_SECRET_ACCESS_KEY | /usr/share/elasticsearch/bin/elasticsearch-keystore add --stdin s3.client.default.secret_key
Dieses Dockerfile setzt die Elasticsearch-Version als Build-Argument und verwendet das offizielle Elasticsearch-Docker-Image als Basis. Es definiert dann die AWS-Zugangsschlüssel-ID und den geheimen Zugangsschlüssel als Build-Argumente und setzt sie als Umgebungsvariablen. Das S3-Repository-Plugin wird installiert und ein neuer Elasticsearch-Keystore wird erstellt. Schließlich werden die AWS-Zugangsschlüssel-ID und der geheime Zugangsschlüssel zum Elasticsearch-Keystore hinzugefügt.
Um das Docker-Image aus der Dockerdatei zu erstellen, führen Sie den folgenden Befehl aus:
docker build -t elasticsearch:7.17.3 \
--build-arg ENV_VAR_AWS_ACCESS_KEY_ID={Your access key} \
--build-arg ENV_VAR_AWS_SECRET_ACCESS_KEY={Your secret access key} \
--build-arg elasticsearch_version=7.17.3 \
.
Dieser Befehl erstellt das Docker-Image mit dem Tag elasticsearch:7.17.3 unter Verwendung der build-Argumente
ENV_VAR_AWS_ACCESS_KEY_ID und ENV_VAR_AWS_SECRET_ACCESS_KEY, die Ihren AWS-Zugangsschlüssel bzw. geheimen Zugangsschlüssel enthalten. Die Elasticsearch-Version wird ebenfalls als Build-Argument angegeben und auf 7.17.3 gesetzt. Das "." am Ende des Befehls gibt den Build-Kontext an, der das aktuelle Verzeichnis ist.
Wenn Sie Elasticsearch und Kibana nicht in Kubernetes bereitgestellt haben, können Sie die offiziellen Helm-Diagramme von https://artifacthub.io verwenden, um sie bereitzustellen. In der Datei values.yaml für Elasticsearch müssen Sie das Docker-Image angeben, das Sie erstellt haben. Wenn Sie das Image lokal erstellt haben, müssen Sie es z. B. in ein AWS ECR-Repository verschieben, damit es von dort heruntergeladen werden kann, wenn Sie das Helm-Diagramm bereitstellen.
Wir empfehlen dringend die Bereitstellung von Kibana, da es eine benutzerfreundliche Oberfläche bietet, die für die Verwaltung von Elasticsearch sehr hilfreich ist. Mit Kibana können Sie Daten in Elasticsearch einfach visualisieren und analysieren, Dashboards erstellen und freigeben sowie verschiedene Verwaltungsaufgaben durchführen.
Nachdem alles ordnungsgemäß eingerichtet ist, können wir uns mit Kibana-Verwaltung.

Um mit der Erstellung von Snapshots zu beginnen, müssen wir zunächst das S3-Snapshot-Repository einrichten. Dazu müssen wir einen Repository-Namen zuweisen und dann die folgenden Attribute auf der nächsten Seite angeben:
- Bucket-Name: elasticsearch-snapshots-s3-integration
- Basispfad: Hier können Sie Unterordner angeben, wenn Sie mehrere Elasticsearch-Cluster haben und einen zentralen Speicherort für alle Snapshots haben möchten.

- Es gibt noch weitere Attribute, die Sie je nach Ihrem Arbeitsablauf anpassen können. Ich werde sie auslassen.
- Klicken Sie auf Registrieren
Nachdem Sie das S3-Repository eingerichtet haben, müssen Sie überprüfen, ob es eine Verbindung zu S3 hat. Dies können Sie tun, indem Sie auf das Snapshot-Repository klicken und es verifizieren.

Backup-Verfahren
Nachdem wir das S3-Repository korrekt eingerichtet haben, besteht der nächste Schritt darin, eine automatische Methode zur Erstellung von Snapshots einzurichten. Dies kann durch die Verwendung von Policies erreicht werden.


Wir müssen den Namen der Richtlinie, den Namen des Snapshots, das Repository und den Zeitplan festlegen. Sie können sogar Ihren eigenen Cron-Ausdruck erstellen.

Sie können alle Indizes auswählen, einschließlich der System- und normalen Indizes, und Sie können nur die Indizes auswählen, die Sie möchten.

Wählen Sie die Snapshot-Aufbewahrung für den Ablauf und die zu bewahrenden Snapshots.

Endgültige Ansicht der Richtlinie, dann können Sie überprüfen, ob die Snapshots erstellt wurden.
Betrieb wiederherstellen
Wenn wir uns nun in einer Situation befinden, in der wir Daten schnell aus dem letzten möglichen Snapshot wiederherstellen müssen, sollten wir diese Schritte befolgen:
- Im Abschnitt Snapshots finden Sie die neuesten Snapshots, die von Ihrer Richtlinie erstellt wurden:

2. Klicken Sie darauf und Sie sehen die folgenden Optionen:

3. Sie haben die Möglichkeit zu wählen, welche Indizes wiederhergestellt werden sollen. Sie können entweder alles vollständig wiederherstellen oder bestimmte Indizes auswählen, die wiederhergestellt werden sollen. Beachten Sie jedoch, dass die Indizes, die Sie wiederherstellen möchten, geschlossen sein müssen. Denn während des Wiederherstellungsprozesses können keine Such- oder Indexoperationen durchgeführt werden.
4. Es gibt eine eingebaute Konsole, über die verschiedene Befehle ausgeführt werden können:

- GET /_cat/indices -> Liste aller verfügbaren Indizes
- POST /my-index-000001/_close - schließt die Indizes, die wiederhergestellt werden sollen
5. Nach erfolgreicher Wiederherstellung werden sie automatisch geöffnet.
In Elasticsearch gilt dieser Anwendungsfall nur, wenn Sie eine Wiederherstellungsprozedur auf demselben Cluster durchführen. Wenn Sie Indizes auf einem anderen Cluster wiederherstellen möchten, müssen Sie den Schließvorgang nicht durchführen, da die Indizes dort nicht vorhanden sind.
Einer der Vorteile der Verwendung eines S3-Repositorys ist außerdem, dass die verfügbaren Snapshots automatisch aufgefüllt werden, wenn Sie es in einem anderen Elasticsearch-Cluster registrieren. Dies macht es einfach, einen Snapshot auf dem neuen Cluster schnell wiederherzustellen.
Bei der Erkundung der Sicherungs- und Wiederherstellungsvorgänge von Elasticsearch haben wir gelernt, dass diese Vorgänge manuell durchgeführt werden können. Für fortgeschrittene Anwendungsfälle, bei denen eine schnelle Wiederherstellung kritisch ist, wird jedoch dringend empfohlen, den Sicherungs- und Wiederherstellungsprozess zu automatisieren.
Schlussfolgerung
Zusammenfassend lässt sich sagen, dass eine solide Sicherungs- und Wiederherstellungsstrategie für Ihre Elasticsearch-Daten für die Aufrechterhaltung der Betriebszeit, der Datenintegrität und der Geschäftskontinuität unerlässlich ist. Wir bei ITGix wissen, wie wichtig zuverlässige Elasticsearch-Wiederherstellungsverfahren sind, und unser DevOps-Beratungsunternehmen hilft Ihnen bei der Entwicklung, Implementierung und Wartung der richtigen Lösungen für die Anforderungen Ihres Unternehmens.

