Outils pour utilisateurs

Outils du site


backup

Table des matières

Ceci est une ancienne révision du document !


<markdown>

# Sauvegardes

</markdown>

Page en cours de rédaction

<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 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 # dans le dépot adminsys: python3 verification.py ```

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.

### Étape 1 : configurer les sauvegardes de la machine que l'on veut sauvegarder

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>

Cet exemple sauvegarde vers UN serveur, mais on peut aussi choisir de lister plusieurs cibles dans la liste borg_client_targets.

<markdown>

```yaml borg_client_targets:

  1. # OBLIGATOIRE : serveur où on souhaite envoyer nos sauvegardes. ce serveur doit être membre du groupe ansible “borg_servers”

remote_server: “serveur-destination-sauvegardes.faimaison.net”

  
  # FACULTATIF : chemins à sauvegarder 
  # (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éfaut, utilisera la valeur dans "group_vars/borg_clients.yml"
  exclude_patterns: "{{ borg_clients_common_exclude_paths }}"
  
  # 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:
    -  "sudo -i -u postgres pg_dump -U postgres -F p etherpad > ~postgres/etherpad.sql"
  # 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:
      - "rm -f ~postgres/backup-etherpad.sql"
  # 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:
      hour: "1"
      minute: "0"

```

### É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 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:

  1. 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>

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.

<markdown>

```bash ansible-playbook –diff -K -l borg_servers -t borg-server playbook-fma.yml ```

## Procédures manuelles

Ces trois 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.

### Récupérer d'une sauvegarde plantée (lock)

</markdown>

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…

<markdown>

On peut avoir ce genre de message remonté par cron dans un mail par exemple :

Remote: borg.locking.LockTimeout: /var/borg-backups/repos/bambelle/lock

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 :

On commence par ouvrir un « shell borg » avec toutes les variables d'env définies1).

``` 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).

### 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`

### Récupérer une sauvegarde depuis la machine concernée

TODO

### Récupérer une sauvegarde depuis une autre machine

(si la machine sauvegardée est HS)

TODO

</markdown>

1)
plus d'infos avec `–help`
backup.1601933702.txt.gz · Dernière modification : 2020/10/05 21:35 de jocelynd