Proxmox Backup Server
Proxmox Backup Server est une solution de sauvegarde de classe entreprise particulièrement adaptée (mais pas que) à la sauvegarde des machines virtuelles. Une sorte de Veeam Backup libre…
Cet outil relativement jeune (1er stable en 2020) est basé sur Debian 11 (PBS 2.x) et écrit principalement en Rust pour garantir de bonnes performances. Il est proposé en version communautaire ou avec du support éditeur via des souscriptions.
Dans ce rapide guide, je vais privilégier l’intégration avec Proxmox Virtual Environment (PVE) et l’utilisation de la ligne de commande, mais sachez que tout est réalisable depuis l’interface Web. Je ferai également un focus sur l’utilisation des namespaces
introduits avec la version 2.x.
Fonctionnalités principales
- sauvegarde incrémentale pour machines virtuelles, conteneurs et serveurs physiques.
- intégration étroite avec Proxmox Virtual Environment (PVE)
- chiffrement (AES-256) et compression (Zstandard) à la source
- déduplication côté serveur (par VM et entre les VMs d’un même datastore)
- synchronisation sur d’autres serveurs distants (pour respecter la règle des 3.2.1)
- restauration au niveau fichier sans devoir restaurer toute la VM
- somme de contrôle pour vérifier l’intégrité des sauvegardes (SHA-256)
- logiciel libre (GNU AGPL,v3) avec support entreprise possible (souscription)
- architecture client-serveur avec les communications chiffrées en TLS
- interface Web d’administration
- support de QEMU dirty bitmaps (ressemble à VMware CBT)
- API RESTfull
- contrôle d’accès basé sur des rôles (RBAC)
- OpenID, 2FA
Fonctionnement
Dans PBS, les données sont découpées en blocs (chunks) identifiés par un condensat (SHA-256) dans un index. La déduplication est basée sur la réutilisation des blocs (plusieurs index peuvent pointer vers un même bloc pour réduire le stockage nécessaire).
A chaque nouvelle sauvegarde, le client télécharge la liste des blocs déjà présents sur le serveur et ne transfère que les blocs modifiés pour reduire la bande passante réseau et la fenêtre de sauvegarde (voir fonctionnement détaillé).
Installation
Je ne m’attarde pas sur l’installation avec l’ISO fournit par Proxmox qui ne présente pas de difficulté particulière.
Vous pouvez choisir d’installer PBS en machine virtuelle (si vous aimez le coté “Inception”) avec du stockage distant en NFS par exemple ou plus logiquement directement sur un serveur physique. Dans les 2 cas, il faudra provisionner la volumétrie nécessaire pour sauvegarder toutes vos VMs avec la rétention souhaitée et en tenant compte de la déduplication (ratio 2:1 minimum).
À l’issue de l’installation, vous devriez pouvoir vous connecter à l’interface web à l’adresse: https://<fqdn ou IP>:8007
Par défaut, le gestionnaire de paquets est configuré pour pointer vers la version enterprise
. Si vous souhaitez passer sur la version communautaire, il faut modifier le fichier pbs-enterprise.list
:
1root@pbs-server:~# cat /etc/apt/sources.list.d/pbs-enterprise.list
2
3#deb https://enterprise.proxmox.com/debian/pbs bullseye pbs-enterprise
4# PBS pbs-no-subscription repository provided by proxmox.com,
5# NOT recommended for production use
6deb http://download.proxmox.com/debian/pbs bullseye pbs-no-subscription
7
8root@pbs-server:~# apt update && apt update
Si vous n’utilisez pas NFS, vous pouvez supprimer le service rpcbind
qui est lancé par défaut :
1root@pbs-server:~# apt-get purge rpcbind
Le fonctionnement repose sur 2 services :
1root@pbs-server:~# systemctl list-unit-files | grep proxmox
2proxmox-backup-proxy.service enabled enabled
3proxmox-backup.service enabled enabled
4
5root@pbs-server:~# lsof -i -P -n
6COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
7proxmox-b 14519 backup 21u IPv6 20682 0t0 TCP *:8007 (LISTEN)
8proxmox-b 27152 root 17u IPv4 16907 0t0 TCP 127.0.0.1:82 (LISTEN)
9proxmox-b 27152 root 18u IPv4 16907 0t0 TCP 127.0.0.1:82 (LISTEN)
-
le service
proxmox-backup-proxy
expose l’API PBS en HTTPS sur le port 8007 (tcp). Il tourne avec des permissions restreintes (utilisateurbackup
) et transmet les opérations qui nécéssitent des permissions étendues au serviceproxmox-backup
-
le service
proxmox-backup
expose l’API de management sur le port 82 uniquement en localhost.
Ajout d’un Datastore en ZFS
Un datastore
est l’emplacement où sont stockées les sauvegardes. Un serveur PBS doit avoir au moins un datastore
configuré. Il peut être constitué d’une grappe RAID formatée en XFS ou EXT4, un point de montage NFS ou mieux encore : un pool ZFS !
Si vous n’êtes pas familiarisé avec ZFS, pas de panique: PBS permet de gérer la création du pool directement depuis l’interface WEB. Vous pouvez aussi vous référer à mes précédents articles.
Pour cette prise en main, je vais juste créer un pool ZFS avec deux disques de 1TB en miroir (RAID-1). En production, Proxmox recommande l’ajout du SSD en special device ZFS pour améliorer les performances.
- Afficher la liste des disques disponibles
1root@pbs-server:~# proxmox-backup-manager disk list
2┌──────┬────────┬─────┬───────────┬───────────────┬───────────────┬─────────┬────────┐
3│ name │ used │ gpt │ disk-type │ size │ model │ wearout │ status │
4╞══════╪════════╪═════╪═══════════╪═══════════════╪═══════════════╪═════════╪════════╡
5│ sda │ lvm │ 1 │ hdd │ 34359738368 │ QEMU_HARDDISK │ - │ passed │
6├──────┼────────┼─────┼───────────┼───────────────┼───────────────┼─────────┼────────┤
7│ sdb │ unused │ 0 │ hdd │ 1099511627776 │ QEMU_HARDDISK │ - │ passed │
8├──────┼────────┼─────┼───────────┼───────────────┼───────────────┼─────────┼────────┤
9│ sdc │ unused │ 0 │ hdd │ 1099511627776 │ QEMU_HARDDISK │ - │ passed │
10└──────┴────────┴─────┴───────────┴───────────────┴───────────────┴─────────┴────────┘
- Création du pool ZFS. L’argument
local-zfs
est à la fois le nom du pool ZFS et celui du datastore PBS.
1root@pbs-server:~# proxmox-backup-manager disk zpool create local-zfs --devices sdb,sdc --raidlevel mirror --add-datastore
2create Mirror zpool 'local-zfs' on devices 'sdb,sdc'
3# "zpool" "create" "-o" "ashift=12" "-m" "/mnt/datastore/local-zfs" "local-zfs" "mirror" "sdb" "sdc"
4# "zfs" "set" "relatime=on" "local-zfs"
5
6Chunkstore create: 1%
7Chunkstore create: 2%
8---8<--
9Chunkstore create: 98%
10Chunkstore create: 99%
11TASK OK
- Vérification du pool ZFS et du datastore PBS
1root@pbs-server:~# zpool status
2 pool: local-zfs
3 state: ONLINE
4config:
5 NAME STATE READ WRITE CKSUM
6 local-zfs ONLINE 0 0 0
7 mirror-0 ONLINE 0 0 0
8 sdb ONLINE 0 0 0
9 sdc ONLINE 0 0 0
10
11root@pbs-server:~# proxmox-backup-manager datastore list
12┌───────────┬──────────────────────────┬─────────┐
13│ name │ path │ comment │
14╞═══════════╪══════════════════════════╪═════════╡
15│ local-zfs │ /mnt/datastore/local-zfs │ │
16└───────────┴──────────────────────────┴─────────┘
A ce stade, vous devriez obtenir quelque chose comme ça :
Ajout des namespaces:
Les namespaces
ont été introduits avec PBS 2.x et permettent de structurer un datastore en plusieurs éléments sur lesquels vous pouvez positionner des politiques de rétentions et des permissions d’accès différentes. Cela permet de prendre en charge 2 cas de figure particuliers :
- la sauvegarde de plusieurs serveurs Proxmox isolés ou plusieurs clusters en évitant les conflits (vmid).
- la délégation de l’espace d’un datastore à d’autres PBS pour faire de la synchronisation (2 PBS d’extrémités qui se synchronisent sur un PBS central avec 2 namespaces).
L’intérêt des namespaces est de conserver la déduplication entre les VMs d’un même datastore (sauf si vous activez le chiffrement à la source : dans ce cas, les sommes de contrôles d’un même bloc sont différentes).
Pour la création des namespaces, il va falloir passer par l’interface Web puisque pour le moment, il n’existe pas d’outil en ligne de commande (j’ai cherché un moment : voir flèche rouge) :
Ici, j’ai créé un namespace pour chacun des serveurs Proxmox VE (pve-01 à pve-03) à sauvegarder.
Configurer la rétention (prune)
La rétention (délais de conservation des sauvegardes) peut être définie globalement niveau datastore
ou plus finement au niveau namespace
pour avoir des politiques différentes en fonction des clients de sauvegardes.
Pour planifier au mieux vos rétentions, le plus simple est d’utiliser le simulateur fourni.
Dans cet exemple, PBS conserve les sauvegardes sur 1 an avec:
- planification quotidienne décalée des purges (20:00 pour pve-01 à 00:00 pour pve-03)
- 2 semaines de sauvegardes quotidiennes
- 2 mois de sauvegardes hebdomadaires
- 1 an de sauvegardes mensuelles.
Purger les données (garbage collector)
Dans PBS, l’opération de prune
traite uniquement les index et pas les blocs de données du datastore. Cette tâche revient au garbage collector
qu’il faut planifier régulièrement.
Voir l’exemple dans la capture ci-dessus avec une planification chaque samedi à 18h15 (l’opération peut être longue sur un gros datastore
).
Créer des utilisateurs dédiés
L’utilisation du compte root@pam
du serveur PBS pour la connexion des clients de sauvegarde est évidemment à proscrire.
Je vais créer un utilisateur distinct pour chaque serveur à sauvegarder et l’associer son namespace (pve-01 dans l’exemple).
1root@pbs-server:~# proxmox-backup-manager user create user-pve-01@pbs --password VerySecret1 --comment "backup user for pve-01"
2
3root@pbs-server:~# proxmox-backup-manager user list
4┌─────────────────┬────────┬────────┬───────────┬──────────┬───────────────────┬────────────────────────┐
5│ userid │ enable │ expire │ firstname │ lastname │ email │ comment │
6╞═════════════════╪════════╪════════╪═══════════╪══════════╪═══════════════════╪════════════════════════╡
7│ root@pam │ 1 │ never │ │ │ admin@domain.tld │ │
8├─────────────────┼────────┼────────┼───────────┼──────────┼───────────────────┼────────────────────────┤
9│ user-pve-01@pbs │ 1 │ never │ │ │ │ backup user for pve-01 │
10├─────────────────┼────────┼────────┼───────────┼──────────┼───────────────────┼────────────────────────┤
11│ user-pve-02@pbs │ 1 │ never │ │ │ │ backup user for pve-02 │
12├─────────────────┼────────┼────────┼───────────┼──────────┼───────────────────┼────────────────────────┤
13│ user-pve-03@pbs │ 1 │ never │ │ │ │ backup user for pve-03 │
14└─────────────────┴────────┴────────┴───────────┴──────────┴───────────────────┴────────────────────────┘
Et accorder le rôle DatastoreBackup sur leurs namespaces respectifs (pve-01 dans l’exemple):
1root@pbs-server:~# proxmox-backup-manager acl update /datastore/local-zfs/pve-01 DatastoreBackup --auth-id user-pve-01@pbs
2
3root@pbs-server:~# proxmox-backup-manager acl list
4┌─────────────────┬─────────────────────────────┬───────────┬─────────────────┐
5│ ugid │ path │ propagate │ roleid │
6╞═════════════════╪═════════════════════════════╪═══════════╪═════════════════╡
7│ user-pve-01@pbs │ /datastore/local-zfs/pve-01 │ 1 │ DatastoreBackup │
8├─────────────────┼─────────────────────────────┼───────────┼─────────────────┤
9│ user-pve-02@pbs │ /datastore/local-zfs/pve-02 │ 1 │ DatastoreBackup │
10├─────────────────┼─────────────────────────────┼───────────┼─────────────────┤
11│ user-pve-03@pbs │ /datastore/local-zfs/pve-03 │ 1 │ DatastoreBackup │
12└─────────────────┴─────────────────────────────┴───────────┴─────────────────┘
Configurer Proxmox VE avec PBS
Pour commencer, il faut récupérer l’empreinte de la clé publique du certificat TLS du serveur PBS (attention, si vous décidez d’utiliser autre chose que les certificats auto-signés générés à l’installation)
1root@pbs-server:~# proxmox-backup-manager cert info | grep Fingerprint
2Fingerprint (sha256): 1c:3b:0e:80:9a:da:dc:26:31:92:2e:76:f6:2d:0b:52:85:0e:e0:6f:b7:cd:af:e7:25:55:ef:c2:5c:d4:e9:f9
et ajouter le serveur PBS sur les serveurs Proxmox VE (pve-01 dans l’exemple):
1root@pve-01:~# pvesm add pbs pbs-server --datastore local-zfs --server <IP server PBS> --fingerprint 1c:3b:0e:80:9a:da:dc:26:31:92:2e:76:f6:2d:0b:52:85:0e:e0:6f:b7:cd:af:e7:25:55:ef:c2:5c:d4:e9:f9 --username user-pve-01@pbs --password --namespace pve-01
2Enter Password: **********
Dans l’interface Web de votre serveur Proxmox VE :
Planifier une sauvegarde
La planification des sauvegardes se configure directement depuis l’interface Web de Proxmox VE:
Dans cette exemple, le serveur Proxmox VE va faire une sauvegarde de toutes les VMs tous les jours à partir de 21h00 sur le serveur PBS en mode snapshot (sans interruption de service).
Restauration
La restauration est toute aussi simple, avec la possibilité de restaurer l’ensemble de la VM / conteneur ou simplement un fichier en parcourant l’arborescence.
Conclusion
PBS est une solution incontournable pour la sauvegarde des environnements Proxmox VE. Les planifications proposées dans cet article doivent être adaptées à vos besoins. Cet article ne couvre pas la gestion des vérifications, les sauvegardes de serveurs en mode fichier et la synchronisation sur un second serveur distant…bref encore un peu de grain à moudre à l’occasion de la mise en service de l’infrastructure de production.
Ressources:
Photo by Jason Pofahl on Unsplash