txs:infra-p18

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
txs:infra-p18 [2018/03/27 13:50] – [Rotation des sauvegardes] algilbertxs:infra-p18 [2018/05/19 17:03] – [TX Printemps 2018 : Backup] algilber
Ligne 1: Ligne 1:
-====== TX Printemps 2018 : Backup, Docker et Sécurité ======+====== TX Printemps 2018 : Sauvegarde des base de données et rotation ======
  
-===== Rotation des sauvegardes =====  
  
-=== Introduction === 
  
-Le conteneur chargé d'effectuer la rotation des sauvegardes est //backup-rotation//. Il se configure à l'aide du fichier //backup_data.json// qui doit être situé dans le même répertoire que le dockerfile. La création du conteneur se fait ensuite en compilant le dockerfile associé ''docker build .''+==== Configuration des sauvegardes et des rotations ====
  
 +=== Introduction === 
 +
 +Les conteneurs chargés d'effectuer la sauvegarde des services et la rotation des sauvegardes se nomment respectivement : //pica-backup// et //backup-rotation//. Un système de configuration centralisé entre les deux conteneurs a été écrit, afin de pouvoir en même temps définir un service à sauvegarder et configurer les rotations. Le fichier //backup_data.json// permet d'écrire cette configuration et doit être situé dans le même répertoire que les //dockerfiles// des deux conteneurs. 
 + 
 === Configuration === === Configuration ===
  
-La configuration du conteneur consiste à définir les fréquences de rotation pour chaque service installé+La configuration des conteneurs consiste à définir les services installés et les fréquences de rotation de leurs sauvegardes
  
 Exemple de fichier JSON : Exemple de fichier JSON :
  
-<code>+<code javascript backup_data.json>
 { {
   "wekan":   "wekan":
Ligne 24: Ligne 26:
       "Cron" : "0 * * * *",       "Cron" : "0 * * * *",
       "Init-Backup" : "0",       "Init-Backup" : "0",
-      "Backup-rota":+      "Backup-Rota":
           {           {
               "Hour" : 24,               "Hour" : 24,
Ligne 37: Ligne 39:
       "Port": "3306",       "Port": "3306",
       "User": "root",       "User": "root",
-      "Password": "lolilolilol",+      "Password": "mot_de_passe",
       "Database": "--all-databases",       "Database": "--all-databases",
       "Type": "mysql",       "Type": "mysql",
Ligne 44: Ligne 46:
       "Options" : "--single-transaction",       "Options" : "--single-transaction",
       "Init-Backup" : "0",       "Init-Backup" : "0",
-      "Backup-rota":+      "Backup-Rota":
           {           {
               "Hour" : 24,               "Hour" : 24,
Ligne 55: Ligne 57:
 </code>  </code> 
  
-Cette configuration indique que l'on souhaite effectuer de la rotation de sauvegarde pour deux services : //wekan-db// et //etherpad-db//. Chaque service doit définir un certain nombre d'attributs obligatoires +Cette configuration indique que l'on souhaite effectuer la sauvegarde et de la rotation de sauvegarde pour deux services : //wekan-db// et //etherpad-db//. Chaque service peut définir un certain nombre d'attributs : 
  
   * "Host": nom du service indiqué dans le fichier //docker-compose.yml// ;   * "Host": nom du service indiqué dans le fichier //docker-compose.yml// ;
   * "Port": port utilisé par le serveur de base de données ;   * "Port": port utilisé par le serveur de base de données ;
 +  * "User" : nom d'utilisateur pour se connecter à la base de données ; 
 +  * "Password" : mot de passe de la base de données ; 
   * "Database": nom de la base de données ;    * "Database": nom de la base de données ; 
-  * "Type": type de la base de données ; +  * "Type": type de la base de données (mongo, mysql, postgre);
   * "Folder": nom du dossier de sauvegarde du service ;   * "Folder": nom du dossier de sauvegarde du service ;
-  * "Backup-rota": période de rotation voulue. +  * "Cron" : indicateur de temps cron indiquant à quelle fréquence sont enregistrées les backups ; 
 +  * "Backup-rota": période de rotation voulue, il est possible de définir 4 paramètres //Hour//, //Day//, //Week//, //Month//.
  
-=== Test du conteneur de rotation ===+Le fichier de configuration se trouve actuellement sur pica01-test dans le dossier 
 +<code bash> 
 + /DATA/CONFIG 
 +</code>  
 + 
 +==== Principe de fonctionnement de la rotation des sauvegardes ==== 
 + 
 +Le conteneur de rotation des sauvegardes utilise le module Python [[https://rotate-backups.readthedocs.io/en/latest/|rotate-backups]]. Ce module s'installe par l'intermédiaire de //pip// et s'utilise en ligne de commande. //rotate-backups// permet de définir des périodes de rotations selon les dernières minutes, heures, jours, semaines, mois et années par rapport à la date d'exécution de la commande. Par exemple, si on spécifie uniquement le paramètre heure //-H// :  
 + 
 +<code bash> 
 +rotate-backups -H 24 
 +</code> 
 + 
 +On indique alors à rotate-backups que l'on souhaite conserver la sauvegarde la plus récente (par défaut) sur chaque heure pendant les dernières 24h. Le module Python reconnaît le format de date dans le nom des fichiers de sauvegarde et les convertit automatiquement en objet Python //datetime// pour déterminer les sauvegardes à conserver.  
 + 
 +Voici un autre exemple utilisant tous les paramètres de temps (sauf minutes) de la commande rotate-backups :  
 + 
 +<code bash> 
 +rotate-backups -H 24 -d 7 -w 4 -Y 2 
 +</code> 
 + 
 +L'interprétation de la commande est la suivante : on souhaite conserver la sauvegarde la plus récente effectuée sur chaque heure pendant les dernières 24h (on conserve 24 backups si on en a au moins une par heure) , la sauvegarde la plus récente effectuée chaque jour pendant les 7 derniers jours (on conserve 7 backups si on en a au moins une par jour), la sauvegarde la plus récente effectuée sur chaque semaine pendant les 4 dernières semaines (on conserve 4 backups si on en a au moins une par semaine), et enfin la sauvegarde la plus récente effectuée chaque année pendant les 2 dernières années (on en a au moins deux si on a réalisé au moins une sauvegarde par année).  
 + 
 +Le rôle du conteneur //backup-rotation// est de créer une tâche cron horaire pour chaque service défini dans le fichier de configuration JSON avec les périodes de rotation spécifiées.  
 + 
 +==== Test du conteneur de rotation ====
  
 Le script //fake_backups.py// permet de générer des fichiers vides, ayant leurs noms formatés comme suit : **AAAA-MM-JJHHmmSS** et comportant l'extension //.tar.gz//. Ces fichiers permettent de simuler des sauvegardes effectuées par le conteneur backup-rotation sans utiliser inutilement de l'espace disque. Le script reçoit deux paramètres : //-f// pour indiquer le chemin absolu du dossier dans lequel générer les fichiers et //-n// afin d'indiquer le nombre de fichiers que l'on souhaite créer. À partir du paramètre //-n// le script crée le premier fichier en le nommant selon la date actuelle, puis remonte d'une heure dans le temps afin de nommer le reste des fichiers jusqu'à arriver au nombre de fichiers spécifié par le paramètre //-n// Le script //fake_backups.py// permet de générer des fichiers vides, ayant leurs noms formatés comme suit : **AAAA-MM-JJHHmmSS** et comportant l'extension //.tar.gz//. Ces fichiers permettent de simuler des sauvegardes effectuées par le conteneur backup-rotation sans utiliser inutilement de l'espace disque. Le script reçoit deux paramètres : //-f// pour indiquer le chemin absolu du dossier dans lequel générer les fichiers et //-n// afin d'indiquer le nombre de fichiers que l'on souhaite créer. À partir du paramètre //-n// le script crée le premier fichier en le nommant selon la date actuelle, puis remonte d'une heure dans le temps afin de nommer le reste des fichiers jusqu'à arriver au nombre de fichiers spécifié par le paramètre //-n//
  
 Exemple :  Exemple : 
-<code>+<code bash>
 ./fake_backups.py -f /root -n 4 ./fake_backups.py -f /root -n 4
 </code> </code>
Ligne 83: Ligne 113:
 2018-03-26184318.tar.gz 2018-03-26184318.tar.gz
  
 +
 +Pour tester ensuite le conteneur de rotation, il suffit d'indiquer le dossier dans lequel ont été générées les fausses backups dans le fichier //backup_data.json// en spécifiant les périodes de rotations voulues. 
 +
 +Exemple de configuration de test : 
 +
 +<code javascript backup_data.json>
 +{
 +"test_rotation":
 +    {
 +      "Folder": "test_rotation", # Dossier /DATA/BACKUP/test_rotation/
 +      "Backup-Rota":
 +          {
 +              "Hour" : 24,
 +              "Day" : 7,
 +              "Week" : 4,
 +              "Month" : 12
 +          }
 +    }
 +}      
 +</code>