
VDO – optymalizacja przestrzeni dyskowej w Enterprise Linux 8

Virtual Data Optimizer (VDO) zawiera wszystkie elementy potrzebne do stworzenia przezroczystej warstwy kompresji i deduplikacji danych. Zmniejsza wykorzystanie przestrzeni dyskowej na urządzeniach blokowych, minimalizuje replikację i zwiększa przepustowość danych.
Virtual Data Optimizer (VDO) zawiera wszystkie elementy potrzebne do stworzenia przezroczystej warstwy kompresji i deduplikacji danych. Zmniejsza wykorzystanie przestrzeni dyskowej na urządzeniach blokowych, minimalizuje replikację i zwiększa przepustowość danych.
VDO wykorzystuje trzy główne techniki:
- eliminację bloków zerowych – odfiltrowuje bloki danych, które zawierają same zera i zapisuje informacje o tych blokach tylko w metadanych. Niezerowe bloki danych są następnie przekazywane do następnej fazy przetwarzania. Ta faza pozwala na wykorzystanie funkcji Thin-Provisioning w urządzeniach VDO
- deduplikację – eliminuje nadmiarowe bloki danych. Podczas tworzenia wielu kopii tych samych danych VDO wykrywa zduplikowane bloki i aktualizuje metadane, aby użyć tych duplikatów jako odniesień do oryginalnych bloków, bez tworzenia bloków nadmiarowych
- kompresję – moduł jądra kvdo kompresuje bloki danych przy użyciu LZ4.
Dzięki tym technikom VDO może radykalnie zwiększyć wydajność zarówno pamięci masowej, jak i wykorzystania pasma sieciowego. Warstwa VDO jest umieszczana na istniejącym urządzeniu blokowym, takim jak urządzenie RAID lub dysk lokalny, przy czym urządzenia blokowe mogą być również szyfrowane.
Urządzenia logiczne tworzone za pomocą VDO są nazywane woluminami VDO. Są one podobne do partycji dyskowych – można je sformatować z żądanym systemem plików i montować tak samo, jak zwykły system plików. Woluminu VDO można również użyć jako woluminu fizycznego LVM.
Ponieważ wolumin VDO jest typu Thinly-Provisioned, system plików i aplikacje widzą tylko logiczną przestrzeń w użyciu i nie są świadome rzeczywistej dostępnej przestrzeni fizycznej.
Podczas hostowania maszyn wirtualnych lub kontenerów, zalecane jest dostarczanie pamięci masowej w stosunku 10:1 logicznej do fizycznej (przykładowo wykorzystując 1 TB fizycznej pamięci masowej, prezentujemy ją jako 10 TB logicznej pamięci masowej). W przypadku pamięci obiektowych, np. takich jak Ceph, zalecane jest zastosowanie stosunku logicznego do fizycznego 3:1 (co oznacza, że 1 TB fizycznej pamięci masowej będzie prezentowany jako 3 TB logicznej pamięci masowej).
Instalacja VDO
Instalacja VDO w systemach z rodziny Enterprise Linux (Rocky Linux, AlmaLinux, RHEL, Oracle Linux, Centos…) ogranicza się do uruchomienia poniższego polecenia:
[eurolinux@el84 ~]$ sudo dnf install vdo kmod-kvdo
Tworzenie woluminu VDO
Aby utworzyć nowy wolumin VDO, należy przygotować następujące informacje:
- nazwę bazowego urządzenia blokowego
- nazwę zoptymalizowanego urządzenia blokowego, które będzie prezentowane przez VDO
- rozmiar logiczny, który ma być prezentowany warstwom pamięci masowej powyżej VDO.
Bez tego ostatniego parametru, VDO utworzy wolumin, który zapewnia mapowanie 1:1 między fizycznymi i logicznymi blokami. W późniejszym czasie można zwiększyć fizyczny i logiczny rozmiar woluminu za pomocą poleceń vdo growPhysical
i vdo growLogical
.
Jako prosty przykład, utworzymy wolumin VDO na urządzeniu /dev/vdb z nazwą vdo1 i logicznym rozmiarem 50GB, uruchamiając polecenie vdo create
:
[eurolinux@el84 ~]$ sudo vdo create --name=vdo1 \
--device=/dev/vdb \
--vdoLogicalSize=50G
Creating VDO vdo1
The VDO volume can address 2 GB in 1 data slab.
It can grow to address at most 16 TB of physical storage in 8192 slabs.
If a larger maximum size might be needed, use bigger slabs.
Starting VDO vdo1
Starting compression on VDO vdo1
VDO instance 0 volume is ready at /dev/mapper/vdo1
Informacje i statystyki VDO
Aby przeanalizować wolumin VDO, należy uruchomić polecenie vdo status
. Wyświetla ono raport o systemie VDO oraz status woluminu w formacie YAML. Ograniczenie wyświetlania informacji do konkretnego woluminu uzyskamy, wykorzystując opcję --name=
– oczywiście w przypadku jednego woluminu korzystanie z tej opcji nie będzie koniecznie.
[eurolinux@el84 ~]$ sudo vdo status
VDO status:
Date: '2021-09-10 13:57:42-04:00'
Node: el84
Kernel module:
Loaded: true
Name: kvdo
Version information:
kvdo version: 6.2.4.26
Configuration:
File: /etc/vdoconf.yml
Last modified: '2021-09-10 12:58:27'
VDOs:
vdo1:
Acknowledgement threads: 1
Activate: enabled
Bio rotation interval: 64
Bio submission threads: 4
Block map cache size: 128M
Block map period: 16380
(...)
Do sprawdzenia woluminu możemy użyć polecenia vdostats
. Ponieważ VDO zapewnia Thin-Provisioning, narzędzie to powinno być również używane do określenia, ile wolnego miejsca fizycznego pozostało na bazowym urządzeniu pamięci masowej:
[eurolinux@el84 ~]$ sudo vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 5.0G 3.0G 2.0G 60% N/A
Wyjście polecenia vdostats
wyświetla nazwę urządzenia woluminu VDO (Device) wraz ze statystykami, które wskazują całkowitą liczbę bloków (1K-blocks), liczbę bloków w użyciu (Used), liczbę pozostałych bloków (Available), procent całkowitych bloków w użyciu (Use%) i procent zaoszczędzonego miejsca (Space saving%).
System plików
Następnie możemy sformatować wolumin VDO z systemem plików XFS:
[eurolinux@el84 ~]$ sudo mkfs.xfs -K /dev/mapper/vdo1
meta-data=/dev/mapper/vdo1 isize=512 agcount=4, agsize=3276800 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=6400, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
i zamontować zasób:
[eurolinux@el84 ~]$ sudo mount /dev/mapper/vdo1 /mnt && df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 627M 0 627M 0% /dev
tmpfs 657M 0 657M 0% /dev/shm
tmpfs 657M 9.3M 648M 2% /run
tmpfs 657M 0 657M 0% /sys/fs/cgroup
/dev/mapper/eurolinux-root 21G 4.7G 16G 23% /
/dev/vda1 1014M 246M 769M 25% /boot
tmpfs 132M 4.0K 132M 1% /run/user/1000
/dev/mapper/vdo1 50G 390M 50G 1% /mnt
Podczas uruchamiania systemu jednostka systemd vdo automatycznie uruchamia wszystkie urządzenia VDO, które są skonfigurowane jako aktywne. Jednostka vdo jest instalowana i włączana domyślnie podczas instalacji pakietu VDO. W przypadku ponownego uruchomienia systemu po nieczystym zamknięciu VDO wykonuje przebudowę metadanych w celu sprawdzenia ich spójności i naprawia je w razie potrzeby.
Podsumowanie
Przeznaczeniem VDO jest oszczędność przestrzeni dyskowej i redukcja kosztów. Oszczędności można zaobserwować zarówno w tradycyjnych centrach danych, jak i we wdrożeniach opartych na chmurze. W zależności od potrzeb może się to przekładać na niższe koszty na instancję obliczeniową, niższe koszty zewnętrznej pamięci blokowej i niższe koszty długoterminowego przechowywania snapshotów.
Stopień redukcji danych, jaki można zaobserwować dzięki VDO, będzie się różnił w zależności od rodzaju przechowywanych danych. Skompresowane pliki wideo lub audio nie wykorzystają w pełni tej technologii, ale już kopie zapasowe, maszyny wirtualne i wdrożenia kontenerów zapewnią bardzo wymierne oszczędności.