Om gegevensverlies te voorkomen, heeft Elasticsearch verschillende functies waarmee u de beschikbaarheid van gegevens kunt garanderen, zelfs in gevallen van gegevensstoringen failure.
Enkele van de manieren die Elasticsearch gebruikt om u gegevensbeschikbaarheid te bieden, zijn onder meer:
- Cross-cluster-replicaties, een functie waarmee u gegevens kunt repliceren naar een set volgerclusters; een volgercluster is een standby-cluster dat wordt gebruikt in geval van een storing van het hoofdcluster.
- Een andere methode die Elasticsearch gebruikt om gegevens te voorkomen met behulp van back-ups, ook wel cluster-snapshots genoemd. Indien nodig kunt u deze snapshots gebruiken om gegevens op een geheel nieuw cluster te herstellen.
Deze zelfstudie laat u zien hoe u clustersnapshots maakt, zodat u klaar bent als zich een onomkeerbare gebeurtenis voor gegevensfalen voordoet.
Laten we beginnen.
Wat is een Elasticsearch-snapshot??
Zoals gezegd is een elastische momentopname een reservekopie van een actief Elasticsearch-cluster. Deze momentopname kan een hele cluster zijn of specifieke indices en gegevensstromen binnen een bepaalde cluster.
Zoals je snel zult leren, beheert een repository-plug-in Elasticsearch-snapshots. Deze snapshots kunnen worden opgeslagen op verschillende opslaglocaties die zijn gedefinieerd door de plug-in. Deze omvatten lokale systemen en externe systemen zoals GCP Storage, Amazon EC2, Microsoft Azure en nog veel meer.
Een Elasticsearch Snapshot Repository maken
Voordat we ons verdiepen in het maken van Elasticsearch-snapshots, moeten we een snapshot-repository maken omdat veel van Elasticsearch-services de Snapshot API gebruiken om deze taken uit te voeren.
Enkele van de taken die worden afgehandeld door de Snapshot API zijn:
- Zet snapshot-repository
- Verifieer de opslagplaats voor snapshots
- Opslagplaats voor snapshots ophalen
- Opslagplaats voor snapshots verwijderen
- Opslagplaats voor snapshots opschonen
- Momentopname maken
- Momentopname klonen
- Krijg momentopname Get
- Status van momentopname ophalen
- Momentopname herstellen
- Momentopname verwijderen
Om een snapshot-repository te maken, gebruiken we het _snapshot API-eindpunt gevolgd door de naam die we willen toewijzen aan de snapshot-repository. Overweeg het onderstaande verzoek waarmee een opslagplaats wordt gemaakt met de naam backup_repo
PUT /_snapshot/backup_repo"type": "fs",
"instellingen":
"location": "/home/root/back-ups",
"comprimeren": waar
Hier is een cURL-opdracht voor het bovenstaande verzoek:
curl -XPUT "http://localhost:9200/_snapshot/backup_repo" -H 'Content-Type: application/json' -d' "type": "fs", "settings": "location": "/ home/root/backups", "compress": true 'Om het pad van de snapshot-repository door te geven, moet u eerst het pad van het systeem of de bovenliggende map aan het pad toevoegen.repo-invoer in elasticsearch.yml
Het pad.repo-invoer moet er ongeveer zo uitzien:
pad.repo: [“/home/root/back-ups”]U vindt het Elasticsearch-configuratiebestand in /etc/elasticsearch/elasticsearch.yml
OPMERKING: Na het toevoegen van het pad.repo, moet u mogelijk Elasticsearch-clusters opnieuw starten. Bovendien zijn de waarden die worden ondersteund voor pad.repo kan enorm variëren, afhankelijk van het platform waarop Elasticsearch wordt uitgevoerd.
Hoe de Snapshot Repository te bekijken
Om de succesvolle aanmaak van de snapshot-repository te bevestigen, gebruikt u het GET-verzoek met het _snapshot-eindpunt als:
GET /_snapshot/backup_repoU kunt ook het volgende cURL-commando gebruiken:
curl -XGET "http://localhost:9200/_snapshot/backup_repo"Dit zou informatie over de back-uprepository moeten weergeven, bijvoorbeeld:
"backup_repo" :
"type" : "fs",
"instellingen" :
"comprimeren" : "waar",
"locatie" : """/home/root/back-ups"""
Als u meer dan één opslagplaats voor snapshots hebt en de naam niet meer weet, kunt u de naam van de opslagplaats weglaten en het _snapshot-eindpunt aanroepen om alle bestaande opslagplaatsen weer te geven.
GET /_snapshot of cURL curl -XGET http://localhost:9200/_snapshot
Een Elasticsearch-snapshot maken
Het maken van een Elasticsearch-snapshot voor een specifieke snapshot-repository wordt afgehandeld door de create snapshot-API. De API vereist de naam van de snapshot-repository en de naam van de snapshot.
OPMERKING: Een enkele snapshot-repository kan meer dan één snapshot van dezelfde clusters hebben, zolang ze maar unieke identiteiten/namen hebben.
Overweeg het volgende verzoek om een snapshot met de naam snapshot_2021 toe te voegen aan de backup_repo-repository:.
PUT /_snapshot/backup_repo/snapshot_2021Gebruik de opdracht om cURL te gebruiken:
curl -XPUT “http://localhost:9200/_snapshot/backup_repo/snapshot_2021”De opdracht moet een antwoord van Elasticsearch retourneren met 200 OK en geaccepteerd: true
"geaccepteerd" : waar
Aangezien het niet specificeert van welke gegevensstromen en indices u een back-up wilt hebben, roept het bovenstaande verzoek een back-up op van alle gegevens en de clusterstatus. Om aan te geven van welke gegevensstromen en indices een back-up moet worden gemaakt, voegt u dat toe aan de hoofdtekst van het verzoek.
Overweeg het volgende verzoek om back-ups te maken van de .kibana-index (een systeemindex) en specificeert welke gebruiker de snapshot en de reden heeft geautoriseerd.
PUT /_snapshot/backup_repo/snapshot_2"indexen": ".kibana",
"ignore_unavailable": true,
"include_global_state": true,
"metagegevens":
"taken_by": "elasticadmin",
"taken_because": "Dagelijkse back-up"
Het cURL-commando daarvoor is:
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" 'De negeer_unavailable stelt een Booleaanse status in die een fout retourneert als gegevensstromen of indices die in de momentopname zijn gespecificeerd ontbreken of gesloten zijn.
De parameter include_global_state slaat de huidige status van het cluster op indien waar. Enkele van de opgeslagen clustergegevens zijn:
- Permanente clusterinstellingen
- Indexsjablonen
- Verouderde indexsjablonen
- Pijpleidingen opnemen
- ILM-levenscyclusbeleid
OPMERKING: U kunt meer dan één index opgeven, gescheiden door komma's.
Een veelgebruikt argument dat wordt gebruikt met het _snapshot-eindpunt is wait_for_completion, een Booleaanse waarde die bepaalt of (true) of niet (false) het verzoek onmiddellijk moet terugkeren na de initialisatie van de snapshot (standaard) of moet wachten op de voltooiing van een snapshot.
Bijvoorbeeld:
PUT /_snapshot/backup_repo/snapshot_3?wait_for_completion=true"indexen": ".kibana",
"ignore_unavailable": true,
"include_global_state": false,
"metagegevens":
"taken_by": "elasticadmin",
"taken_because": "Wekelijkse back-up"
Het cURL-commando is:
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": "Wekelijkse back-up" 'Als u de parameter wait_for_completion op true heeft ingesteld, geeft u een uitvoer die lijkt op die hieronder:
"momentopname" :
"snapshot" : "snapshot_3",
"uuid" : "tQUHyofIRnGMMtw0AGBACQ",
"versie_id" : 7100299,
"versie" : "7.10.2",
"indexen" : [
".kibana_1"
],
"data_streams" : [ ],
"include_global_state" : false,
"metagegevens" :
"taken_by" : "elasticadmin",
"taken_because": "Wekelijkse back-up"
,
"staat" : "SUCCES",
"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,
"mislukkingen" : [ ],
"scherven" :
"totaal" : 1,
"mislukt" : 0,
"geslaagd" : 1
Snapshots bekijken
De GET snapshot-API verwerkt de functionaliteit voor het bekijken van snapshots.
Het enige dat u in het verzoek hoeft door te geven, is de snapshot-repository en de naam van de snapshot waarvan u de details wilt bekijken.
De snapshot zou moeten reageren met details over een gespecificeerde snapshot. Deze gegevens omvatten:
- Begin- en eindtijdwaarden
- De versie van Elasticsearch die de momentopname heeft gemaakt
- Lijst met opgenomen indices
- De huidige status van de momentopname
- Lijst met fouten die zijn opgetreden tijdens de momentopname
Als u bijvoorbeeld de details over de hierboven gemaakte snapshot_3 wilt bekijken, gebruikt u het onderstaande verzoek:
GET /_snapshot/backup_repo/snapshot_3Gebruik de onderstaande opdracht om cURL te gebruiken:
[cc lang="text" width="100%" height="100%" escaped="true" theme="blackboard" nowrap="0"]
curl -XGET “http://localhost:9200/_snapshot/backup_repo/snapshot_3”
Het verzoek moet een antwoord retourneren met de details van de momentopname als:
"momentopnamen" : [
"snapshot" : "snapshot_3",
"uuid" : "tQUHyofIRnGMMtw0AGBACQ",
"versie_id" : 7100299,
"versie" : "7.10.2",
"indexen" : [
".kibana_1"
],
"data_streams" : [ ],
"include_global_state" : false,
"metagegevens" :
"taken_by" : "elasticadmin",
"taken_because": "Wekelijkse back-up"
,
"staat" : "SUCCES",
"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,
"mislukkingen" : [ ],
"scherven" :
"totaal" : 1,
"mislukt" : 0,
"geslaagd" : 1
]
U kunt ook de hoofdtekst van het verzoek aanpassen om specifieke details over een momentopname te krijgen. Daar gaan we echter voorlopig niet naar kijken.
Stel dat u informatie wilt bekijken over alle snapshots in een specifieke snapshotrepository; in dat geval kunt u een asterisk-wildcard in het verzoek doorgeven als:
GET /_snapshot/backup_repo/*Het cURL-commando daarvoor is:
curl -XGET “http://localhost:9200/_snapshot/backup_repo/*”Het antwoord is een gedetailleerde dump van alle snapshots in die repository als:
"momentopnamen" : [
"snapshot" : "snapshot_2021",
"uuid" : "7CFigHzvRtyZW07c60d2iw",
"versie_id" : 7100299,
"versie" : "7.10.2",
"indexen" : [
"mijn_index",
"single_index_with_body",
"mijn_index_2",
"single_index",
".kibana_1",
"test"
],
"data_streams" : [ ],
"include_global_state" : true,
"staat" : "SUCCES",
"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,
"mislukkingen" : [ ],
"scherven" :
"totaal" : 7,
"mislukt" : 0,
"geslaagd" : 7
,
"snapshot" : "snapshot_2",
"uuid" : "w58IrYmORAub8VC7cg04Wg",
"versie_id" : 7100299,
"versie" : "7.10.2",
"indexen" : [
".kibana_1"
],
"data_streams" : [ ],
"include_global_state" : false,
"metagegevens" :
"taken_by" : "elasticadmin",
"taken_because" : "Dagelijkse back-up"
,
"staat" : "SUCCES",
"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,
"mislukkingen" : [ ],
"scherven" :
"totaal" : 1,
"mislukt" : 0,
"geslaagd" : 1
,
"snapshot" : "snapshot_3",
"uuid" : "tQUHyofIRnGMMtw0AGBACQ",
"versie_id" : 7100299,
"versie" : "7.10.2",
"indexen" : [
".kibana_1"
],
"data_streams" : [ ],
"include_global_state" : false,
"metagegevens" :
"taken_by" : "elasticadmin",
"taken_because": "Wekelijkse back-up"
,
"staat" : "SUCCES",
"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,
"mislukkingen" : [ ],
"scherven" :
"totaal" : 1,
"mislukt" : 0,
"geslaagd" : 1
]
Jokertekens zijn erg handig voor het filteren van specifieke informatie over de snapshots.
Een momentopname verwijderen
Het verwijderen van een snapshot is heel eenvoudig: het enige wat u hoeft te doen is het DELETE-verzoek te gebruiken als:
VERWIJDEREN /_snapshot/backup_repo/snapshot_2021/Het cURL-commando is:
curl -XDELETE “http://localhost:9200/_snapshot/backup_repo/snapshot_2021/”Het antwoord moet worden bevestigd: waar
“erkend”: waar
Als de momentopname niet bestaat, krijgt u een 404-statuscode en een ontbrekende momentopname als:
"fout" :
"oorzaak" : [
"type" : "snapshot_missing_exception",
"reden" : "[backup_repo:snapshot_2021] ontbreekt"
],
"type" : "snapshot_missing_exception",
"reden" : "[backup_repo:snapshot_2021] ontbreekt"
,
"status" : 404
Conclusie
In deze handleiding hebben we besproken hoe u Elasticsearch-snapshots kunt maken met behulp van de Snapshot API. Wat u hebt geleerd, zou voldoende moeten zijn om u in staat te stellen een snapshot-repository te maken, de snapshot-repository's te bekijken, snapshots te maken, te bekijken en te verwijderen. Hoewel er aanpassingen zijn die u met de API kunt maken, zou de kennis in deze handleiding voldoende moeten zijn om u op weg te helpen.
Bedankt voor het lezen.