aA

VDO – optymalizacja przestrzeni dyskowej w systemie EuroLinux 8

VDO – optymalizacja przestrzeni dyskowej

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.

vdo

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 systemie EuroLinux 8 (podobnie zresztą jak systemach CentOS, Red Hat® Enterprise Linux® i Oracle Linux) ogranicza się do uruchomienia poniższego polecenia:

    [[email protected] ~]$ 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:

    [[email protected] ~]$ 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.

    [[email protected] ~]$ 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:

    [[email protected] ~]$ 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:

    [[email protected] ~]$ 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:

    [[email protected] ~]$ 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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *