PVE ovvero Proxmox Virtual Environment

PVE e` un sistema di virtualizzazione basato su Debian (purtroppo con systemd) e KVM. Ottimo ed economico anche se si vuole comperare il supporto commerciale.

Questi sono appunti sparsi sul setup di un singolo host con PVE versione 4.4 e 5.1.3 e un raid1 con ZFS.

Configurazione dei repo PVE no subscription

Questo repository non richiede il pagamento dell'assistenza ma potenzialmente contiene roba instabile. Occhio.

Limitare la ARC cache di ZFS

Nota: e` possibile limitare la dimensione "a runtime" senza riavviare, usando echo 4294967296 > /sys/module/zfs/parameters/zfs_arc_max ma questo funziona solo la dimensione attuale della ARC cache e` inferiore a quella impostata. Se e` gia` cresciuta oltre, non calera` mai piu` se non riavviando. Ovviamente questa impostazione non e` persistente dopo il reboot. C'e` chi sostiene che eseguendo echo 3 > /proc/sys/vm/drop_caches la cache dovrebbe ridursi... ma io non ci proverei su una macchina in produzione.

Configurazione di un sistema di allarme per email se il raidz di zfs va in degraded

Non e` proprio un avviso in tempo reale, ma queste righe aggiunte al crontab permettono di avere un allarme sufficientemente tempestivo, si spera.

# allarme se si rompe zfs.
MAILTO=youremail@example.com
00 6,12,20 * * *        root  zpool status | grep DEGRADED

Backup su storage remoto dei dump

Questo script si "aggancia" al sistema di backup interno di PVE, allo scopo di fare una seconda copia dei dump delle VM su uno storage esterno (smb, nfs, usb, qualsiasi cosa si possa montare). Questo script cosi` come e` fatto tiene 6 backup settimanali e 4 mensili, quindi sono 10 backup. Tenete bene conto dello spazio necessario! Ad ogni esecuzione di un job di backup, una volta eseguiti i dump di tutte le VM, questo script copia tutti i dump sullo storage remoto, dopo aver archiviato quelli precedenti dentro le directory "daily" e "weekly".

Uso di Qemu-agent

Abilitando l'agent nella configurazione della VM, e installando l'agent dentro la VM, è possibile gestire alcune funzioni di comunicazione fra host e guest. Una delle funzioni più comode è quella del freeze del file system nel momento in cui viene fatto uno snapshot (per esempio per i backup) per avere dei backup il più possibile congruenti. Per il file system, il semplice fatto di avere l'agente installato e abilitato è sufficiente. Per un database, tuttavia, è opportuno configurare uno script apposta.

Il pacchetto Debian da installare nel guest si chiama qemu-guest-agent

Qemu-agent e Mysql su guest Devuan

Per fare interagire Mysql (o Mariadb) con qemu-agent occorre:

Fatto questo, quando si lancia un backup il DB verrà flushato e lockato in scrittura per un secondo circa, il tempo di creare lo snapshot per il backup, poi verrà immediatamente sbloccato. Il risultato, nel log del guest, è una cosa tipo:

Jul 21 14:24:23 web1 qemu-ga: info: guest-fsfreeze called
Jul 21 14:24:23 web1 qemu-ga: info: executing fsfreeze hook with arg 'freeze'
Jul 21 14:24:23 web1 qemu-ga: info: executing fsfreeze hook with arg 'thaw'