Outils pour utilisateurs

Outils du site


backup

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édentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
backup [2020/05/14 21:05] capslockbackup [2020/10/05 22:16] – typo jocelynd
Ligne 3: Ligne 3:
 # Sauvegardes # Sauvegardes
  
-## Intro+</markdown> 
 + 
 +<WRAP center round todo 60%> 
 +Page en cours de rédaction 
 +</WRAP> 
 + 
 + 
 +<markdown> 
 + 
 +## Mise en place 
 + 
 +### Intro
  
 Les backups sont effectués à l'aide de [borgbackup](https://www.borgbackup.org/) et sont déployés via notre [playbook](https://git.faimaison.net/faimaison-adminsys/adminsys/-/tree/master/ansible) [Ansible](https://docs.ansible.com/) Les backups sont effectués à l'aide de [borgbackup](https://www.borgbackup.org/) et sont déployés via notre [playbook](https://git.faimaison.net/faimaison-adminsys/adminsys/-/tree/master/ansible) [Ansible](https://docs.ansible.com/)
  
-Les secrets sont stockés dans un trousseau Keyringer. Comme le niveau des prérequis à l'exécution des roles de sauvegarde est assez haut, on vous a préparé un petit script afin de vérifier très rapidement si votre machine est configurée correctement +Les secrets sont stockés dans un trousseau Keyringer. Comme le niveau des prérequis à l'exécution des rôles de sauvegarde est assez haut, on vous a préparé un petit script afin de vérifier très rapidement si votre machine est configurée correctement 
  
 ```bash ```bash
Ligne 16: Ligne 27:
 Il est important de noter que l'ensemble des adminsys ne peuvent pas déployer les backups de toutes les machines de FAImaison. Le prérequis pour pouvoir déployer un backup c'est de pouvoir lire les secrets de la machine à sauvegarder dans Keyringer : si t'es pas admin de la machine t'es pas sensé pouvoir accéder à ces informations: simple. Il est important de noter que l'ensemble des adminsys ne peuvent pas déployer les backups de toutes les machines de FAImaison. Le prérequis pour pouvoir déployer un backup c'est de pouvoir lire les secrets de la machine à sauvegarder dans Keyringer : si t'es pas admin de la machine t'es pas sensé pouvoir accéder à ces informations: simple.
  
-## première étape: ajouter aux serveurs de sauvegarde la nouvelle machine à sauvegarder 
  
-Mettre à jour la variable  une entrée à la variable `borg_server_backup_clients` dans `group_vars/borg_servers.yml`:+### Étape 1 : configurer les sauvegardes de la machine que l'on veut sauvegarder
  
-```yaml +Editez ou créez le fichier de configuration dans le `host_vars` de votre machine (par exemple `host_vars/toto.faimaison.net/toto_backups.yml`):
-borg_server_backup_clients: +
-  - name: ""  # nom de la machine à sauvegarder. typiquement on mettra "toto" si on veut sauvegarder "toto.faimaison.net+
-    ssh_pubkey""  # clé ssh utilisée par "toto" pour se connecter aux serveurs de backup +
-```+
  
-## seconde étape: jouer le role sur les backup_servers+</markdown>
  
-```bash +<WRAP center round info 60%> 
-ansible-playbook --diff -l backup_servers -t borg playbook-fma.yml +Cet exemple sauvegarde vers UN serveur, mais on peut aussi choisir de lister plusieurs cibles dans la liste ''borg_client_targets''
-```+</WRAP>
  
-## troisième étape: configurer les sauvegardes de la machine 
  
-Editez ou créez le fichier de configuration dans le `host_vars` de votre machine (par exemple `host_vars/toto.faimaison.net/toto_backups.yml`):+<markdown> 
  
 ```yaml ```yaml
-# par défaut, on sauvegarde les chemins spécifiés dans la variable borg_clients_common_include_paths de group_vars/borg_clients.yml. les chemins ci-dessous seront ajoutés à la liste borg_clients_common_include_paths 
-toto_supplementary_include_paths: 
-  - "/srv/transparency/" 
-  - "~postgres/etherpad.sql" 
- 
 borg_client_targets: borg_client_targets:
-    # remote_unix_user doit avoir la même valeur que ce que vous avez mis dans borg_server_backup_clients.name dans le fichier group_vars/borg_servers.yml +  - # OBLIGATOIRE : serveur où on souhaite envoyer nos sauvegardes. ce serveur doit être membre du groupe ansible "borg_servers"
-  remote_unix_user: "{{ borg_default_remote_unix_user }}" +
-    nom du dépot, on choisira ici le nom de la machine sans .faimaison.net +
-    repository_name"toto" +
-    # serveur où on souhaite envoyer nos sauvegardes. ce serveur doit être membre du groupe ansible "borg_servers"+
     remote_server: "serveur-destination-sauvegardes.faimaison.net"     remote_server: "serveur-destination-sauvegardes.faimaison.net"
-    # chemins à sauvegarder, on veut les chemins "toto_supplementary_include_paths" en plus des chemins communs à toutes les machines +     
-    source_paths: "{{ borg_clients_common_include_paths + toto_supplementary_include_paths }}+    FACULTATIF : chemins à sauvegarder  
-    # liste de fichiers à excludeici on a choisi d'utiliser les chemins communs à toutes les machines (voir "borg_clients_common_exclude_paths" dans "group_vars/borg_clients.yml"+    # (en plus des chemins déjà listés dans le base_source_path de group_vars/borg_clients.yml) 
 +    extra_source_paths: 
 +      - "/srv/transparency/" 
 +      - "~postgres/etherpad.sql" 
 + 
 +    # FACULTATIF : liste de fichiers/dossier à exclure 
 +    # par défaututilisera la valeur dans "group_vars/borg_clients.yml"
     exclude_patterns: "{{ borg_clients_common_exclude_paths }}"     exclude_patterns: "{{ borg_clients_common_exclude_paths }}"
-    # ici on a une liste de commandes à exécuter avant de lancer la sauvegarde. ici on fera les dump de base de données par exemple+     
 +    FACULTATIF : ici on a une liste de commandes à exécuter avant de lancer la sauvegarde. 
 +    # dans cet exemple, on fera les dump de base de données par exemple
     before_backup_commands:     before_backup_commands:
       -  "sudo -i -u postgres pg_dump -U postgres -F p etherpad > ~postgres/etherpad.sql"       -  "sudo -i -u postgres pg_dump -U postgres -F p etherpad > ~postgres/etherpad.sql"
-    # ici on a une liste de commande à exécuter après la sauvegarde, typiquement on fera un peu de nettoyage (supprimer les dump de base de données)+ 
 +    FACULTATIF : ici on a une liste de commande à exécuter après la sauvegarde,  
 +    # typiquement on fera un peu de nettoyage (supprimer les dump de base de données)
     after_backup_commands:     after_backup_commands:
         - "rm -f ~postgres/backup-etherpad.sql"         - "rm -f ~postgres/backup-etherpad.sql"
-    # ici on définit quand le backup démarre. c'est la syntaxe cron classique https://docs.ansible.com/ansible/latest/modules/cron_module.html+ 
 +    RECOMMANDÉ : ici on définit quand le backup démarre.  
 +    # Il est recommandé de réfléchir à un horaire où la machine est au repos 
 +    # syntaxe et variables cron classique https://docs.ansible.com/ansible/latest/modules/cron_module.html
     when:     when:
-        month: "*" 
-        day: "*" 
         hour: "1"         hour: "1"
         minute: "0"         minute: "0"
 ``` ```
  
-## quatrième étape: jouer le role sur la machine à sauvegarder+### Étape 2 : ajouter la machine à sauvegarder au groupe borg_clients 
 + 
 +Dans `ansible_hosts` ajouter la machine à sauvegarder au groupe `borg_clients`. 
 + 
 +### Étape 3 : jouer le rôle sur la machine à sauvegarder
  
 ```bash ```bash
-ansible-playbook --diff -l toto.faimaison.net -t borg playbook-fma.yml+ansible-playbook -K --diff -l toto.faimaison.net -t borg-client playbook-fma.yml
 ``` ```
 +
 +### Étape 4: ajouter aux serveurs de sauvegarde la nouvelle machine à sauvegarder
 +
 +Mettre à jour la variable  une entrée à la variable `borg_server_backup_clients` dans `group_vars/borg_servers.yml`:
 +
 +```yaml
 +borg_server_backup_clients:
 +  - name: "toto"  # nom de la machine à sauvegarder
 +    ssh_pubkey: ""  # clef de sauvegarde (contenue dans ssh/borg-keys/toto.faimaison.net.pub)
 +```
 +
 +### Étape 5 : vérifier que tous les serveurs de backups sont dans le groupe backup_servers
 +
 +Dans `ansible_hosts` vérifier que le groupe `backup_servers` connait bien toutes les machines de backups de faimaison.
 +
 +### Étape 6 : jouer le role sur les backup_servers
  
 </markdown> </markdown>
  
 +<WRAP center round important 60%>
 +Il faut avoir accès au serveur de sauvegarde visé pour pouvoir effectuer cette étape… Ou bien la faire faire par quelqu'un qui y a accès.
 +</WRAP>
  
-====== TOUT CE QUI EST EN DESSOUS DE CE TITRE EST DEPRECIE ======+<markdown>
  
 +```bash
 +ansible-playbook --diff -K -l borg_servers -t borg-server playbook-fma.yml
 +```
  
-===== trompe-souris =====+## Procédures manuelles
  
-Les backups sont executé par un simple script bash qui tourne quotidiennement : ///etc/cron.daily/backup//+Ces procédures nécessitent que les sauvegardes aient été configurées conformément aux sections précédentes, et les infos bien commitées dans le dépôt adminsys.
  
-Le principe consiste à faire un backup du maximum de choses (bdd, site, configurationet les déposer sur // /home/faimaison-backup //.+### PROCÉDURE : Récupérer d'une sauvegarde plantée (lock)
  
-Ensuite, moyennant l'installation d'une clé ssh, un adminsys peut récupérer le contenu de ce répertoire pour en faire un copie locale en utilisant son application préférée (rdiff-backup, duplicity, script maison, etc.)+</markdown>
  
 +<WRAP center round tip 60%>
 +On prend ici l'exemple de la machine //bambelle.faimaison.net//, qui pousserait ses sauvegardes sur la machine //carlota.faimaison.net//. Il faudra adapter les noms de fichiers au cas réel…
 +</WRAP>
  
-Pour l'instant est sauvegardé :+<markdown>
  
-  * bdd pour le si +On peut avoir ce genre de message remonté par cron dans un mail par exemple :
-  * conf dns et postfix +
-  * sites du wiki et de l'assos +
-  * la configuration des mailing-list et les archives+
  
-===== Big Backup serveur ===== +> Remote: borg.locking.LockTimeout: /var/borg-backups/repos/bambelle/lock
-4U 48Go de RAM 35 Go de disques en RAID6+
  
-2 approches de la sauvegarde+Cela veut dire qu'une sauvegarde a crashée, et par prudence un « lock » est laissé… Et empêche toute sauvegarde ultérieure m(À moins qu'un processus borg soit toujours en cours d'exécution (`sudo ps aux|grep borg` pour s'en assurer), il faut « casser » le lock pour que les sauvegardes puissent reprendre :
-  * local avec [Borg[https://www.borgbackup.org]] 10 Go de RAM / 15To (VM "prod" et fichiers) +
-  * en VMsoit 150 VM (à 256 Mo de RAM et 40Go avec une moyenne de 150 Go).+
  
  
-Lien vers la solution de backup [[backup:borg|BORG]]+On commence par ouvrir un « shell borg » avec toutes les variables d'env définies((plus d'infos avec `--help`)). 
 + 
 +``` 
 +user@bambelle $ sudo /opt/borgbackup-client/carlota.faimaison.net_bambelle.sh -c 
 +[borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$ # 
 +``` 
 + 
 +On vérifie ensuite qu'on est bien bloqué par le lock  
 +``` 
 +[borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$ # borg list $REPOSITORY 
 +[… snip : l'erreur est très longue] 
 +Remote: borg.locking.LockTimeout: /var/borg-backups/repos/bambelle/lock.exclusive 
 +[…] 
 +``` 
 + 
 +Il a pas l'air content ! À condition qu'aucun autre process borg ne tourne, on "casse" le lock 
 +``` 
 +[borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$ # borg break-lock $REPOSITORY 
 +``` 
 + 
 +Puis on vérifie que ça va mieux : 
 + 
 +``` 
 +[borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$  # borg list $REPOSITORY 
 +bambelle-2020-05-17-02-00            Sun, 2020-05-17 02:00:11 
 +bambelle-2020-05-24-02-00            Sun, 2020-05-24 02:00:10 
 +bambelle-2020-05-31-02-00            Sun, 2020-05-31 02:00:11 
 +bambelle-2020-06-07-02-00            Sun, 2020-06-07 02:00:10 
 +bambelle-2020-06-08-02-00            Mon, 2020-06-08 02:00:10 
 +bambelle-2020-06-09-02-00            Tue, 2020-06-09 02:00:11 
 +bambelle-2020-06-10-02-00            Wed, 2020-06-10 02:00:10 
 +bambelle-2020-06-11-02-00            Thu, 2020-06-11 02:00:10 
 +bambelle-2020-06-12-02-00            Fri, 2020-06-12 02:00:10 
 +bambelle-2020-06-13-02-00            Sat, 2020-06-13 02:00:11 
 +bambelle-2020-06-14-02-00            Sun, 2020-06-14 02:00:10 
 +``` 
 + 
 +La prochaine sauvegarde devrait pouvoir s'effectuer comme il faut. Si on ne veut pas attendre, on peut aussi créer une sauvegarde manuelle (cf ci-après). 
 + 
 +### PROCÉDURE : Créer une sauvegarde manuellement 
 + 
 +Avant certaines opérations délicates, on peut souhaiter réaliser une sauvegarde manuelle. 
 + 
 +1. se connecter sur la machine à sauvegarder 
 +2. passer root `sudo su` 
 +3. Exécuter le script de sauvegarde `/opt/<machine_source>_<machine_cible>.sh` 
 + 
 +### PROCÉDURE : Récupérer totalement une sauvegarde depuis la machine concernée 
 + 
 +</markdown> 
 +<WRAP center round important 60%> 
 +Cette procédure restaure l'intégralité d'une sauvegarde, en écrasant éventuellement des fichiers en place sur la machine. Pour faire plus fin, regarder la [[https://borgbackup.readthedocs.io/en/stable/usage/extract.html|doc de borg extract]] ou utiliser [[https://borgbackup.readthedocs.io/en/stable/usage/mount.html|borg mount]] qui permet de monter une sauvegarde distante pour l'examiner ou y piocher quelques fichiers. 
 +</WRAP> 
 + 
 +<markdown> 
 + 
 +1. se connecter sur la machine à sauvegarder 
 +2. passer root `sudo su` 
 +3. Exécuter le script de sauvegarde `/opt/<machine_source>_<machine_cible>.sh` 
 +/opt/<machine_source>_<machine_cible>.sh -c  
 +4. lister les sauvegardes disponibles : 
 +``` 
 +[borg@carlota.faimaison.net:repos/bambelle ]$  # borg list $REPOSITORY 
 +bambelle-2020-05-17-02-00            Sun, 2020-05-17 02:00:11 
 +bambelle-2020-05-24-02-00            Sun, 2020-05-24 02:00:10 
 +bambelle-2020-05-31-02-00            Sun, 2020-05-31 02:00:11 
 +bambelle-2020-06-07-02-00            Sun, 2020-06-07 02:00:10 
 +bambelle-2020-06-10-02-00            Wed, 2020-06-10 02:00:10 
 +bambelle-2020-06-11-02-00            Thu, 2020-06-11 02:00:10 
 +bambelle-2020-06-12-02-00            Fri, 2020-06-12 02:00:10 
 +bambelle-2020-06-13-02-00            Sat, 2020-06-13 02:00:11 
 +bambelle-2020-06-14-02-00            Sun, 2020-06-14 02:00:10 
 +bambelle-2020-10-04-02-00            Sun, 2020-10-04 02:00:09 
 +bambelle-2020-10-05-02-00            Mon, 2020-10-05 02:00:11 
 +``` 
 +Repérer le nom de l'archive qui nous intéresse, par exemple `bambelle-2020-10-05-02-00`. 
 +5. Repasser root (en conservant les variables d'environnement), pour avoir le droit de restaurer la sauvegarde dans le système de fichiers. 
 +``` 
 +[borg@carlota.faimaison.net:repos/bambelle ]$  # su 
 +``` 
 +6. Se rendre à la racine (sinon on va restaurer notre sauvegarde dans un sous-dossier) 
 +``` 
 +root@bambelle # cd / 
 +``` 
 +7. Lancer la restauration de l'archive choisie. 
 + 
 +``` 
 +root@bambelle # borg extract $REPOSITORY::bambelle-2020-10-05-02-00 
 +``` 
 + 
 +Des opérations supplémentaires peuvent ensuite être nécessaire selon le type de fichiers restaurés (ex: restaurer un fichier .sql dans une base). 
 + 
 + 
 +### PROCÉDURE : Récupérer une sauvegarde depuis une autre machine 
 + 
 +On doit récupérer : 
 + 
 +  - le dépôt borg qui contient les sauvegardes de la machine 
 +  - la passphrase du dépôt 
 + 
 +Le dépôt (repository) est contenu sur le serveur de sauvegarde ((actuellement, carlota -- //Jocelyn 2020/10/05 23:53//)) dans le répertoire **/var/borg-backups/repos/**. 
 + 
 +On va imaginer qu'on veut récupérer les sauvegardes de la machine bambelle.faimaison.net dans le cas ou celle-ci aurait-été détruite. 
 + 
 +1. Récupérer le dossier */var/borg-backups/repos/bambelle*  depuis le serveur de sauvegarde (par ex en demandant gentiment à un·e admin du serveur de sauvegarde). Ici on va considérer qu'on le stocke en local dans *~/repo_bambelle* 
 +2. Récupérer la passphrase du dépôt et la stocker dans la variable qui va bien : 
 +``` 
 +BORG_PASSPHRASE=$(keyringer fma-machines decrypt noyau/bambelle.faimaison.net/borg/repository_passphrase.asc) 
 +``` 
 +3. Lister les archives contenues dans le dépôt : 
 +``` 
 +$ borg list ~/repo_bambelle 
 +bambelle-2020-05-17-02-00            Sun, 2020-05-17 02:00:11 
 +bambelle-2020-05-24-02-00            Sun, 2020-05-24 02:00:10 
 +bambelle-2020-05-31-02-00            Sun, 2020-05-31 02:00:11 
 +bambelle-2020-06-07-02-00            Sun, 2020-06-07 02:00:10 
 +bambelle-2020-06-10-02-00            Wed, 2020-06-10 02:00:10 
 +bambelle-2020-06-11-02-00            Thu, 2020-06-11 02:00:10 
 +bambelle-2020-06-12-02-00            Fri, 2020-06-12 02:00:10 
 +bambelle-2020-06-13-02-00            Sat, 2020-06-13 02:00:11 
 +bambelle-2020-06-14-02-00            Sun, 2020-06-14 02:00:10 
 +bambelle-2020-10-04-02-00            Sun, 2020-10-04 02:00:09 
 +bambelle-2020-10-05-02-00            Mon, 2020-10-05 02:00:11 
 +``` 
 + 
 +4. Créer un dossier pour extraire l'archive de ton choix et l'extraire  
 +``` 
 +$ mkdir ~/restauration 
 +$ cd ~/restauration 
 +$ borg extract ~/repo_bambelle 
 +``` 
 + 
 +</markdown> 
 + 
 +<WRAP center round tip 60%> 
 +Il est aussi possible d'utiliser [[https://borgbackup.readthedocs.io/en/stable/usage/mount.html|borg mount]] pour examiner/picorer l'archive plutôt que de l'extraire d'un bloc. 
 +</WRAP>
backup.txt · Dernière modification : 2021/04/08 19:51 de gde