Elasticsearch: mettre à jour gestion des snapshots

This commit is contained in:
Alexis Ben Miloud--Josselin 2023-04-19 18:07:01 +02:00
parent b03262846c
commit d30e312372

View file

@ -844,29 +844,27 @@ Dans `/etc/kibana/kibana.yml`, on doit faire les changelents suivants :
Puis redémarrer Kibana `systemctl restart kibana`
## Snapshots et sauvegardes
## _Snapshots_ et sauvegardes
### Configuration des snapshots
Documentation : <http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-snapshots.html>
Il faut définir un répertoire pour stocker les snapshots :
Il faut définir un répertoire où enregistrer les _snapshots_ :
~~~
# install -d -o elasticsearch -g elasticsearch -m 750 /home/backup-elasticsearch
~~~
*Note* : en cas de cluster multi-nœuds, le répertoire de snapshots doit impérativement être partagé entre chaque nœud, classiquement via NFS, car chaque nœud ne gère que ses propres données.
*Attention* : en cas de _cluster_ multi-nœuds, le répertoire de _snapshots_ doit impérativement être partagé entre chaque nœud, classiquement via NFS, car chaque nœud ne gère que ses propres données.
Après avoir créé le répertoire des snapshots et chown(8) sur lusager / groupe elasticsearch.
On précise le répertoire des snapshots dans la configuration `/etc/elasticsearch/elasticsearch.yml` :
Après avoir créé le répertoire à _snapshots_ pour lutilisateur et le groupe `elasticsearch`, on précise le répertoire dans la fichier `/etc/elasticsearch/elasticsearch.yml` :
~~~
path.repo: /home/backup-elasticsearch
~~~
Il faut redémarrer Elasticsearch et créer un ensemble de snapshots (snapshots repository) ainsi :
Il faut redémarrer Elasticsearch et créer un dépôt de _snapshots_ :
~~~
$ curl -H'Content-Type: application/json' -XPUT 'http://localhost:9200/_snapshot/snaprepo' -d '{
@ -879,34 +877,34 @@ $ curl -H'Content-Type: application/json' -XPUT 'http://localhost:9200/_snapshot
{"acknowledged":true}
~~~
On peut ainsi lister les infos :
Pour vérifier :
~~~
$ curl -XGET 'http://localhost:9200/_snapshot/?pretty'
{
"foo" : {
"snaprepo" : {
"type" : "fs",
"settings" : {
"compress" : "true",
"location" : "/home/backup-elasticsearch/foo"
"location" : "/home/backup-elasticsearch"
}
}
}
~~~
Si l'on veut supprimer un ensemble de snapshots :
Si l'on veut supprimer un dépôt de _snapshots_ :
~~~
$ curl -s -XDELETE "localhost:9200/_snapshot/foo?pretty"
$ curl -s -XDELETE "localhost:9200/_snapshot/snaprepo?pretty"
{"acknowledged":true}
~~~
### Gestion des snapshots
Pour créer un snapshot dans l'ensemble **foo** :
Pour créer un _snapshot_ dans le dépôt `snaprepo` :
~~~
$ curl -s -XPUT "localhost:9200/_snapshot/foo/snapshot_test?wait_for_completion=true"
$ curl -s -XPUT "localhost:9200/_snapshot/snaprepo/snapshot_test?wait_for_completion=true"
$ ls -l /home/backup-elasticsearch
-rw-r--r-- 1 elasticsearch elasticsearch 34 Apr 11 01:35 index
@ -915,16 +913,16 @@ drwxr-xr-x 22 elasticsearch elasticsearch 4096 Apr 11 01:35 indices
-rw-r--r-- 1 elasticsearch elasticsearch 419 Apr 11 01:35 snapshot-snapshot_test
~~~
Si l'on tente de créer un snapshot déjà existant, on obtiendra :
Si l'on tente de créer un _snapshot_ déjà existant, on obtiendra :
~~~
{"error":"InvalidsnapshotNameException[[backup:snapshot_test] Invalid snapshot name [snapshot_test], snapshot with such name already exists]","status":400}
~~~
Lister les snapshots :
Lister les _snapshots_ :
~~~
$ curl -XGET "localhost:9200/_snapshot/foo/_all?pretty=true"
$ curl -XGET "localhost:9200/_snapshot/snaprepo/_all?pretty=true"
[...]
"snapshots" : [ {
@ -952,33 +950,17 @@ $ curl -XGET "localhost:9200/_snapshot/foo/_all?pretty=true"
"successful" : 86
~~~
Pour supprimer un snapshot :
Pour supprimer un _snapshot_ :
~~~
$ curl -s -XDELETE "localhost:9200/_snapshot/foo/snapshot_test"
$ curl -s -XDELETE "localhost:9200/_snapshot/snaprepo/snapshot_test"
~~~
### Sauvegarde via snapshots
#### Sauvegarde via _snapshots_
Il faut donc avoir une directive `path.repo: ["/home/backup-elasticsearch"]` prise en compte par Elasticsearch avec un répertoire existant.
Puis on crée
On suppose quon a déjà configuré un dépôt de _snapshots_.
Créons un snapshot repository nommé `snaprepo` :
~~~
$ curl -XPUT 'http://localhost:9200/_snapshot/snaprepo' -d '{
"type": "fs",
"settings": {
"location": "/home/backup-elasticsearch",
"compress": true
}
}'
{"acknowledged":true}
~~~
On peut ainsi créer régulièrement des snapshots pour les sauvegardes.
Pour créer un snapshot toutes les heures, et en conserver 24 en permanence (notion de snapshots "roulants") :
On peut ainsi régulièrement des _snapshots_ pour les sauvegardes. Pour créer un _snapshot_ toutes les heures et en conserver 24 en permanence (notion de _snapshots_ "roulants") :
~~~
$ date=$(date +%H)
@ -986,7 +968,7 @@ $ curl -s -X DELETE "127.0.0.1:9200/_snapshot/snaprepo/h${date}" | grep -v -Fx '
$ curl -s -X PUT "127.0.0.1:9200/_snapshot/snaprepo/h${date}?wait_for_completion=true" -o /tmp/es_snapshot_h${date}.log
~~~
Plus classiquement pour avoir un snapshot par jour :
Plus classiquement pour avoir un _snapshot_ par jour :
~~~
$ date=$(date +%F)
@ -994,7 +976,7 @@ $ curl -s -XDELETE "localhost:9200/_snapshot/snaprepo/snapshot_${date}" | grep -
$ curl -s -XPUT "localhost:9200/_snapshot/snaprepo/snapshot_${date}?wait_for_completion=true" -o /tmp/es_snapshot_${date}.log
~~~
On peut ensuite purger les snapshots vieux de plus de 10 jours ainsi :
On peut ensuite purger les _snapshots_ vieux de plus de 10 jours ainsi :
~~~
$ cd /home/backup-elasticsearch/snaprepo
@ -1002,7 +984,7 @@ $ for i in $(ls -1d snapshot-* | head -n -10 | sed s'/snapshot-snapshot_//g'); d
hot_${i}"; done
~~~
Dans le cas de snapshot pour un ElasticSearsch clusterisé :
Dans le cas de _snapshot_ pour un ElasticSearsch _clusterisé_ :
~~~
# if ss | grep ':nfs' | grep -q 'ip\.add\.res\.s1' && ss | grep ':nfs' | grep -q 'ip\.add\.res\.s2'
@ -1019,18 +1001,18 @@ Dans le cas de snapshot pour un ElasticSearsch clusterisé :
# curl -s -XPUT "localhost:9200/_snapshot/snaprepo/snapshot_${date}?wait_for_completion=true" -o /tmp/es_snapshot_${date}.log
~~~
### Restauration d'un snapshot
### Restauration d'un _snapshot_
Le snapshot doit être listé dans le snapshot repository.
Le _snapshot_ doit être listé dans le dépôt de _snapshot_.
Pour restaurer le snapshot `snapshot.daily` :
Pour restaurer le _snapshot_ `snapshot.daily` :
~~~
$ curl -XPOST "localhost:9200/_snapshot/snaprepo/snapshot.daily/_restore"
{"accepted":true}
~~~
> *Note* : si vous avez un message d'erreur du type `{"error":"SnapshotRestoreException[[snaprepo:snapshot.daily] cannot restore index [foo] because it's open]","status":500}` vous pouvez fermer l'index en faisant `curl -XPOST "localhost:9200/foo/_close`
> *Note* : si vous avez un message d'erreur du type `{"error":"SnapshotRestoreException[[snaprepo:snapshot.daily] cannot restore index [snaprepo] because it's open]","status":500}` vous pouvez fermer l'index en faisant `curl -XPOST "localhost:9200/snaprepo/_close`