amélioration de la partie sauvegarde
This commit is contained in:
parent
3102fac872
commit
175d568ba2
|
@ -204,40 +204,146 @@ On check sur la page `/_cat/health` si le status n'est pas en **red**.
|
|||
/usr/lib/nagios/plugins/check_http -I 127.0.0.1 -u /_cat/health?h=st -p 9200 -r 'red' --invert-regex
|
||||
~~~
|
||||
|
||||
## Backup
|
||||
## Snapshost et sauvegardes
|
||||
|
||||
La sauvegarde se fait par snapshots, dans un ou plusiers dépôts.
|
||||
### Configuration des snapshots
|
||||
|
||||
On crée le dépôt sur le filesystem :
|
||||
* Documentation http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-snapshots.html
|
||||
|
||||
Il faut définir un répertoire pour stocker les snapshots :
|
||||
|
||||
~~~
|
||||
# mkdir /home/backup-elasticsearch
|
||||
# chmod 750 /home/backup-elasticsearch
|
||||
# chown elasticsearch: /home/backup-elasticsearch
|
||||
~~~
|
||||
|
||||
*Note :* en cas de cluster multi-nœuds, il faut penser que le filesystem doit être partagé (via NFS par exemple) car chaque nœud ne gère que ses propres données.
|
||||
*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.
|
||||
|
||||
Le dépôt doit être référencé dans la configuration `/etc/elasticsearch/elasticsearch.yml` :
|
||||
On précise le répertoire des snapshots dans la configuration `/etc/elasticsearch/elasticsearch.yml` :
|
||||
|
||||
~~~
|
||||
path.repo: ["/home/backup-elasticsearch"]
|
||||
~~~
|
||||
|
||||
Après restart d'Elasticsearch on lui fait créer le snapshot **evobackup** :
|
||||
Il faut redémarrer Elasticsearch et créer un ensemble de snapshots (snapshots repository) ainsi :
|
||||
|
||||
~~~
|
||||
$ curl -XPUT 127.0.0.1:9200/_snapshot/evobackup -d '{"type": "fs", "settings": {"location": "/home/backup-elasticsearch/evobackup", "compress": true}}'
|
||||
$ curl -XPUT 'http://localhost:9200/_snapshot/foo' -d '{
|
||||
"type": "fs",
|
||||
"settings": {
|
||||
"location": "/home/backup-elasticsearch",
|
||||
"compress": true
|
||||
}
|
||||
}'
|
||||
{"acknowledged":true}
|
||||
~~~
|
||||
|
||||
Enfin, dans un script qui tourne régulièrement, on provoque la fixation d'un snapshot :
|
||||
On peut ainsi lister les infos :
|
||||
|
||||
~~~
|
||||
$ curl -XGET 'http://localhost:9200/_snapshot/?pretty'
|
||||
{
|
||||
"foo" : {
|
||||
"type" : "fs",
|
||||
"settings" : {
|
||||
"compress" : "true",
|
||||
"location" : "/home/backup-elasticsearch/foo"
|
||||
}
|
||||
}
|
||||
}
|
||||
~~~
|
||||
|
||||
Si l'on veut supprimer un ensemble de snapshots :
|
||||
|
||||
~~~
|
||||
$ curl -s -XDELETE "localhost:9200/_snapshot/foo?pretty"
|
||||
{"acknowledged":true}
|
||||
~~~
|
||||
|
||||
### Gestion des snapshots
|
||||
|
||||
Pour créer un snapshot dans l'ensemble **foo** :
|
||||
|
||||
~~~
|
||||
$ curl -s -XPUT "localhost:9200/_snapshot/foo/snapshot_test?wait_for_completion=true"
|
||||
$ ls -l /home/backup-elasticsearch
|
||||
-rw-r--r-- 1 elasticsearch elasticsearch 34 Apr 11 01:35 index
|
||||
drwxr-xr-x 22 elasticsearch elasticsearch 4096 Apr 11 01:35 indices
|
||||
-rw-r--r-- 1 elasticsearch elasticsearch 3006 Apr 11 01:35 metadata-snapshot_test
|
||||
-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 :
|
||||
|
||||
~~~
|
||||
{"error":"InvalidsnapshotNameException[[backup:snapshot_test] Invalid snapshot name [snapshot_test], snapshot with such name already exists]","status":400}
|
||||
~~~
|
||||
|
||||
Lister les snapshots :
|
||||
|
||||
~~~
|
||||
$ curl -XGET "localhost:9200/_snapshot/foo/_all?pretty=true"
|
||||
|
||||
---
|
||||
"snapshots" : [ {
|
||||
"snapshot" : "snapshot_201403190415",
|
||||
"indices" : [...],
|
||||
"state" : "SUCCESS",
|
||||
"start_time" : "2014-03-19T03:15:03.380Z",
|
||||
"start_time_in_millis" : 1395198903380,
|
||||
"end_time" : "2014-03-19T03:16:33.381Z",
|
||||
"end_time_in_millis" : 1395198993381,
|
||||
"duration_in_millis" : 90001,
|
||||
...
|
||||
"snapshot" : "snapshot_201403201222",
|
||||
"indices" : [...],
|
||||
"state" : "SUCCESS",
|
||||
"start_time" : "2014-03-20T11:22:07.441Z",
|
||||
"start_time_in_millis" : 1395314527441,
|
||||
"end_time" : "2014-03-20T11:22:56.176Z",
|
||||
"end_time_in_millis" : 1395314576176,
|
||||
"duration_in_millis" : 48735,
|
||||
"failures" : [ ],
|
||||
"shards" : {
|
||||
"total" : 86,
|
||||
"failed" : 0,
|
||||
"successful" : 86
|
||||
~~~
|
||||
|
||||
Pour supprimer un snapshot :
|
||||
|
||||
~~~
|
||||
$ curl -s -XDELETE "localhost:9200/_snapshot/foo/snapshot_test"
|
||||
~~~
|
||||
|
||||
### Sauvegarde via snapshots
|
||||
|
||||
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") :
|
||||
|
||||
~~~{.bash}
|
||||
$ date=$(date +%H)
|
||||
$ curl -s -X DELETE "127.0.0.1:9200/_snapshot/evobackup/h${date}" | grep -v acknowledged..true
|
||||
$ curl -s -X PUT "127.0.0.1:9200/_snapshot/evobackup/h${date}?wait_for_completion=true" -o /tmp/es_snapshot_h${date}.log
|
||||
$ curl -s -X DELETE "127.0.0.1:9200/_snapshot/foo/h${date}" | grep -v acknowledged..true
|
||||
$ curl -s -X PUT "127.0.0.1:9200/_snapshot/foo/h${date}?wait_for_completion=true" -o /tmp/es_snapshot_h${date}.log
|
||||
~~~
|
||||
|
||||
Ici, on crée un snapshot portant le numéro de l'heure courante. Il est supprimé avant d'être recréé afin d'avoir des snapshots "roulants".
|
||||
Plus classiquement pour avoir un snapshot par jour :
|
||||
|
||||
~~~
|
||||
$ date=$(date +%Y-%m-%d)
|
||||
$ curl -s -XDELETE "localhost:9200/_snapshot/foo/snapshot_${date}" | grep -v acknowledged..true
|
||||
$ curl -s -XPUT "localhost:9200/_snapshot/foo/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 :
|
||||
|
||||
~~~
|
||||
$ cd /home/backup-elasticsearch/foo
|
||||
$ for i in $(ls -1d snapshot-* | head -n -10 | sed s'/snapshot-snapshot_//g'); do curl -s -XDELETE "localhost:9200/_snapshot/foo/snaps
|
||||
hot_${i}"; done
|
||||
~~~
|
||||
|
||||
## Principe de fonctionnement
|
||||
|
||||
|
@ -248,7 +354,7 @@ En plaçant à la fin d'une URI `?pretty=true` on pourra obtenir un JSON format
|
|||
|
||||
### Avec une base de données d'exemple
|
||||
|
||||
Nous allons utiliser une BDD d'exemple pour faire des tests.
|
||||
Nous allons utiliser une base de données d'exemple pour faire des tests.
|
||||
|
||||
Télécharger, <https://github.com/andrewvc/ee-datasets/archive/master.zip>, décompresser l'archive et exécuter le programme Java qui va injecter la BDD "movie_db" dans votre cluster ES.
|
||||
|
||||
|
@ -264,7 +370,7 @@ Pour consulter tout son contenu :
|
|||
$ curl http://localhost:9200/movie_db/_search?pretty=true
|
||||
~~~
|
||||
|
||||
### En créant une BDD
|
||||
### En créant une base de données
|
||||
|
||||
#### Opérations CRUD
|
||||
|
||||
|
@ -384,126 +490,6 @@ $ curl -X POST localhost:9200/planet/hacker/_search?pretty=true -d '
|
|||
On obtiens 2 résultats, _jean-michel_ et _mark_. Pourtant le hobby de _jean-michel_ n'est pas _rollerblading_ mais _rollerblades_, alors comment Elastic Search l'a trouvé ?
|
||||
C'est parce qu’il comprend que _rollerblading_ et _rollerblades_ sont très similaires ! Cela grâce à l'analyseur de type « snowball » que nous avons indiqué lors de la création du type _hobbies_. Cela indique à ES qu'il s'agit non pas d'une chaîne de caractère banale mais du texte Anglais (Gestion des autres langues ?).
|
||||
|
||||
## snapshots
|
||||
|
||||
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-snapshots.html
|
||||
|
||||
Création d'un répertoire pour accueillir les snapshots :
|
||||
|
||||
~~~
|
||||
# mkdir /home/backup-elasticsearch
|
||||
# chown elasticsearch:elasticsearch /home/backup-elasticsearch
|
||||
# chmod 750 /home/backup-elasticsearch
|
||||
# vim /etc/elasticsearch/elasticsearch.yml
|
||||
|
||||
path.repo: ["/home/backup-elasticsearch"]
|
||||
|
||||
$ curl -XPUT 'http://localhost:9200/_snapshot/backup' -d '{
|
||||
"type": "fs",
|
||||
"settings": {
|
||||
"location": "/home/backup-elasticsearch",
|
||||
"compress": true
|
||||
}
|
||||
}'
|
||||
{"acknowledged":true}
|
||||
~~~
|
||||
|
||||
ATTENTION, dans le cadre d'un cluster, chaque noeud écrira ses données
|
||||
dans son répertoire local… et ne les effacera pas en cas de DELETE.
|
||||
Il faut donc centraliser ce répertoire via un montage NFS !
|
||||
|
||||
Vérifier les infos du répertoire pour les snapshots :
|
||||
|
||||
~~~
|
||||
$ curl -XGET 'http://localhost:9200/_snapshot/?pretty'
|
||||
|
||||
---
|
||||
{
|
||||
"backup" : {
|
||||
"type" : "fs",
|
||||
"settings" : {
|
||||
"compress" : "true",
|
||||
"location" : "/home/backup-elasticsearch"
|
||||
}
|
||||
}
|
||||
}
|
||||
~~~
|
||||
|
||||
Supprimer les infos sur le répertoire des snapshots :
|
||||
|
||||
~~~
|
||||
$ curl -s -XDELETE "localhost:9200/_snapshot/backup?pretty"
|
||||
|
||||
---
|
||||
{"acknowledged":true}
|
||||
~~~
|
||||
|
||||
Créer un snapshot :
|
||||
|
||||
~~~
|
||||
$ curl -s -XPUT "localhost:9200/_snapshot/backup/snapshot_test?wait_for_completion=true"
|
||||
$ ls -l /home/backup-elasticsearch
|
||||
-rw-r--r-- 1 elasticsearch elasticsearch 34 Apr 11 01:35 index
|
||||
drwxr-xr-x 22 elasticsearch elasticsearch 4096 Apr 11 01:35 indices
|
||||
-rw-r--r-- 1 elasticsearch elasticsearch 3006 Apr 11 01:35 metadata-snapshot_test
|
||||
-rw-r--r-- 1 elasticsearch elasticsearch 419 Apr 11 01:35 snapshot-snapshot_test
|
||||
~~~
|
||||
|
||||
Supprimer un snapshot :
|
||||
|
||||
~~~
|
||||
$ curl -s -XDELETE "localhost:9200/_snapshot/backup/snapshot_test"
|
||||
~~~
|
||||
|
||||
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 :
|
||||
|
||||
~~~
|
||||
$ curl -XGET "localhost:9200/_snapshot/backup/_all?pretty=true"
|
||||
|
||||
---
|
||||
"snapshots" : [ {
|
||||
"snapshot" : "snapshot_201403190415",
|
||||
"indices" : [...],
|
||||
"state" : "SUCCESS",
|
||||
"start_time" : "2014-03-19T03:15:03.380Z",
|
||||
"start_time_in_millis" : 1395198903380,
|
||||
"end_time" : "2014-03-19T03:16:33.381Z",
|
||||
"end_time_in_millis" : 1395198993381,
|
||||
"duration_in_millis" : 90001,
|
||||
...
|
||||
"snapshot" : "snapshot_201403201222",
|
||||
"indices" : [...],
|
||||
"state" : "SUCCESS",
|
||||
"start_time" : "2014-03-20T11:22:07.441Z",
|
||||
"start_time_in_millis" : 1395314527441,
|
||||
"end_time" : "2014-03-20T11:22:56.176Z",
|
||||
"end_time_in_millis" : 1395314576176,
|
||||
"duration_in_millis" : 48735,
|
||||
"failures" : [ ],
|
||||
"shards" : {
|
||||
"total" : 86,
|
||||
"failed" : 0,
|
||||
"successful" : 86
|
||||
~~~
|
||||
|
||||
Pour faire des backups on pourra utiliser un script comme celui-ci :
|
||||
|
||||
~~~
|
||||
# Clean old snapshots (keep 10 snaps).
|
||||
cd /home/backup-elasticsearch
|
||||
for i in $(ls -1d snapshot-* | head -n -10 | sed s'/snapshot-snapshot_//g'); do curl -s -XDELETE "localhost:9200/_snapshot/backup/snaps
|
||||
hot_${i}"; done
|
||||
# Take a snapshot on master node.
|
||||
date=$(date +%Y-%m-%d)
|
||||
curl -s -XDELETE "localhost:9200/_snapshot/backup/snapshot_${date}" | grep -v acknowledged..true
|
||||
curl -s -XPUT "localhost:9200/_snapshot/backup/snapshot_${date}?wait_for_completion=true" -o /tmp/es_snapshot_${date}.log
|
||||
~~~
|
||||
|
||||
## FAQ
|
||||
|
||||
|
|
Loading…
Reference in New Issue