Backup & Restore

Faites des backups le plus régulièrement possible.

La procédure de Backup & Restore décrite ci-dessous se base sur le mécanisme de snapshot d’Elasticsearch.

Répertoire de sortie

Pour définir le répertoire où les snapshots sont sauvegardés, ajouter dans le fichier ${ES_HOME}/config/elasticsearch.yml dans la partie “Paths” : path.repo: ["${HOME}/mount/backups", "${HOME}/mount/longterm_backups"]

Puis redémarrer tous les noeuds d’Elasticsearch.

Exécuter ensuite la commande :

$ curl -XPUT 'http://localhost:9200/_snapshot/my_backup' -d '{
	"type": "fs",
	"settings": {
		"location": "${HOME}/mount/backups/my_backup",
		"compress": true
	}
}'

Ou exécuter la commande :

PUT /_snapshot/my_backup
{
	"type": "fs",
	"settings": {
		"location": "${HOME}/mount/backups/my_backup"
	}
}

Pour visualiser les informations du répertoire créé, exécuter la commande :

GET /_snapshot

Enfin pour vérifier que le répertoire créé est fonctionnel, exécuter la commande :

POST /_snapshot/my_backup/_verify

Cette commande permet de lister tous les noeuds où la vérification a été un succès.


Génération d’un snapshot

Un répertoire peut contenir plusieurs snapshots pour un même cluster. Un snapshot est identifié par un nom unique dans un cluster. La commande suivante permet de créer un snapshot dans le répertoire créé précédemment :

PUT /_snapshot/my_backup/nom_du_snapshot?wait_for_completion=true 

Le paramètre wait_for_completion spécifie si oui ou non la demande doit retourner immédiatement après l’initialisation du snapshot (par défaut) ou attendre l’achèvement du snapshot. Pendant l’initialisation du snapshot, des informations sur tous les snapshots précédents sont chargés dans la mémoire, ce qui signifie que pour les grands répertoires cela peut prendre plusieurs secondes (voire quelques minutes).

Par défaut, un snapshot de tous les index ouverts et démarrés est créé. Il est cependant possible de spécifier seulement les index à inclure dans le snapshot grâce à la commande suivante :

PUT /_snapshot/my_backup/nom_du_snapshot
{
	"indices": "index_1,index_2",
	"ignore_unavailable": "true",
	"include_global_state": false
}

Pour voir les informations relatives à un snapshot, la commande à saisir est la suivante :

GET /_snapshot/my_backup/nom_du_snapshot

Enfin, il est possible de supprimer un snapshot avec la commande :

DELETE /_snapshot/my_backup/nom_du_snapshot

Restauration

Un snapshot peut être restauré grâce à la commande suivante :

POST /_snapshot/my_backup/nom_du_snapshot/_restore

Cette commande permet de restaurer tous les index du snapshot. Cependant il est possible de restaurer uniquement certains index, avec la commande suivante :

POST /_snapshot/my_backup/nom_du_snapshot/_restore
{
	"indices": "index_1,index_2",
	"ignore_unavailable": "true",
	"include_global_state": false,
	"rename_pattern": "index_(.+)",
	"rename_replacement": "restored_index_$1"
}

Un index peut être restauré seulement s’il est fermé. Si l’index n’existe pas dans le cluster, il est créé lors de la restauration du snapshot.

Changer les paramètres de l’index pendant la restauration

Pendant la restauration, il est possible de modifier certains paramètres de l’index. Dans l’exemple ci-dessous, l’index index_1 restauré avec 3 répliques et avec un intervalle de rafraichissement par défaut de 1s :

POST /_snapshot/my_backup/nom_du_snapshot/_restore
{
	"indices": "index_1",
	"index_settings": {
		"index.number_of_replicas": 3
	},
	"ignore_index_settings": [
		"index.refresh_interval"
	]
}

Restauration vers un cluster différent

Un snapshot n’est pas spécifique à un cluster. Un snapshot d’un cluster A peut être restauré sur un autre cluster B.

Enregistrer le répertoire contenant le snapshot dans le cluster B et lancer le processus de restauration.

Attention, cependant à la capacité du cluster. Le nombre d’index disponible sur le cluster doit être égal ou supérieur au nombre d’index du snapshot. Si le cluster a une plus petite taille, il est possible de changer les paramètres de l’index durant la restauration en réduisant par exemple le nombre de répliques.

Gestion du snapshot

Statut du snapshot

  • La liste des snapshots en cours d’exécution peut être visible grâce à la commande :

    GET /_snapshot/_status
    
  • Il est possible d’affiner la recherche à un répertoire :

    GET /_snapshot/my_backup/_status
    
  • Il est également possible de voir le statut d’un snapshot précis :

    GET /_snapshot/my_backup/nom_du_snapshot/_status
    

Progression

GET /_snapshot/my_backup/nom_du_snapshot/_status, cette commande permet de visualiser les informations du snapshot avant que celui-ci ne soit arrêté. Ainsi, avec cette commande il est possible d’avoir les informations du snapshot lorsqu’il est en cours d’exécution. Ce qui n’est pas le cas pour la commande GET /_snapshot/my_backup/nom_du_snapshot qui va attendre la fin de l’exécution pour donner les informations.

Arrêt

Si un snapshot a été exécuté par erreur, ou si l’exécution est anormalement longue, il est possible de l’arrêter en utilisant une opération de suppression du snapshot. L’opération va alors arrêter le snapshot avant de le supprimer.

Pour annuler une restauration, les indices en cours de restauration doivent être supprimés. Toutes les données des indices effacés seront également supprimées du cluster.