Journal Sauvegarde incrémentiel de container lxc sous proxmox

Posté par (page perso) . Licence CC by-sa
10
14
nov.
2017

Introduction

Proxmox c'est bon, c'est libre et ça marche bien.
Par contre il a une faiblesse, ce sont les sauvegardes.
Ils vous pond un gros .lzo par sauvegarde, certes on dit dans l'espaces de sauvegarde combien nous voulons garder de sauvegardes, et
il effacera les vielles sauvegardes.

C'est suffisant pour des petits containers ou vm par exemple, mais pour un gros container ça ne va pas le faire.

Ma solution

Description de ma situation

Pour faire simple prenons mon cas.

J'ai une instance de proxmox qui tourne dans ma cave, dessus il n'y a que des containers lxc, j'ai quelques petits containers et un gros qui s'appelle NAS et qui fait dans les 300Go.

Mais le problème c'est mon NAS. Dedans il y a toutes notre musique, toutes nos photos/vidéos, bref toute notre vie, qu'il faut bien sauvegarder.
Par contre je me vois mal me prendre 300Go par nuit, ma machine de sauvegarde va vite être saturée.

A côté du serveur il y a un petit serveur (un vieux microcube proserv d'hp), il a 4 disques de 2to en raid 5. Dessus tourne une debian qui offre un partage nfs
au proxmox.
J'ai également une instance de rsnapshot sur mon hp qui sauvagarde le contenu de mon container NAS.

Cela fonctionne bien, mais je me suis dit si je pouvait prendre tous le container par passage de rsnaphot, histoire que si un jour le proxmox casse il n'y aurait plus qu'a recopier l’intégralité du contenus sur le nouveau proxmox (ça marche j'ai fait le test avec un container d'essai le week-end passé).

Ce qui est cool c'est que avec rsnapshot on peut remplacer les sauvegardes de proxmox pour les containers (attention que ceux qui sont dans des rpool zfs ou dans des lv de lvm).

Un bout de mon fichier de configuration

Comme c'est plus facile avec un exemple, voici un bout de mon fichier de config qui permet de sauvegarder un container, au préalable il faut que la machine de sauvegarde puisse se connecter au proxmox en ssh avec identification par clé.

Dans l'exemple notre container est le 202 et l'adresse du proxmox est 192.168.2.190
Dans le fichier de configuration il vous faut passer ce argument sinon il risque d'être bizarre votre container avec le temps qui s'écoule.

rsync_long_args --delete

en ZFS

La section pour la sauvegarde du container 202:

#NAS
backup_exec ssh root@192.168.2.190 "zfs snapshot rpool/data/subvol-202-disk-1@backup"
backup  root@192.168.2.190://rpool/data/subvol-202-disk-1/.zfs/snapshot/backup/ nas-202/
backup_exec ssh root@192.168.2.190 "zfs destroy rpool/data/subvol-202-disk-1@backup"

C'est vraiment simple après il faut pas oublier de prendre les fichiers de configuration de votre container sur l'hyperviseur, mais à la limite vous en foutez vous recréer un container avec la même id et même capacité de disque et vous passer la commande rsync dans l'autre sens.

Voilà vous avez des sauvegardes incrémental de vos containers et si vous avez un mysql dedans il devrait pas y avoir de problème vu que vous copiez un snapshot.

en LVM

Si vous avez vos containers dans des lv sous lvm ça marche aussi, voici un exemple que vous pouvez adapter à rsnapshot, je l'ai pas encore adapté mais j'ai testé les commandes à la main sur la grappe de proxmox de mon employeur.

lvcreate -n backup-308 -l 10%ORIGIN -s /dev/pve/vm-308-disk-1
mount /dev/pve/backup-308 /snapshots/308
rsync ...
umount /snapshots/308
lvremove -f /dev/pve/backup-308

Pour les VM ? Je n'ai pas encore penché la dessus, si quelqu'un à une idée.

  • # snapshots ZFS

    Posté par . Évalué à 4 (+2/-0). Dernière modification le 14/11/17 à 20:04.

    Plutôt que de faire des backups manuels de snapshots ZFS pourquoi n'utilises-tu pas la capacité de ZFS à envoyer/recevoir des snapshots (y compris le faire de façon incrémentale) ?

    • [^] # Re: snapshots ZFS

      Posté par (page perso) . Évalué à 3 (+1/-0).

      Parce que mon rsnapshot sauvegarde des données d'ailleurs qui ne sont pas dans du zfs.
      ma machine de sauvegarde tourne sur du lvm donc pas de zfs.
      mais bon dans le futur c'est envisageable.

      • [^] # Re: snapshots ZFS

        Posté par . Évalué à 3 (+1/-0).

        Tu peux aussi stocker tes snapshots de zfs sous forme de fichiers.

        Exemple:

        Premier snapshot (full) :

        zfs snapshot mypool/mydataset@initial
        zfs send mypool/mydataset@initial | ssh myuser@mybackupserver "dd of=/backup/snaps/mydataset_initial.snap"
        

        Le premier incrémental :

        TODAY=$(date +%Y-%m-%d)
        YESTERDAY=$(date +%Y-%m-%d -d yesterday)
        zfs snapshot mypool/mydataset@$TODAY && zfs send -i mypool/mydataset@initial mypool/mydataset@$TODAY | ssh myuser@mybackupserver "dd of=/backup/snaps/mydataset_$TODAY.snap"
        Les jours suivants (scripté) :

        zfs snapshot mypool/mydataset@$TODAY && zfs send -i mypool/mydataset@$YESTERDAY mypool/mydataset@$TODAY | ssh myuser@mybackupserver "dd of=/backup/snaps/mydataset_$TODAY.snap"
        

        Tu saupoudre le tout d'un peu de gestion d'erreur et de cleanup d'anciens snaps et tu as facilement un truc robuste qui a pour avantage d'être instantané. Au final il n'y a plus que le transfert ssh qui prend du temps.

        Evidemment c'est toujours mieux de foutre ça dans un vrai pool zfs car ça te permet de vérifier l'intégrité des données. Tu es sous LVM ? Ce n'est pas réellement un problème. Tu peux créer un pool zfs en utilisant des fichiers à la place de raw devices ou de partitions.

        Comment créer un zpool de 100GB quand on a déjà partitionné ses disques en LVM:

        On crée d'abord un fichier vide qui ne prend pas de place sur le disque (thin provisionning)

        dd if=/dev/zero of=/rawfiles/my10GBfile bs=1 count=0 seek=100G
        Puis on crée notre pool zfs :

        zpool create my10GBzpool -m none /my10GBfile
        Et là dedans tu peux recevoir des snaps zfs, voir les données à loisir et t'assurer de leur intégrité. Le tout avec l'instantanéité des snaps zfs.

        • [^] # Re: snapshots ZFS

          Posté par (page perso) . Évalué à 4 (+1/-0).

          Tu peux aussi stocker tes snapshots de zfs sous forme de fichiers.

          Ça veut dire que pour restaurer, tu es obliger que de renvoyer tout les snapshots sur la premier machine pour qu'elle puisse le lire (l'initial et les incrémentaux). C'est quand même bien moins pratique.

          « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

          • [^] # Re: snapshots ZFS

            Posté par . Évalué à 1 (+0/-0).

            Ou utiliser un montage réseau. ca devrait fonctionner non ?

            Ca marche très bien en smb.

            • [^] # Re: snapshots ZFS

              Posté par (page perso) . Évalué à 3 (+1/-0).

              Je préfère ma solution c'est beaucoup plus rapide dans ce cas (avec rsync).
              Après il ne faut pas que la machine qui se fait sauvegarder n'est accès à la machine de sauvegarde par sécurité.
              C'est la machine de sauvegarde qui à la clé ssh du proxmox et pas l'inverse, c'est le b.a.-ba de la sécurité (faudrait quand même pas que si le proxmox ce fait défoncer qu'on est accès facilement au serveur de sauvegarde).

        • [^] # Re: snapshots ZFS

          Posté par (page perso) . Évalué à 2 (+0/-0).

          Merci de l'info,
          je savais pas qu'on pouvait mettre un pool zfs dans un fichier, par contre au niveau perf ça suit ?
          Ma machine de sauvegarde j'avais essayé de la mettre en zfs avec l'équivalent du raid 5, mais ça ramait en fait c'est un Turion II Neo N54L Dual-Core, donc c'est pas très rapide comme processeur.

          • [^] # Re: snapshots ZFS

            Posté par . Évalué à 2 (+0/-0).

            Je ne l'ai fais que pour des tests fonctionnels sans faire de benchmarks donc je ne peux pas te dire.

          • [^] # Re: snapshots ZFS

            Posté par . Évalué à 2 (+0/-0).

            Turion II Neo N54L Dual-Core, donc c'est pas très rapide comme processeur.

            J'imagine que c'est un HP Microserver bourré de disques ?
            Si oui, effectivement le remplacement par un Gen 8 + Xeon vaut vraiment le coup :)

    • [^] # Re: snapshots ZFS

      Posté par . Évalué à 1 (+1/-0).

      J'utilise quant à moi pve-zsync (qui est un outil Proxmox) pour automatiser le transfert de snapshots ZFS de mon serveur vers un autre.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.