Découvrir VDO pour faire de la déduplication

Ce billet vise à découvrir les bases de la déduplication de données avec l'outil VDO proposé par RedHat. La mise en oeuvre est relativement simple, pour un résultat rapidement vérifiable. Il faut bien sûr disposer des données qui se prêtent à la déduplication. A noter que VDO est disponible depuis la RedHat 7.5 (et équivalent comme CentOS).

La déduplication

La déduplication est une des techniques couremment utilisée dans l'univers du stockage pour gagner de l'espace. Elle est souvent utilisée en complément de la compression.

Le but de la déduplication est de rechercher les données en double pour ne les écrire qu'une seule fois sur le stockage. Il y a donc des cas de figure où cela est très performant:

  • Stockage de fichiers avec de nombreux utilisateurs. Il y aura toujours statistiquement des données en double.
  • Stockage de VM ou de conteneurs. Là aussi, beaucoup de données similaires.
  • Serveur de messagerie
  • J'en oublie sûrement.

Il y a par contre des cas où ça ne s'y pretera pas:

  • Stockage de photos où les données sont déjà triées en amont. Gain faible.
  • Stockage d'ISO ou tout autre fichier, dont l'ensemble serait là aussi déjà trié en amont.

La déduplication peut opérer au niveau fichier, ou encore plus intéressant au niveau bloc de données. Au niveau fichier, elle ne cherche donc que les fichiers strictement identiques. C'est déjà un premier point, mais statistiquement ce cas de figure n'apparait pas si souvent dans la réalité. Cette déduplication est utilisée par exemple dans les outils de sauvegarde, qui font une somme de contrôle sur les fichiers à sauvegarder sur un client, et compare avec la liste des fichiers et leurs sommes déjà présents sur le serveur. Cela évite de faire transiter des fichiers qui seraient déjà sur le serveur de sauvegarde.

Par contre, au niveau bloc de données, il y a beaucoup plus souvent de petites parties communes (par ex tous les fichiers d'un même type partagent les mêmes entêtes, descriptions, ou des suites de bits simplement identiques). Ainsi ces parties communes ne se retrouveront écrites qu'une fois sur le disque, ce qui au final fera gagner de la place. Par exemple avec des fichiers de VM, toutes les VM qui tournent sur le même OS auront donc tous les fichiers de cet OS en commun. Il y aura donc de fortes chances d'avoir des blocs en commun, et donc beaucoup de déduplication. Quand l'outil de déduplication trouve des blocs identiques, au lieu de les stocker en double, il les remplace par un pointeur vers le 1er bloc.

Enfin, la déduplication peut être effectuée à la volée (online), ou déclenchée (offline). Avec VDO il est juste possible de choisir online (a priori), mais avec la possibilité de choisir en mode synchrone ou asynchrone. En gros, quand VDO doit écrire des données sur le disque (IO), il les écrit d'abord dans son cache, pour chercher ensuite si ce bloc est déjà écrit quelque part. Quand l'IO est validé par VDO lors de l'écriture en cache, il s'agit du mode asynchrone. Quand l'IO est validé lors de l'écriture finale sur le disque, il s'agit du mode synchrone. Pour ceux qui veulent 100% de sécurité, le mode synchrone est conseillé, mais il offre forcément des performances moindre que le mode asynchrone.

Donc il faut bien sûr avoir l'opportunité d'être dans un cas de figure favorable pour pouvoir utiliser la déduplication. Et ne pas oublier que celle-ci a forcément un coût en ressources. Elle est à privilégier quand le volume de données est plus important que la performance pure.

La mise en oeuvre

L'installation de VDO est relativement simple. Il s'agit d'installer 2 paquets:

yum install kmod-kvdo vdo

Le paquet kmod-kvdo contient le module kernel. Le paquet vdo contient les commandes de gestion (partie userland).

Ensuite, la création d'un conteneur VDO se fait soit:

  • un disque brute (un disque, un LUN, une partition etc)
  • un autre conteneur comme un LV

Ici, dans notre exemple, nous allons utiliser un disque brute de 10Go accessible via /dev/vdb:

vdo create --name=vdo-vm --device=/dev/vdb --vdoLogicalSize=100G

Le paramètre le plus important étant la taille "virtuelle" de votre espace de stockage. RedHat conseille par exemple de faire x10 pour du stockage de VM/Conteneurs car les résultats sont souvent très bon. Mais de faire x3 pour les autres cas. Notre disque vdb faisant 10G, la taille de notre vdo de test sera donc de 100Go.

Le conteneur VDO est ainsi créé et sera accessible via /dev/mapper/vdo-vm. Comme il s'agit d'un conteneur il ne reste plus qu'à lui faire un système de fichier (ici xfs):

mkfs.xfs -K /dev/mapper/vdo-vm

Si vous préférez ext4, aucun soucis:

mkfs.ext4 -E nodiscard /dev/mapper/vdo-vm

Les options -K et -E nodiscard sont équivalentes, vu qu'il s'agit d'un conteneur et qu'il n'y a aucune données elles vont faire gagner du temps lors du formatage.

Reste ensuite à monter ce nouveau système de fichiers:

mount /dev/mapper/vdo-vm /var/lib/libvirt/images

Et voilà, votre espace VDO avec déduplication est prêt à l'usage.

Pour le montage automatique au démarrage, il faut ajouter la ligne dans /etc/fstab bien sûr, mais en indiquant à systemd que ce montage nécessite en prérequis le démarrage du service vdo. Pour notre exemple cela donnera la ligne suivante:

/dev/mapper/vdo-vm /var/lib/libvirt/images xfs defaults,x-systemd.requires=vdo.service 0 0

Efficacité de la déduplication

Il est simple de vérifier l'état de la déduplication avec la commande suivante:

vdostats --human-readable 

Voici le résultat sur un exemple concret:

[root@nas ~]# vdostats --human-readable
Device                    Size      Used Available Use% Space saving%
/dev/mapper/vdo_backups    100.0G     29.2G     70.8G  29%            0%
/dev/mapper/vdo_partage    298.9G     49.3G    249.5G  16%            0%

Le volume vdo_backups contient des fichiers de sauvegarde envoyés par duplicity. La sauvegarde étant quotidienne, il y a énormément de candidats à la déduplication. L'espace gagné en quelques jours est déjà de 30%.

Pour le volume vdo_partage, il s'agit d'un espace SAMBA où des utilisateurs déposent des fichiers. Là forcément il y a moins de candidats à la déduplication, mais tout de même 16% d'espace gagné.

A voir sur le long terme.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : https://www.linuxed.net/trackback/161

Fil des commentaires de ce billet