For at hjælpe med at beskytte mod datatab har Elasticsearch forskellige funktioner, der giver dig mulighed for at sikre datatilgængelighed, selv i tilfælde af datafejl.
Nogle af de måder, som Elasticsearch bruger for at give dig datatilgængelighed, inkluderer:
- Cross-cluster replikationer, en funktion, der giver dig mulighed for at replikere data til et sæt tilhængerklynger; en tilhængerklynge er en standbyklynge, der bruges i tilfælde af fejl fra masterklyngen.
- En anden metode, som Elasticsearch bruger til at forhindre data ved hjælp af sikkerhedskopier - også kaldet cluster snapshots. Hvis behovet opstår, kan du bruge disse snapshots til at gendanne data i en helt ny klynge.
Denne vejledning viser dig, hvordan du opretter klyngesnapshots, som hjælper dig med at være klar, hvis der skulle opstå en irreversibel datafejlshændelse.
Lad os komme igang.
Hvad er et øjebliksbillede af elastisk søgning?
Som nævnt er et elastisk øjebliksbillede en sikkerhedskopi af en kørende Elasticsearch-klynge. Dette øjebliksbillede kan være af en hel klynge eller specifikke indekser og datastrømme inden for en bestemt klynge.
Som du snart vil lære, styrer et repository-plugin Elasticsearch-snapshots. Disse snapshots kan gemmes på forskellige lagringssteder defineret af pluginet. Disse inkluderer lokale systemer og eksterne systemer som GCP Storage, Amazon EC2, Microsoft Azure og mange flere.
Sådan oprettes et Elasticsearch Snapshot Repository
Før vi dykker ned i oprettelsen af Elasticsearch-snapshots, er vi nødt til at oprette et snapshot-arkiv, fordi mange af Elasticsearch's tjenester bruger Snapshot API til at udføre disse opgaver.
Nogle af de opgaver, der håndteres af Snapshot API er:
- Sæt øjebliksbillede arkiv
- Bekræft øjebliksbillede lager
- Få snapshot-lager
- Slet snapshot-lager
- Ryd op snapshot repository
- Opret øjebliksbillede
- Klon-øjebliksbillede
- Få øjebliksbillede
- Få øjebliksbillede status
- Gendan øjebliksbillede
- Slet øjebliksbillede
For at oprette et snapshot-arkiv bruger vi _snapshot API-slutpunktet efterfulgt af det navn, vi vil tildele snapshot-arkivet. Overvej nedenstående anmodning, der opretter et lager, der hedder backup_repo
PUT / _snapshot / backup_repo"type": "fs",
"indstillinger":
"location": "/ home / root / backups",
"komprimere": sandt
Her er en cURL-kommando til ovenstående anmodning:
krølle -XPUT "http: // localhost: 9200 / _snapshot / backup_repo" -H 'Content-Type: application / json' -d '"type": "fs", "settings": "location": "/ home / root / backups "," compress ": true 'For at videregive stien til snapshot-arkivet skal du først føje systemets sti eller den overordnede mappe til stien.repo-indgang i elastiksøgning.yml
Stien.repo-indgang skal se ud som:
sti.repo: [“/ home / root / backups]]Du kan finde konfigurationsfilen til Elasticsearch i / etc / elasticsearch / elasticsearch.yml
BEMÆRK: Efter tilføjelse af stien.repo, skal du muligvis genstarte Elasticsearch-klynger. Derudover understøttes værdierne for sti.repo kan variere vildt afhængigt af platformen, der kører Elasticsearch.
Sådan får du vist snapshot-arkivet
For at bekræfte den vellykkede oprettelse af snapshot-arkivet skal du bruge GET-anmodningen med _snapshot-slutpunktet som:
GET / _snapshot / backup_repoDu kan også bruge følgende cURL-kommando:
krølle -XGET "http: // localhost: 9200 / _snapshot / backup_repo"Dette skal vise oplysninger om backup-arkivet, for eksempel:
"backup_repo":
"type": "fs",
"indstillinger":
"komprimere": "sandt",
"location": "" "/ home / root / backups" ""
Hvis du har mere end et øjebliksbillede repositories og ikke kan huske navnet, kan du udelade repo-navnet og ringe til _snapshot endpoint for at liste alle eksisterende repositories.
GET / _snapshot eller curl curl -XGET http: // localhost: 9200 / _snapshot
Sådan oprettes et øjebliksbillede af elastiksøgning
Oprettelse af et Elasticsearch-snapshot til et specifikt snapshot-arkiv håndteres af create snapshot API. API'en kræver snapshot-lagernavnet og navnet på snapshotet.
BEMÆRK: Et enkelt øjebliksbillede arkiv kan have mere end et øjebliksbillede af de samme klynger, så længe de har unikke identiteter / navne.
Overvej følgende anmodning om at tilføje et øjebliksbillede kaldet snapshot_2021 til backup_repo-lageret.
PUT / _snapshot / backup_repo / snapshot_2021For at bruge cURL skal du bruge kommandoen:
krølle -XPUT “http: // localhost: 9200 / _snapshot / backup_repo / snapshot_2021”Kommandoen skal returnere et svar fra Elasticsearch med 200 OK og accepteret: sandt
"accepteret": sandt
Da det ikke specificerer, hvilke datastrømme og indekser du vil have sikkerhedskopieret, kaldes ovenstående anmodning sikkerhedskopier alle data og klyngetilstand. For at specificere, hvilke datastrømme og indeks der skal sikkerhedskopieres, skal du føje det til anmodningens organ.
Overvej følgende anmodning om sikkerhedskopiering af .kibana-indeks (et systemindeks) og angiver, hvilken bruger der godkendte øjebliksbillede og årsagen.
PUT / _snapshot / backup_repo / snapshot_2"indekser": ".kibana ",
"ignore_unavailable": sandt,
"include_global_state": sandt,
"metadata":
"taken_by": "elasticadmin",
“Taken_because”: “Daily Backup”
CURL-kommandoen til det er:
krølle -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 " 'Ignorer_tilgængelig indstiller en boolsk tilstand, der returnerer en fejl, hvis der mangler eller lukkes datastrømme eller indeks, der er angivet i øjebliksbillede.
Parameteren include_global_state gemmer klyngens aktuelle tilstand, hvis den er sand. Nogle af de gemte klyngeoplysninger inkluderer:
- Vedvarende klyngeindstillinger
- Indeksskabeloner
- Ældre indeksskabeloner
- Indtag rørledninger
- ILM-livscykluspolitikker
BEMÆRK: Du kan angive mere end et indeks adskilt af kommaer.
Et almindeligt argument, der bruges med _snapshot-slutpunktet, er wait_for_completion, en boolsk værdi, der definerer, om (true) eller ikke (false) anmodningen skal vende tilbage straks efter snapshot-initialisering (standard) eller vente på, at et snapshot er afsluttet.
For eksempel:
PUT / _snapshot / backup_repo / snapshot_3?wait_for_completion = sandt"indekser": ".kibana ",
"ignore_unavailable": sandt,
"include_global_state": false,
"metadata":
"taken_by": "elasticadmin",
“Taken_because”: “Ugentlig backup”
CURL-kommandoen er:
krølle -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 ":" Ugentlig backup " 'Når du har indstillet wait_for_completion til true, giver du en output svarende til den, der er vist nedenfor:
"øjebliksbillede":
"snapshot": "snapshot_3",
"uuid": "tQUHyofIRnGMMtw0AGBACQ",
"version_id": 7100299,
"version": "7.10.2 ",
"indekser": [
".kibana_1 "
],
"data_streams": [],
"include_global_state": false,
"metadata":
"taken_by": "elasticadmin",
“Taken_because”: “Ugentlig backup”
,
"state": "SUCCESS",
"starttid": "2021-01-19T13: 36: 59.615Z ",
"starttid_i_millis": 1611063419615,
"end_time": "2021-01-19T13: 37: 00.433Z ",
"end_time_in_millis": 1611063420433,
"varighed_in_millis": 818,
"fiaskoer": [],
"skår":
"total": 1,
"mislykkedes": 0,
"vellykket": 1
Sådan får du vist snapshots
GET snapshot API håndterer funktionerne for visning af snapshots.
Alt hvad du behøver for at videregive i anmodningen er snapshot-arkivet og navnet på det snapshot, du vil se detaljerne.
Snapshotet skal svare med detaljer om et specificeret snapshot. Disse detaljer inkluderer:
- Start- og sluttidværdier
- Den version af Elasticsearch, der oprettede snapshotet
- Liste over inkluderede indekser
- Øjebliksbilledeets aktuelle tilstand
- Liste over fejl, der opstod under øjebliksbillede
Hvis du f.eks. Vil se detaljerne om snapshot_3 oprettet ovenfor, skal du bruge anmodningen vist nedenfor:
GET / _snapshot / backup_repo / snapshot_3Brug kommandoen nedenfor for at bruge cURL:
[cc lang = "text" width = "100%" height = "100%" escaped = "true" theme = "blackboard" nowrap = "0"]
krølle -XGET “http: // localhost: 9200 / _snapshot / backup_repo / snapshot_3”
Anmodningen skal returnere et svar med detaljerne i øjebliksbillede som:
"snapshots": [
"snapshot": "snapshot_3",
"uuid": "tQUHyofIRnGMMtw0AGBACQ",
"version_id": 7100299,
"version": "7.10.2 ",
"indekser": [
".kibana_1 "
],
"data_streams": [],
"include_global_state": false,
"metadata":
"taken_by": "elasticadmin",
“Taken_because”: “Ugentlig backup”
,
"state": "SUCCESS",
"starttid": "2021-01-19T13: 36: 59.615Z ",
"starttid_i_millis": 1611063419615,
"sluttid": "2021-01-19T13: 37: 00.433Z ",
"end_time_in_millis": 1611063420433,
"varighed_in_millis": 818,
"fiaskoer": [],
"skår":
"total": 1,
"mislykkedes": 0,
"vellykket": 1
]
Du kan også tilpasse anmodningens organ for at få specifikke detaljer om et øjebliksbillede. Vi vil dog ikke se nærmere på det indtil videre.
Lad os sige, at du vil se oplysninger om alle snapshots i et specifikt snapshot-arkiv; i så fald kan du sende et asterisk wildcard i anmodningen som:
GET / _snapshot / backup_repo / *CURL-kommandoen til det er:
krølle -XGET “http: // localhost: 9200 / _snapshot / backup_repo / *”Svaret er en detaljeret dump af alle snapshots i det arkiv som:
"snapshots": [
"øjebliksbillede": "øjebliksbillede_2021",
"uuid": "7CFigHzvRtyZW07c60d2iw",
"version_id": 7100299,
"version": "7.10.2 ",
"indekser": [
"min_index",
"enkelt_index_med_krop",
"min_index_2",
"single_index",
".kibana_1 ",
"prøve"
],
"data_streams": [],
"include_global_state": sandt,
"state": "SUCCESS",
"starttid": "2021-01-19T13: 28: 48.172Z ",
"start_time_in_millis": 1611062928172,
"end_time": "2021-01-19T13: 28: 50.831Z ",
"end_time_in_millis": 1611062930831,
"varighed_in_millis": 2659,
"fiaskoer": [],
"skår":
"i alt": 7,
"mislykkedes": 0,
"vellykket": 7
,
"snapshot": "snapshot_2",
"uuid": "w58IrYmORAub8VC7cg04Wg",
"version_id": 7100299,
"version": "7.10.2 ",
"indekser": [
".kibana_1 "
],
"data_streams": [],
"include_global_state": false,
"metadata":
"taken_by": "elasticadmin",
"taken_because": "Daglig sikkerhedskopiering"
,
"state": "SUCCESS",
"starttid": "2021-01-19T13: 33: 34.482Z ",
"start_time_in_millis": 1611063214482,
"sluttid": "2021-01-19T13: 33: 35.921Z ",
"end_time_in_millis": 1611063215921,
"varighed_in_millis": 1439,
"fiaskoer": [],
"skår":
"total": 1,
"mislykkedes": 0,
"vellykket": 1
,
"snapshot": "snapshot_3",
"uuid": "tQUHyofIRnGMMtw0AGBACQ",
"version_id": 7100299,
"version": "7.10.2 ",
"indekser": [
".kibana_1 "
],
"data_streams": [],
"include_global_state": false,
"metadata":
"taken_by": "elasticadmin",
“Taken_because”: “Ugentlig backup”
,
"state": "SUCCESS",
"starttid": "2021-01-19T13: 36: 59.615Z ",
"starttid_i_millis": 1611063419615,
"end_time": "2021-01-19T13: 37: 00.433Z ",
"end_time_in_millis": 1611063420433,
"varighed_in_millis": 818,
"fiaskoer": [],
"skår":
"total": 1,
"mislykkedes": 0,
"vellykket": 1
]
Jokertegn er meget nyttige til at filtrere specifikke oplysninger om snapshots.
Sådan slettes et øjebliksbillede
Sletning af et øjebliksbillede er meget simpelt: alt hvad du skal gøre er at bruge DELETE-anmodningen som:
SLET / _snapshot / backup_repo / snapshot_2021 /CURL-kommandoen er:
krølle -XDELETE “http: // localhost: 9200 / _snapshot / backup_repo / snapshot_2021 /”Svaret skal anerkendes: sandt
“Anerkendt”: sandt
Hvis snapshotet ikke findes, får du en 404-statuskode og snapshot mangler fejl som:
"fejl":
"hovedårsagen" : [
"type": "snapshot_missing_exception",
"årsag": "[backup_repo: snapshot_2021] mangler"
],
"type": "snapshot_missing_exception",
"årsag": "[backup_repo: snapshot_2021] mangler"
,
"status": 404
Konklusion
I denne vejledning har vi diskuteret, hvordan du opretter Elasticsearch-snapshots ved hjælp af Snapshot API. Hvad du har lært, skal være nok til at give dig mulighed for at oprette et øjebliksbillede arkiv, se øjebliksbillede arkiver, oprette, se og slette snapshots. Selvom der er tilpasninger, du kan foretage med API'et, skal viden i denne vejledning være nok til at komme i gang.
Tak fordi du læste.