In Luglio, Proxmox ha rilasciato la prima beta pubblica di un nuovo strumento: Proxmox Backup Server (PBS):
Proxmox Backup Server is an enterprise client-server backup software that safely backups VMs, containers, and physical hosts. It is specially optimized for the Proxmox VE platform and efficiently protects and replicates your business-critical data.
Like all of our other Proxmox solutions, the Proxmox Backup Server is fast to install and is centrally managed. With the intuitive, web-based user interface and a command line you can easily administrate all your backup and restore jobs.
Key Features
- Easy to setup and use client/server backup software
- Seamless integration into Proxmox VE
- Incremental backups
- Data deduplication
- Compression
- Authenticated encryption
- Remote Sync
- Software stack written in Rust providing high speed and memory efficiency
- License: GNU AGPL, v3
In Ottobre, è stata rilasciata la seconda beta pubblica, ed essendo piuttosto paranoico quando si tratta di backup e disaster recovery, ho subito voluto provare questo nuovo strumento.
Il backup della mia infrastruttura PVE, mi ha sempre dato dei grattacapi, principalmente:
- ero praticamente costretto a fare backup sulla stessa macchina fisica dove girano i servizi che voglio mettere sotto backup;
- dovevo sincronizzare a mano, ogni giorno, i backup fra i nodi (al fine di poter ripristinare qualuque servizio, su qualunque macchina, in caso di morte di un nodo);
- non riuscivo a rispettare la regola del 3/2/1;
- non riuscivo a gestire delle policy di retention per backup settimanali / mensili / annuali;
- non avevo un backup off-site affidabile e veloce (ho provato qualche backup in cloud, ma con prestazioni davvero scarse);
Ebbene, con PBS sono riuscito ad indirizzare quasi tutti questi problemi, con una soluzione veloce, integrata, sicura e flessibile.
Ecco il design che ho scelto per la mia infrastruttura:
Sul cluster PVE, ho creato un LXC debian e vi ho installato sopra PBS, chiamandolo PBS-local. A questo container ho poi aggiunto un mountpoint dedicato a contenere i backup (escluso dai backup, per evitare di fare backup dei backup).
Infine, ho messo questo LXC sotto replica, in modo da avere i backup replicati automaticamente su tutti i nodi del cluster.
Quindi ho provveduto, sul cluster PVE, ad aggiungere uno storage, di tipo Proxmox Backup Server, visibile a tutti i nodi.
Per effettuare backup, è sufficiente creare il job normalmente, specificando lo storage PBS come destinazione.
A questo punto, ho fatto un investimento di circa 50€ per l’acquisto di un Fujitsu Esprimo Q5020 Mini Intel Core 2 Duo (uno dei pochi requisiti di PBS è un processore a 64bit) con 4GB di RAM, ricondizionato.
Installato e configurato PBS (PBS-remote), ho creato un Remote facendolo puntare all’indirizzo di PBS-local, quindi ho creato un Sync Job che, ogni quarto d’ora (*:0/15), effettua la sincronizzazione del contenuto del datastore di PBS-local, sul datastore locale.
Lavorando con backup incrementali, la prima replica è stata fatta nella stessa sottorete, in modo che il grosso del lavoro venisse svolto con un collegamento veloce.
Una volta completata la prima sincronizzazione, ho traslocato PBS-remote verso il… ehm… datacenter di backup (casa dei miei).
Ho installato openvpn e configurato per collegarsi al mio firewall OpnSense. Con il seguente script, ho fatto in modo che la connessione venga ritirata su in automatico, in caso non sia possibile raggiungere PBS-local:
#!/bin/bash
REMOTE_IP="xxx.xxx.xxx.xxx" #PBS-local IP
PINGRES=$(ping -c 2 $REMOTE_IP)
PLOSS=`echo $PINGRES : | grep -oP '\d+(?=% packet loss)'`
if [ "100" -eq "$PLOSS" ];
then
killall openvpn > /dev/null 2>&1
killall openvpn > /dev/null 2>&1
/usr/sbin/openvpn --config /root/openvpn_pbs_remote_1.opvpn --auth-user-pass /root/pass.txt &
fi
A questo punto, ho configurato il datastore di PBS-remote per fare in modo di soddisfare le mie policy di retention e di maintenance (verify, garbage collection e prune):
root@pbs-remote:~# proxmox-backup-manager datastore update zp1 --verify-schedule daily
root@pbs-remote:~# proxmox-backup-manager datastore update zp1 --gc-schedule sat
root@pbs-remote:~# proxmox-backup-manager datastore update zp1 --prune-schedule sun
root@pbs-remote:~# proxmox-backup-manager datastore update zp1 --keep-daily 5
root@pbs-remote:~# proxmox-backup-manager datastore update zp1 --keep-weekly 4
root@pbs-remote:~# proxmox-backup-manager datastore update zp1 --keep-monthly 12
root@pbs-remote:~# proxmox-backup-manager datastore update zp1 --keep-yearly 10
Riga per riga, siamo andati ad impostare:
- La verify dei backup, giornaliera
- La garbage collection, il Sabato
- Il prune, la Domenica
- La retention policy: 5 snapshot giornalieri, 4 settimanali, 12 mensili e 10 annuali
Considerazioni finali
La scelta di avere 2 PBS, uno locale ed uno remoto, deriva dal fatto che non voglio dare per scontata la connettività, ne le performance.
Se effettuassi backup direttamente sul server remoto, andrei sicuramente incontro ad un problema di lentezza e a possibili backup falliti in caso di interruzione della connettività.
Senza contare che un restore, da posizione remota, impiegherebbe troppo tempo.
In questa maniera, i backup e i restore sono rapidi (per i backup, molto più veloci che con il normale backup di PVE, essendo incrementali), verificati e deduplicati.
Volendo si può anche impostare la criptazione degli snapshots, ma per il momento ho preferito evitarla perché non sono ancora sicuro che sia possibile effettuare restore su host diversi, in caso di disastro.