Elastische Suche

Sichern und Wiederherstellen von Elasticsearch-Clustern mit Snapshots

Sichern und Wiederherstellen von Elasticsearch-Clustern mit Snapshots
Bei Elasticsearch dreht sich alles um Daten, und wie Sie wahrscheinlich bereits wissen, sind Daten wichtig – für Sie und Elasticsearch. Da Sie und Elasticsearch Daten lieben, können jedoch Datenfehler auftreten, die zu Datenverlusten führen.

Zum Schutz vor Datenverlust bietet Elasticsearch verschiedene Funktionen, mit denen Sie die Datenverfügbarkeit auch bei Datenfehlern sicherstellen können.

Einige der Möglichkeiten, die Elasticsearch verwendet, um Ihnen die Datenverfügbarkeit bereitzustellen, sind:

Dieses Tutorial zeigt Ihnen, wie Sie Cluster-Snapshots erstellen, die Ihnen helfen, bereit zu sein, falls ein irreversibler Datenfehler auftritt.

Lass uns anfangen.

Was ist ein Elasticsearch-Snapshot??

Wie bereits erwähnt, ist ein elastischer Snapshot eine Sicherungskopie eines laufenden Elasticsearch-Clusters. Dieser Snapshot kann einen ganzen Cluster oder bestimmte Indizes und Datenströme innerhalb eines bestimmten Clusters umfassen.

Wie Sie bald erfahren werden, verwaltet ein Repository-Plugin Elasticsearch-Snapshots. Diese Snapshots können an verschiedenen Speicherorten gespeichert werden, die vom Plugin definiert werden. Dazu gehören lokale Systeme und Remote-Systeme wie GCP Storage, Amazon EC2, Microsoft Azure und viele mehr.

So erstellen Sie ein Elasticsearch Snapshot-Repository

Bevor wir uns mit der Erstellung von Elasticsearch-Snapshots befassen, müssen wir ein Snapshot-Repository erstellen, da viele Dienste von Elasticsearch die Snapshot-API verwenden, um diese Aufgaben auszuführen.

Einige der Aufgaben, die von der Snapshot-API bearbeitet werden, sind:

Um ein Snapshot-Repository zu erstellen, verwenden wir den _snapshot API-Endpunkt gefolgt von dem Namen, den wir dem Snapshot-Repository zuweisen möchten. Betrachten Sie die folgende Anfrage, die ein Repository namens   backup_repore erstellt

PUT /_snapshot/backup_repo

"typ": "fs",
"die Einstellungen":
"location": "/home/root/backups",
"komprimieren": wahr

Hier ist ein cURL-Befehl für die obige Anfrage:

curl -XPUT "http://localhost:9200/_snapshot/backup_repo" -H 'Content-Type: application/json' -d'  "type": "fs",  "settings":     "location": "/ home/root/backups",    "compress": true  '

Um den Snapshot-Repository-Pfad zu übergeben, müssen Sie zuerst den Pfad des Systems oder das übergeordnete Verzeichnis zum Pfad hinzufügen.Repo-Eintrag in Elasticsearch.yml

Der Weg.Repo-Eintrag sollte ähnlich aussehen:

Pfad.Repository: [“/home/root/backups“]

Sie finden die Elasticsearch-Konfigurationsdatei unter  /etc/elasticsearch/elasticsearch.yml

HINWEIS: Nach dem Hinzufügen des Pfads.Repo müssen Sie möglicherweise Elasticsearch-Cluster neu starten. Zusätzlich werden die für path unterstützten Werte.Repository kann je nach Plattform, auf der Elasticsearch ausgeführt wird, stark variieren.

So zeigen Sie das Snapshot-Repository an

Um die erfolgreiche Erstellung des Snapshot-Repositorys zu bestätigen, verwenden Sie die GET-Anforderung mit dem Endpunkt _snapshot als:

GET /_snapshot/backup_repo

Sie können auch den folgenden cURL-Befehl verwenden:

curl -XGET "http://localhost:9200/_snapshot/backup_repo"

Dies sollte Informationen über das Backup-Repository anzeigen, zum Beispiel:


"backup_repo":
"typ" : "fs",
"die Einstellungen" :
"komprimieren" : "wahr",
"location" : """/home/root/backups"""


Wenn Sie über mehr als ein Snapshot-Repository verfügen und sich an den Namen nicht erinnern, können Sie den Repository-Namen weglassen und den Endpunkt _snapshot aufrufen, um alle vorhandenen Repositorys aufzulisten.

GET /_snapshot oder cURL curl -XGET http://localhost:9200/_snapshot

So erstellen Sie einen Elasticsearch-Snapshot

Das Erstellen eines Elasticsearch-Snapshots für ein bestimmtes Snapshot-Repository wird von der Create Snapshot-API gehandhabt. Die API erfordert den Namen des Snapshot-Repositorys und den Namen des Snapshots.

HINWEIS: Ein einzelnes Snapshot-Repository kann mehr als einen Snapshot derselben Cluster enthalten, solange sie eindeutige Identitäten/Namen haben.

Betrachten Sie die folgende Anfrage, um einen Snapshot namens Snapshot_2021 zum backup_repo-Repository hinzuzufügen.

PUT /_snapshot/backup_repo/snapshot_2021

Um cURL zu verwenden, verwenden Sie den Befehl:

curl -XPUT „http://localhost:9200/_snapshot/backup_repo/snapshot_2021“

Der Befehl sollte eine Antwort von Elasticsearch mit 200 OK zurückgeben und akzeptiert: true


"akzeptiert" : wahr

Da nicht angegeben ist, welche Datenströme und Indizes gesichert werden sollen, werden beim Aufruf der obigen Anfrage alle Daten und der Clusterstatus gesichert backup. Um anzugeben, welche Datenströme und Indizes gesichert werden sollen, fügen Sie diese dem Anforderungstext hinzu.

Betrachten Sie die folgende Anforderung, die die Sicherungen der .Kibana-Index (ein Systemindex) und gibt an, welcher Benutzer den Snapshot autorisiert hat und warum.

PUT /_snapshot/backup_repo/snapshot_2

"indizes": ".Kibane",
"ignore_unavailable": wahr,
"include_global_state": wahr,
"Metadaten":
"taken_by": "elasticadmin",
„taken_because“: „Tägliches Backup“

Der cURL-Befehl dafür lautet:

curl -XPUT "http://localhost:9200/_snapshot/backup_repo/snapshot_2" -H 'Content-Type: application/json' -d'  "indices": ".kibana",  "ignore_unavailable": true,  "include_global_state": true,  "metadata":     "taken_by": "elasticadmin",    "taken_because": "Daily Backup"  '

Der ignore_unavailable setzt einen booleschen Zustand, der einen Fehler zurückgibt, wenn im Snapshot angegebene Datenströme oder Indizes fehlen oder geschlossen sind.

Der Parameter include_global_state speichert den aktuellen Status des Clusters, wenn er wahr ist. Zu den gespeicherten Clusterinformationen gehören:

HINWEIS: Sie können mehrere durch Kommas getrennte Indizes angeben specify.

Ein gängiges Argument, das mit dem _snapshot-Endpunkt verwendet wird, ist wait_for_completion, ein boolescher Wert, der festlegt, ob (true) oder nicht (false) die Anforderung sofort nach der Snapshot-Initialisierung zurückgegeben werden soll (Standard) oder auf eine Snapshot-Beendigung warten soll.

Beispielsweise:

PUT /_snapshot/backup_repo/snapshot_3?wait_for_completion=true

"indizes": ".Kibane",
"ignore_unavailable": wahr,
"include_global_state": false,
"Metadaten":
"taken_by": "elasticadmin",
„taken_because“: „Wöchentliches Backup“

Der cURL-Befehl lautet:

curl -XPUT "http://localhost:9200/_snapshot/backup_repo/snapshot_3?wait_for_completion=true" -H 'Content-Type: application/json' -d'  "indices": ".kibana",  "ignore_unavailable": true,  "include_global_state": false,  "metadata":     "taken_by": "elasticadmin",    "taken_because": "Weekly Backup"  '

Wenn Sie den Parameter wait_for_completion auf true gesetzt haben, erhalten Sie eine Ausgabe ähnlich der unten gezeigten:


"Schnappschuss":
"snapshot" : "snapshot_3",
"uuid" : "tQUHyofIRnGMMtw0AGBACQ",
"version_id" : 7100299,
"Version" : "7.10.2",
"Indizes" : [
".kibana_1"
],
"Datenströme" : [ ],
"include_global_state": false,
"Metadaten":
"taken_by" : "elasticadmin",
„taken_because“: „Wöchentliches Backup“
,
"Zustand" : "ERFOLG",
"start_time" : "2021-01-19T13:36:59.615Z",
"start_time_in_millis" : 1611063419615,
"end_time" : "2021-01-19T13:37:00.433Z",
"end_time_in_millis" : 1611063420433,
"duration_in_millis" : 818,
"Fehler": [ ],
"Scherben":
"gesamt" : 1,
"fehlgeschlagen" : 0,
"erfolgreich" : 1


So zeigen Sie Schnappschüsse an

Die GET-Snapshot-API verarbeitet die Funktion zum Anzeigen von Snapshots.

Alles, was Sie in der Anfrage angeben müssen, ist das Snapshot-Repository und der Name des Snapshots, den Sie anzeigen möchten.

Der Snapshot sollte mit Details zu einem angegebenen Snapshot antworten. Zu diesen Angaben gehören:

Um beispielsweise die Details zum oben erstellten Snapshot_3 anzuzeigen, verwenden Sie die unten gezeigte Anfrage:

GET /_snapshot/backup_repo/snapshot_3
Um cURL zu verwenden, verwenden Sie den folgenden Befehl:
[cc lang="text" width="100%" height="100%" escaped="true" theme="blackboard" nowrap="0"]
curl -XGET „http://localhost:9200/_snapshot/backup_repo/snapshot_3“

Die Anfrage sollte eine Antwort mit den Details des Snapshots wie folgt zurückgeben:


"Schnappschüsse": [

"snapshot" : "snapshot_3",
"uuid" : "tQUHyofIRnGMMtw0AGBACQ",
"version_id" : 7100299,
"Version" : "7.10.2",
"Indizes" : [
".kibana_1"
],
"Datenströme" : [ ],
"include_global_state": false,
"Metadaten":
"taken_by" : "elasticadmin",
„taken_because“: „Wöchentliches Backup“
,
"Zustand" : "ERFOLG",
"start_time" : "2021-01-19T13:36:59.615Z",
"start_time_in_millis" : 1611063419615,
"end_time" : "2021-01-19T13:37:00.433Z",
"end_time_in_millis" : 1611063420433,
"duration_in_millis" : 818,
"Fehler": [ ],
"Scherben":
"gesamt" : 1,
"fehlgeschlagen" : 0,
"erfolgreich" : 1


]

Sie können den Anfragetext auch anpassen, um spezifische Details zu einem Snapshot zu erhalten. Darauf gehen wir aber vorerst nicht ein.

Angenommen, Sie möchten Informationen zu allen Snapshots in einem bestimmten Snapshot-Repository anzeigen. In diesem Fall können Sie in der Anfrage ein Sternchen als Platzhalter übergeben als:

GET /_snapshot/backup_repo/*

Der cURL-Befehl dafür lautet:

curl -XGET „http://localhost:9200/_snapshot/backup_repo/*“

Die Antwort ist ein detaillierter Dump aller Snapshots in diesem Repository als:


"Schnappschüsse": [

"snapshot" : "snapshot_2021",
"uuid" : "7CFigHzvRtyZW07c60d2iw",
"version_id" : 7100299,
"Version" : "7.10.2",
"Indizes" : [
"mein_index",
"single_index_with_body",
"mein_index_2",
"single_index",
".kibana_1",
"Prüfung"
],
"Datenströme" : [ ],
"include_global_state": wahr,
"Zustand" : "ERFOLG",
"start_time" : "2021-01-19T13:28:48.172Z",
"start_time_in_millis" : 1611062928172,
"end_time" : "2021-01-19T13:28:50.831Z",
"end_time_in_millis" : 1611062930831,
"duration_in_millis" : 2659,
"Fehler": [ ],
"Scherben":
"gesamt" : 7,
"fehlgeschlagen" : 0,
"erfolgreich" : 7

,

"snapshot" : "snapshot_2",
"uuid" : "w58IrYmORAub8VC7cg04Wg",
"version_id" : 7100299,
"Version" : "7.10.2",
"Indizes" : [
".kibana_1"
],
"Datenströme" : [ ],
"include_global_state": false,
"Metadaten":
"taken_by" : "elasticadmin",
"taken_because" : "Tägliches Backup"
,
"Zustand" : "ERFOLG",
"start_time" : "2021-01-19T13:33:34.482Z",
"start_time_in_millis" : 1611063214482,
"end_time" : "2021-01-19T13:33:35.921Z",
"end_time_in_millis" : 1611063215921,
"duration_in_millis" : 1439,
"Fehler": [ ],
"Scherben":
"gesamt" : 1,
"fehlgeschlagen" : 0,
"erfolgreich" : 1

,

"snapshot" : "snapshot_3",
"uuid" : "tQUHyofIRnGMMtw0AGBACQ",
"version_id" : 7100299,
"Version" : "7.10.2",
"Indizes" : [
".kibana_1"
],
"Datenströme" : [ ],
"include_global_state": false,
"Metadaten":
"taken_by" : "elasticadmin",
„taken_because“: „Wöchentliches Backup“
,
"Zustand" : "ERFOLG",
"start_time" : "2021-01-19T13:36:59.615Z",
"start_time_in_millis" : 1611063419615,
"end_time" : "2021-01-19T13:37:00.433Z",
"end_time_in_millis" : 1611063420433,
"duration_in_millis" : 818,
"Fehler": [ ],
"Scherben":
"gesamt" : 1,
"fehlgeschlagen" : 0,
"erfolgreich" : 1


]

Platzhalter sind sehr nützlich, um bestimmte Informationen zu den Snapshots zu filtern.

So löschen Sie einen Schnappschuss

Das Löschen eines Snapshots ist sehr einfach: Sie müssen lediglich die DELETE-Anfrage verwenden als:

LÖSCHEN /_snapshot/backup_repo/snapshot_2021/

Der cURL-Befehl lautet:

curl -XDELETE „http://localhost:9200/_snapshot/backup_repo/snapshot_2021/“

Die Antwort sollte bestätigt werden: wahr:


„bestätigt“: wahr

Wenn der Snapshot nicht vorhanden ist, erhalten Sie einen 404-Statuscode und den Fehler „Snapshot fehlt“ als:


"Error" :
"Ursache" : [

"type" : "snapshot_missing_Exception",
"reason" : "[backup_repo:snapshot_2021] fehlt"

],
"type" : "snapshot_missing_exception",
"reason" : "[backup_repo:snapshot_2021] fehlt"
,
"status" : 404

Fazit

In diesem Handbuch haben wir besprochen, wie Sie Elasticsearch-Snapshots mit der Snapshot-API erstellen. Das Gelernte sollte ausreichen, um ein Snapshot-Repository zu erstellen, die Snapshot-Repositorys anzuzeigen, Snapshots zu erstellen, anzuzeigen und zu löschen. Obwohl Sie mit der API Anpassungen vornehmen können, sollten die Kenntnisse in diesem Handbuch ausreichen, um Ihnen den Einstieg zu erleichtern.

Danke fürs Lesen.

Beste Gamepad-Mapping-Apps für Linux
Wenn du Spiele unter Linux gerne mit einem Gamepad statt mit einem typischen Tastatur- und Maus-Eingabesystem spielst, gibt es einige nützliche Apps f...
Nützliche Tools für Linux-Spieler
Wenn Sie gerne unter Linux spielen, haben Sie wahrscheinlich Apps und Dienstprogramme wie Wine, Lutris und OBS Studio verwendet, um das Spielerlebnis ...
HD-Remastered-Spiele für Linux, die noch nie zuvor eine Linux-Version hatten
Viele Spieleentwickler und -herausgeber entwickeln HD-Remaster alter Spiele, um die Lebensdauer des Franchise zu verlängern. Bitte Fans, die Kompatibi...