Virtual Data Optimizer (VDO) – RHEL8/CentOS8
Con Virtual Data Optimizer ( VDO ) in RHEL8 e CentOS8 introduciamo un concetto di partizionamento di un volume a livello logico, un volume VDO provvede ad una riduzione in linea dei dati in Linux offrendo un sistema di Deduplicazione, Compressione e Thin Provisioning.
Con questa tecnologia, è possibile scambiare risorse CPU / RAM con spazio su disco. La disponibilità di VDO è uno dei risultati dell’acquisizione di Permabit Technology Corporation da parte di Red Hat nel 2017. Il codice è disponibile negli RPM di origine e vengono stabiliti progetti a monte.
Requisiti
VDO richiede spazio di archiviazione sia per i metadati VDO che per l’indice di deduplicazione UDS effettivo.
UDS Kernel Module (uds)
L’indice UDS fornisce le basi del prodotto VDO. Per ogni nuovo pezzo di dati, determina rapidamente se quel pezzo è identico a qualsiasi pezzo di dati precedentemente memorizzato. Se l’indice trova corrispondenza, il sistema di archiviazione può quindi fare riferimento internamente all’item esistente per evitare di memorizzare le stesse informazioni più di una volta.
L’indice UDS viene eseguito all’interno del kernel come modulo del kernel uds.
VDO scrive due tipi di metadati nella memoria fisica sottostante:
- Il primo tipo viene ridimensionato in base alle dimensioni fisiche del volume VDO e utilizza circa 1 MB per ogni 4 GB di memoria fisica più 1 MB aggiuntivo per slab. Il secondo tipo si ridimensiona con la dimensione logica del volume VDO e consuma circa 1,25 MB per ogni 1 GB di memoria logica, arrotondato per eccesso al slab più vicino.
- L’indice UDS è memorizzato nel gruppo di volumi VDO ed è gestito dall’istanza VDO associata. La quantità di memoria richiesta dipende dal tipo di indice e dalla quantità di RAM allocata all’indice. Per ogni 1 GB di RAM, un indice UDS denso utilizzerà 17 GB di memoria e un indice UDS sparso utilizzerà 170 GB di memoria.
VDO Volume
In RHEL8 e CentOS8 VDO utilizza un dispositivo a blocchi come archivio di backup, che può includere un’aggregazione di archiviazione fisica costituita da uno o più dischi, partizioni o persino file flat. Quando un volume VDO viene creato da uno strumento di gestione della memoria, VDO riserva spazio dal volume sia per un indice UDS che per il volume VDO, che interagiscono insieme per fornire spazio di archiviazione deduplicato agli utenti e alle applicazioni.
Slabs
La memoria fisica del volume VDO è divisa in un numero di slabs, ognuna delle quali è una regione contigua dello spazio fisico. Tutte le slabs per un determinato volume avranno le stesse dimensioni, che possono essere qualsiasi potenza di 2 multipli di 128 MB fino a 32 GB. La dimensione predefinita della slab è di 2 GB per facilitare la valutazione di VDO su sistemi di test più piccoli. Un singolo volume VDO può avere fino a 8096 slabs. Pertanto, nella configurazione predefinita con slabs da 2 GB, la memoria fisica massima consentita è di 16 TB. Quando si utilizzano slabs da 32 GB, la memoria fisica massima consentita è di 256 TB. Almeno un’intera slab è riservata da VDO per i metadati e pertanto non può essere utilizzata per l’archiviazione dei dati utente. La dimensione della slab non ha alcun effetto sulle prestazioni del volume VDO.
Installazione VDO
In RHEL8 e CentOS8 VDO necessità di due RPM:
- vdo
- kmod-kvdo
Usare dnf package manager per installare gli RPM necessari
# dnf install vdo kmod-kvdo -y
Creazione di un volume VDO
Creazione di un volume per un block device. Nota che più VDO possono essere creati con differenti device nella stessa macchina, ma bisognerà un nome e device differente per ogni istanza VDO nel sistema.
In questa casistica sostituire:
- vdo-name: Con il nome del VDO che vogliamo ( es. vdo01 )
- block-device: Con il nome del device persistente scelto ( es. /dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f)
- logical-size: Con l’ammontare del Logical Storage che il VDO presenta:
- Per le VM attive o l’archiviazione del contenitore, utilizzare una dimensione logica pari a dieci volte la dimensione fisica del dispositivo a blocchi. Ad esempio, se il dispositivo a blocchi ha una dimensione di 1TB, utilizzare qui 10TB.
- Per object storage, utilizzare una dimensione logica pari a tre volte la dimensione fisica del dispositivo a blocchi. Ad esempio, se il dispositivo a blocchi ha una dimensione di 1TB, utilizzare 3TB qui.
# vdo create \
--name=vdo-name \
--device=block-device \
--vdoLogicalSize=logical-size
Creazione del filesystem
Creazione di un normale file system ext4 o xfs:
- Per un file system XFS:
# mkfs.xfs -K /dev/mapper/vdo_name
- Per un file system EXT4:
# mkfs.ext4 -E nodiscard /dev/mapper/vdo_name
Eseguire il mount del file system con la creazione di una directory ( es. /mnt/vdo_name ):
# mkdir -m 1777 /mnt/vdo_name
# mount /dev/mapper/vdo_name /mnt/vdo_name
Mount Automatico in fase di Bootstrap:
In RHEL8 e CentOS8 per configurare il file system per essere montato automaticamente, abbiamo a disposizione due modalità:
- Scrivere il classico punto di mount automatica nel file /etc/fstab
- Creare un Systemd Mount Unit File con un nome del file appropriato
Se si decide di usare il file di configurazione /etc/fstab aggiungere le seguenti linee a seconda del tipo di File System:
- Per un file system XFS:
/dev/mapper/vdo_name /mnt/vdo_name xfs defaults,_netdev,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0
- Per un file system EXT4:
/dev/mapper/vdo_name /mnt/vdo_name ext4 defaults,_netdev,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0
Se si decide invece di usare un Systemd Mount Unit File, bisogna creare un file di configurazione per systemd con questa dicitura:
# vim /etc/systemd/system/mnt-vdo_name.mount
Con il seguente contenuto:
[Unit]
Description = VDO unit file to mount file system
name = vdo_name.mount
Requires = vdo.service
After = multi-user.target
Conflicts = umount.target
[Mount]
What = /dev/mapper/vdo_name
Where = /mnt/vdo_name
Type = xfs
[Install]
WantedBy = multi-user.target
Sostituire vdo_name con il nome del vostro VDO. E’ disponibile un esempio di un file systemd unit in /usr/share/doc/vdo/examples/systemd/VDO.mount.example
Monitorare VDO
Poiché VDO è Thin Provisioned, il file system e le applicazioni percepiranno soltanto lo Spazio Logico in uso e non saranno consapevoli di quello fisico disponibile effettivo. L’occupazione totale può essere monitorata usando vdostats:
# vdostats --human-readable
Device 1K-blocks Used Available Use% Space saving%
/dev/mapper/node1osd1 926.5G 21.0G 905.5G 2% 73%
/dev/mapper/node1osd2 926.5G 28.2G 898.3G 3% 64%
Quando lo spazio fisico di un volume VDO sarà in fase di esaurimento, VDO riporterà un warning nel system log, come questo:
Feb 18 14:13:39 system lvm[13863]: Monitoring VDO pool vdo_name.
Feb 18 14:27:39 system lvm[13863]: WARNING: VDO pool vdo_name is now 80.69%
full.
Feb 18 14:28:19 system lvm[13863]: WARNING: VDO pool vdo_name is now 85.25%
full.
Feb 18 14:29:39 system lvm[13863]: WARNING: VDO pool vdo_name is now 90.64%
full.
Feb 18 14:30:29 system lvm[13863]: WARNING: VDO pool vdo_name is now 96.07% full.
Importante
Monitorare lo spazio fisico sui volumi VDO per evitare situazioni di spazio insufficiente. L’esaurimento dei blocchi fisici potrebbe comportare la perdita di dati scritti di recente e non riconosciuti sul volume VDO.
Se vuoi approfondire questo tema puoi farlo!
Questo tema viene approfondito nei nostri corsi ufficiali Red Hat RH134 e relativo esame di certificazione EX200 per la RHCSA.
“Con l’aggiunta degli strumenti di deduplicazione e compressione dei dati di Permabit a Red Hat Enterprise Linux, Red Hat sarà pronta a supportare queste organizzazioni nel tentativo di ottenere un’impronta di archiviazione più efficiente per alimentare l’innovazione aziendale.”
JIM TOTTONVICE PRESIDENT AND GENERAL MANAGER, RED HAT