Ricerca elastica

Backup e ripristino di cluster Elasticsearch con snapshot

Backup e ripristino di cluster Elasticsearch con snapshot
Elasticsearch riguarda i dati e, come probabilmente già saprai, i dati sono importanti per te e per Elasticsearch. Tuttavia, nella misura in cui sia tu che Elasticsearch amate i dati, possono verificarsi errori di dati, con conseguente perdita di dati.

Per aiutare a salvaguardare dalla perdita di dati, Elasticsearch dispone di varie funzionalità che consentono di garantire la disponibilità dei dati, anche in casi di errore dei dati.

Alcuni dei modi utilizzati da Elasticsearch per fornirti la disponibilità dei dati includono:

Questo tutorial mostra come creare snapshot del cluster, che ti aiuteranno a essere pronto nel caso in cui si verifichi un evento di errore irreversibile dei dati.

Iniziamo.

Che cos'è un'istantanea di Elasticsearch?

Come accennato, uno snapshot elastico è una copia di backup di un cluster Elasticsearch in esecuzione. Questa istantanea può essere di un intero cluster o di indici e flussi di dati specifici all'interno di un particolare cluster.

Come imparerai presto, un plug-in di repository gestisce gli snapshot di Elasticsearch. Queste istantanee sono memorizzabili in varie posizioni di archiviazione definite dal plugin. Questi includono sistemi locali e sistemi remoti come GCP Storage, Amazon EC2, Microsoft Azure e molti altri.

Come creare un repository di snapshot Elasticsearch

Prima di immergerci nella creazione di snapshot Elasticsearch, dobbiamo creare un repository di snapshot perché molti dei servizi di Elasticsearch utilizzano l'API Snapshot per eseguire queste attività.

Alcune delle attività gestite dall'API Snapshot sono:

Per creare un repository di snapshot, utilizziamo l'endpoint API _snapshot seguito dal nome che vogliamo assegnare al repository di snapshot. Considera la richiesta di seguito che crea un repository chiamato backup_repo

PUT /_snapshot/backup_repo

"tipo": "fs",
"impostazioni":
"location": "/home/root/backup",
"compresso": vero

Ecco un comando cURL per la richiesta precedente:

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

Per passare il percorso del repository delle istantanee, devi prima aggiungere il percorso del sistema o la directory padre al percorso.voce repo in elasticsearch.yml

Il sentiero.la voce del repository dovrebbe essere simile a:

sentiero.repository: ["/home/root/backup"]

Puoi trovare il file di configurazione di Elasticsearch in  /etc/elasticsearch/elasticsearch.yml

NOTA: Dopo aver aggiunto il percorso.repository, potrebbe essere necessario riavviare i cluster Elasticsearch. Inoltre, i valori supportati per path.repo può variare notevolmente a seconda della piattaforma che esegue Elasticsearch.

Come visualizzare il repository di snapshot

Per confermare la corretta creazione del repository di snapshot, utilizzare la richiesta GET con l'endpoint _snapshot come:

GET /_snapshot/backup_repo

Puoi anche usare il seguente comando cURL:

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

Questo dovrebbe visualizzare le informazioni sull'archivio di backup, ad esempio:


"backup_repo":
"tipo": "fs",
"impostazioni" :
"compresso": "vero",
"posizione": """/home/root/backup"""


Se hai più di un repository di snapshot e non ricordi il nome, puoi omettere il nome del repository e chiamare l'endpoint _snapshot per elencare tutti i repository esistenti.

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

Come creare uno snapshot Elasticsearch Elastic

La creazione di uno snapshot Elasticsearch per un repository di snapshot specifico è gestita dall'API create snapshot. L'API richiede il nome del repository di snapshot e il nome dello snapshot.

NOTA: Un singolo repository di snapshot può avere più di uno snapshot degli stessi cluster purché abbiano identità/nomi univoci.

Considera la seguente richiesta per aggiungere uno snapshot chiamato snapshot_2021 al repository backup_repo.

PUT /_snapshot/backup_repo/snapshot_2021

Per usare cURL, usa il comando:

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

Il comando dovrebbe restituire una risposta da Elasticsearch con 200 OK e accettato: true


"accettato": vero

Poiché non specifica di quali flussi di dati e indici si desidera eseguire il backup, la chiamata alla richiesta precedente esegue il backup di tutti i dati e dello stato del cluster. Per specificare di quali flussi di dati e indici eseguire il backup, aggiungilo al corpo della richiesta request.

Considera la seguente richiesta che esegue il backup del .indice kibana (un indice di sistema) e specifica quale utente ha autorizzato lo snapshot e il motivo.

PUT /_snapshot/backup_repo/snapshot_2

"indici": ".kibana",
"ignore_unavailable": vero,
"include_global_state": vero,
"metadati":
"take_by": "elasticadmin",
“take_because”: “Backup giornaliero”

Il comando cURL per questo è:

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": "Backup giornaliero"  '

Ignora_non disponibile imposta uno stato booleano che restituisce un errore se i flussi di dati o gli indici specificati nell'istantanea sono mancanti o chiusi.

Il parametro include_global_state salva lo stato corrente del cluster se vero. Alcune delle informazioni sul cluster salvate includono:

NOTA: Puoi specificare più di un indice separato da virgole.

Un argomento comune utilizzato con l'endpoint _snapshot è wait_for_completion, un valore booleano che definisce se (true) o meno (false) la richiesta deve tornare immediatamente dopo l'inizializzazione dello snapshot (impostazione predefinita) o attendere il completamento dello snapshot.

Per esempio:

PUT /_snapshot/backup_repo/snapshot_3?wait_for_completion=true

"indici": ".kibana",
"ignore_unavailable": vero,
"include_global_state": false,
"metadati":
"take_by": "elasticadmin",
“take_because”: “Backup settimanale”

Il comando cURL è:

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": "Backup settimanale"  '

Quando il parametro wait_for_completion è impostato su true, otterrai un output simile a quello mostrato di seguito:


"istantanea":
"istantanea": "istantanea_3",
"uuid": "tQUHyofIRnGMMtw0AGBACQ",
"id_versione": 7100299,
"versione": "7.10.2",
"indici" : [
".kibana_1"
],
"data_streams": [ ],
"include_global_state": false,
"metadati":
"take_by": "elasticadmin",
“take_because”: “Backup settimanale”
,
"stato": "SUCCESSO",
"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,
"fallimenti" : [ ],
"schegge":
"totale" : 1,
"fallito": 0,
"successo": 1


Come visualizzare le istantanee

L'API GET snapshot gestisce la funzionalità di visualizzazione snapshot.

Tutto ciò che devi passare nella richiesta è il repository di snapshot e il nome dello snapshot di cui desideri visualizzare i dettagli.

L'istantanea dovrebbe rispondere con i dettagli su un'istantanea specificata. Questi dettagli includono:

Ad esempio, per visualizzare i dettagli sullo snapshot_3 creato sopra, utilizzare la richiesta mostrata di seguito:

GET /_snapshot/backup_repo/snapshot_3
Per utilizzare cURL, usa il comando seguente:
[cc lang = "testo" larghezza = "100%" altezza = "100%" escape = "vero" tema = "lavagna" nowrap = "0"]
curl -XGET “http://localhost:9200/_snapshot/backup_repo/snapshot_3”

La richiesta dovrebbe restituire una risposta con i dettagli dello snapshot come:


"istantanee": [

"istantanea": "istantanea_3",
"uuid": "tQUHyofIRnGMMtw0AGBACQ",
"id_versione": 7100299,
"versione": "7.10.2",
"indici" : [
".kibana_1"
],
"data_streams": [ ],
"include_global_state": false,
"metadati":
"take_by": "elasticadmin",
“take_because”: “Backup settimanale”
,
"stato": "SUCCESSO",
"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,
"fallimenti" : [ ],
"schegge":
"totale" : 1,
"fallito": 0,
"successo": 1


]

Puoi anche personalizzare il corpo della richiesta per ottenere dettagli specifici su un'istantanea. Tuttavia, non lo esamineremo per ora.

Supponiamo di voler visualizzare le informazioni su tutti gli snapshot in un repository di snapshot specifico; in tal caso, puoi passare un carattere jolly asterisco nella richiesta come:

OTTIENI /_istantanea/backup_repo/*

Il comando cURL per questo è:

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

La risposta è un dump dettagliato di tutte le istantanee in quel repository come:


"istantanee": [

"istantanea": "istantanea_2021",
"uuid": "7CFigHzvRtyZW07c60d2iw",
"id_versione": 7100299,
"versione": "7.10.2",
"indici" : [
"mio_indice",
"single_index_with_body",
"mio_indice_2",
"indice_singolo",
".kibana_1",
"test"
],
"data_streams": [ ],
"include_global_state": vero,
"stato": "SUCCESSO",
"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,
"fallimenti" : [ ],
"schegge":
"totale" : 7,
"fallito": 0,
"successo": 7

,

"istantanea": "istantanea_2",
"uuid": "w58IrYmORAub8VC7cg04Wg",
"id_versione": 7100299,
"versione": "7.10.2",
"indici" : [
".kibana_1"
],
"data_streams": [ ],
"include_global_state": false,
"metadati":
"take_by": "elasticadmin",
"taken_because": "Backup giornaliero"
,
"stato": "SUCCESSO",
"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,
"fallimenti" : [ ],
"schegge":
"totale" : 1,
"fallito": 0,
"successo": 1

,

"istantanea": "istantanea_3",
"uuid": "tQUHyofIRnGMMtw0AGBACQ",
"id_versione": 7100299,
"versione": "7.10.2",
"indici" : [
".kibana_1"
],
"data_streams": [ ],
"include_global_state": false,
"metadati":
"take_by": "elasticadmin",
“take_because”: “Backup settimanale”
,
"stato": "SUCCESSO",
"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,
"fallimenti" : [ ],
"schegge":
"totale" : 1,
"fallito": 0,
"successo": 1


]

I caratteri jolly sono molto utili per filtrare informazioni specifiche sugli snapshot.

Come eliminare un'istantanea

Eliminare uno snapshot è molto semplice: tutto ciò che devi fare è utilizzare la richiesta DELETE come:

ELIMINA /_snapshot/backup_repo/snapshot_2021/

Il comando cURL è:

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

La risposta dovrebbe essere riconosciuta:vero


“riconosciuto”: vero

Se l'istantanea non esiste, otterrai un codice di stato 404 e un errore di istantanea mancante come:


"errore":
"causa ultima" : [

"tipo": "snapshot_missing_exception",
"motivo": "[backup_repo:snapshot_2021] manca"

],
"tipo": "snapshot_missing_exception",
"motivo": "[backup_repo:snapshot_2021] manca"
,
"stato": 404

Conclusione

In questa guida, abbiamo discusso su come creare snapshot Elasticsearch utilizzando l'API Snapshot. Quello che hai imparato dovrebbe essere sufficiente per consentirti di creare un repository di istantanee, visualizzare gli archivi di istantanee, creare, visualizzare ed eliminare istantanee. Sebbene ci siano personalizzazioni che puoi apportare con l'API, la conoscenza di questa guida dovrebbe essere sufficiente per iniziare.

Grazie per aver letto.

Come utilizzare AutoKey per automatizzare i giochi Linux
AutoKey è un'utilità di automazione desktop per Linux e X11, programmata in Python 3, GTK e Qt. Utilizzando la sua funzionalità di scripting e MACRO, ...
Come mostrare il contatore FPS nei giochi Linux
I giochi Linux hanno avuto una grande spinta quando Valve ha annunciato il supporto Linux per il client Steam e i loro giochi nel 2012. Da allora, mol...
Come scaricare e giocare a Sid Meier's Civilization VI su Linux
Introduzione al gioco Civilization 6 è una versione moderna del concetto classico introdotto nella serie dei giochi Age of Empires. L'idea era abbasta...