RAIDing z LVM vs MDRAID - zalety i wady?

51

W swojej odpowiedzi na pytanie „mieszane typy RAID” HBruijn sugeruje użycie LVM do wdrożenia RAID w porównaniu do bardziej standardowego MDRAID.

Po krótkim badaniu wydaje się, że LVM obsługuje również funkcje RAID. W przeszłości korzystałem z LVM na platformie MDRAID i do tej pory nie wiedziałem, że LVM obsługuje również funkcje RAID. Wydaje się, że jest to stosunkowo nowy rozwój, ale nie dowiedziałem się dokładnie, kiedy to zostało wdrożone.

Są to więc alternatywne sposoby implementacji oprogramowania RAID w systemie Linux. Jakie są zalety i wady tych dwóch różnych podejść? Szukam porównań funkcji między tymi dwoma podejściami, aby ludzie mogli zdecydować, który jest dla nich lepszy. Wnioski oparte na eksperymentach (jak w tej funkcji, ta funkcja nie działa tak dobrze, jak ta funkcja i oto dlaczego) są również w porządku, pod warunkiem, że w odpowiedzi podasz swoje dane.

Niektóre konkretne problemy do rozwiązania:

  1. Załóżmy, że chcę wykonać sw RAID + LVM (typowy scenariusz). Czy powinienem używać wsparcia LVM dla SW RAID, a tym samym używać jednego narzędzia zamiast dwóch? Czy to bardziej zintegrowane podejście ma jakieś zalety?
  2. Czy obsługa LVM dla sw RAID ma znaczące wady w porównaniu z bardziej dojrzałym MDADM? W szczególności, jak stabilna / wolna od błędów jest obsługa LVM dla SW RAID? Wygląda na to, że ta obsługa sięga tylko 2011 roku (patrz poniżej), podczas gdy MDADM jest znacznie starszy. A jak to porównać pod względem zestawu funkcji? Czy ma znaczące braki funkcji w porównaniu do MDADM? I odwrotnie, czy obsługuje jakieś funkcje SW RAID, których nie ma MDADM?

UWAGI:

  1. Szczegółowa dyskusja znajduje się na stronie http://www.olearycomputers.com/ll/linux_mirrors.html, ale nie mogłem dowiedzieć się, w której dacie napisano.

    Podobne pytanie na temat błędu serwera: Linux LVM Mirror vs. MD Mirror . Pytanie to zostało jednak zadane w 2010 roku i odpowiedzi mogą być nieaktualne.

  2. Wpis dziennika zmian dla wersji 2.02.87 - 12 sierpnia 2011 r. Ma

    Dodaj config --with-raid dla nowego 'raid' segtype dla obsługi MD RAID 1/4/5/6

    Wygląda więc na to, że obsługa RAID w LVM ma około 3 lata.

Faheem Mitha
źródło
Jedną z zalet, o której mogę myśleć, jest korzystanie z funkcji związanych z HA, które są dostępne dla LVM.
Bratchley,
1
@JoelDavis Czy potrafisz opracować? Nie wiem, co oznaczają funkcje związane z HA.
Faheem Mitha
Ponadto zwykle korzysta się z woluminów logicznych zamiast mdwoluminów. Więc masz lvextendi pvmovemożesz poruszać się między urządzeniami, podczas mdgdy proces jest znacznie bardziej ręczny, bez wyraźnych korzyści.
Bratchley,
@JoelDavis może napisać odpowiedź?
Faheem Mitha
2
LVM zawsze wspierał raid1 i raid0. Niedawno porzucili własną implementację i zamiast tego wewnętrznie używają kodu osobowości RAID, otwierając pozostałe poziomy RAID.
psusi

Odpowiedzi:

55

Jak dojrzała i funkcjonalna jest LVM RAID?

LVM-RAID tak naprawdę boi się pod kołdrą. Zasadniczo działa, tworząc dwa woluminy logiczne na urządzenie RAID (jeden dla danych, zwany „rimage”; drugi dla metadanych, zwanych „rmeta”). Następnie przekazuje je obecnym kierowcom mdraid. Tak więc rzeczy takie jak obsługa błędów odczytu dysku, równoważenie obciążenia we / wy itp. Powinny być dość dojrzałe.

To dobra wiadomość.

Przybory

Nie możesz mdadmz niego korzystać (przynajmniej nie w łatwy sposób¹), a narzędzia LVM RAID nie są tak dojrzałe. Na przykład w Debian Wheezy lvsnie mogę powiedzieć ci statusu synchronizacji RAID5. Bardzo wątpię, aby naprawa i odzyskiwanie (szczególnie z sytuacji, w których „to nigdy nie powinno się zdarzyć!”) Jest tak dobre, jak mdadm (i przypadkowo wpadłem na jedną z tych w moich testach, i w końcu zrezygnowałem z odzyskiwania - odzyskiwanie z mdadm byłoby łatwe).

Zwłaszcza jeśli nie używasz najnowszych wersji wszystkich narzędzi, jest coraz gorzej.

Brakujące funkcje

Obecne wersje LVM-RAID nie obsługują zmniejszania ( lvreduce) woluminu logicznego RAID. Nie obsługują też zmiany liczby dysków ani poziomu RAID ( lvconvertwyświetla komunikat o błędzie informujący, że nie jest jeszcze obsługiwany). lvextenddziała, a nawet może zwiększyć poziomy RAID, które mdraid dopiero niedawno uzyskały wsparcie, takie jak RAID10. Z mojego doświadczenia wynika, że ​​wydłużanie LV jest znacznie częstsze niż ich zmniejszanie, więc jest to właściwie uzasadnione.

Niektóre inne funkcje mdraid nie są obecne, a zwłaszcza nie można dostosować wszystkich opcji dostępnych w mdadm.

W starszych wersjach (jak na przykład w Debian Wheezy) LVM RAID również nie obsługuje rozwijania. Na przykład w Wheezy:

root@LVM-RAID:~# lvextend -L+1g vg0/root
Extending logical volume root to 11.00 GiB
Internal error: _alloc_init called for non-virtual segment with no disk space.

Ogólnie rzecz biorąc, nie chcesz uruchamiać wersji Wheezy.

Powyższe jest po zainstalowaniu. To też nie jest trywialny proces.

Problemy z narzędziem

Grając z moją maszyną wirtualną Jessie, odłączyłem (praktycznie) jeden dysk. To działało, maszyna nadal działała. lvsnie dał jednak żadnych wskazówek, że tablice uległy degradacji. Ponownie podłączyłem dysk i usunąłem sekundę. Pozostał uruchomiony (to jest raid6). Ponownie dołączony, nadal brak wskazań z lvs. Uruchomiłem lvconvert --repairwolumin, powiedział mi, że jest OK. Potem wyciągnąłem trzeci dysk ... i maszyna zginęła. Włóż go ponownie, uruchomiłem ponownie i nie jestem pewien, jak to naprawić. mdadm --force --assemblenaprawiłoby to; wydaje się, że ani vgchangenie lvchangema tej opcji (lvchange akceptuje --force, ale wydaje się, że nic nie robi). Nawet próbując dmsetupbezpośrednio nakarmić tabelę mapowania do jądra, nie mogłem wymyślić, jak ją odzyskać.

Również mdadmto dedykowane narzędzie do zarządzania tylko RAID. LVM robi o wiele więcej, ale wydaje mi się (i przyznaję, że jest to dość subiektywne), jakby funkcja RAID została tam wrzucona; to nie do końca pasuje.

Jak faktycznie zainstalować system z LVM RAID?

Oto krótki zarys instalacji w Debian Jessie lub Wheezy. Jessie jest o wiele łatwiejsza; uwaga, jeśli zamierzasz wypróbować to na Wheezy, najpierw przeczytaj całość…

  1. Do instalacji użyj pełnego obrazu CD, a nie obrazu netinst.

  2. Postępuj normalnie, przejdź do partycjonowania dysku, skonfiguruj woluminy fizyczne LVM. Państwo mogą umieścić /bootna LVM-RAID (na Jessie, a na świszczące z niektórych prac szczegółowo poniżej).

  3. Utwórz grupy woluminów. Pozostaw to w menu LVM.

  4. Pierwsza odrobina zabawy - instalator nie ma dm-raid.kozaładowanego modułu, a nawet nie jest dostępny! Możesz więc pobrać go z pakietu linux-image, który zostanie zainstalowany. Przełącz na konsolę (np. Alt- F2) i:

    cd /tmp
    dpkg-deb --fsys-tarfile /cdrom/pool/main/l/linux/linux-image-*.deb | tar x
    depmod -a -b /tmp
    modprobe -d /tmp dm-raid
    
  5. Instalator nie wie, jak utworzyć LVM-RAID LV, więc musisz to zrobić za pomocą wiersza poleceń. Uwaga: nie przeprowadzałem żadnych testów porównawczych; rozmiar paska ( -I) poniżej jest całkowicie zgadnięciem dla mojej konfiguracji maszyny wirtualnej:

    lvcreate --type raid5 -i 4 -I 256 -L 10G -n root vg0
    
  6. W Jessie możesz użyć RAID10 do wymiany. W Wheezy RAID10 nie jest obsługiwany. Zamiast tego możesz użyć dwóch partycji wymiany, każdej RAID1. Ale musi to powiedzieć dokładnie, jakie fizyczne woluminy, aby umieścić je na albo kładzie obie połówki lustra na tym samym dysku . Tak. Poważnie. W każdym razie wygląda to tak:

    lvcreate --type raid1 -m1 -L 1G -n swap0 vg0 /dev/vda1 /dev/vdb1
    lvcreate --type raid1 -m1 -L 1G -n swap1 vg0 /dev/vdc1 /dev/vdd1
    
  7. Na koniec przełącz się z powrotem do instalatora i naciśnij „Zakończ” w menu LVM. Pojawi się teraz wiele logicznych woluminów. To instalator nie rozumie, co się dzieje; zignoruj ​​wszystko za pomocą rimagelub rmetaw ich imieniu (zobacz pierwszy akapit powyżej, aby uzyskać wyjaśnienie, co to jest).

  8. Śmiało i twórz systemy plików, wymieniaj partycje itp. Jak zwykle. Zainstaluj system podstawowy itp., Aż pojawi się monit o grub.

  9. Na Jessie grub2 będzie działać, jeśli zostanie zainstalowany w MBR (lub prawdopodobnie z EFI, ale tego nie testowałem). Na Wheezy instalacja zakończy się niepowodzeniem, a jedynym rozwiązaniem jest backportowanie grub2 Jessie. To jest właściwie dość łatwe, kompiluje się czysto na Wheezy. Jakoś przenieś swoje paczki z grubymi plikami do /target(lub zrób to w sekundę po chroocie), a następnie:

    chroot /target /bin/bash
    mount /sys
    dpkg -i grub-pc_*.deb grub-pc-bin_*.deb grub-common_*.deb grub2-common_*.deb 
    grub-install /dev/vda … grub-install /dev/vdd # for each disk
    echo 'dm_raid' >> /etc/initramfs-tools/modules
    update-initramfs -kall -u
    update-grub # should work, technically not quite tested²
    umount /sys
    exit
    
  10. Właściwie na moim najnowszym Jessie VM grub-install zawiesił się. Przejście do F2 i zrobienie tego while kill $(pidof vgs); do sleep 0.25; done, po czym to samo lvs, przeszło przez grub-install. Wyglądało na to, aby wygenerować poprawny config mimo to, ale na wszelki wypadek zrobiłem chroot /target /bin/bash, się /proci /syszostały zamontowane, i zrobił update-grub. Tym razem zakończyło się. Następnie zrobiłem a, dpkg-reconfigure grub-pcaby wybrać instalację gruba na MBR wszystkich wirtualnych dysków.

  11. Na Wheezy, po wykonaniu powyższych czynności, wybierz „kontynuuj bez bootloadera”.

  12. Zakończ instalację. Uruchomi się. Prawdopodobnie.

Wiedza społeczności

Istnieje spora liczba osób, które wiedzą o tym mdadmi mają duże doświadczenie w zakresie wdrażania. Google prawdopodobnie odpowie na większość pytań na ten temat. Zasadniczo można się tutaj spodziewać pytania, aby uzyskać odpowiedzi, prawdopodobnie w ciągu jednego dnia.

Tego samego nie można powiedzieć o LVM RAID. Trudno znaleźć przewodniki. Większość wyszukiwań w Google, które uruchomiłem, zamiast tego znalazły mi rzeczy na temat używania tablic mdadm jako PV. Szczerze mówiąc, dzieje się tak prawdopodobnie dlatego, że jest nowszy i rzadziej używany. W pewnym sensie niesprawiedliwe jest utrzymywanie tego przeciwko sobie - ale jeśli coś pójdzie nie tak, znacznie większa istniejąca społeczność wokół mdadm zwiększa prawdopodobieństwo odzyskania moich danych.

Wniosek

LVM-RAID rozwija się dość szybko. W Wheezy nie jest tak naprawdę użyteczny (przynajmniej bez robienia backportów LVM i jądra). Wcześniej, w 2014 roku, podczas testowania Debiana, wydawało się to ciekawym, ale niedokończonym pomysłem. Obecne testy, w zasadzie to, co stanie się Jessie, wydają się być czymś, czego można by użyć, jeśli często trzeba tworzyć małe wycinki z różnymi konfiguracjami RAID (coś, co jest koszmarem administracyjnym mdadm).

Jeśli twoje potrzeby są odpowiednio zaspokojone przez kilka dużych macierzy RAID mdadm, podzielonych na partycje przy użyciu LVM, sugeruję kontynuowanie korzystania z nich. Jeśli zamiast tego musisz utworzyć wiele tablic (lub nawet tablic woluminów logicznych), rozważ przejście na LVM-RAID. Ale miej dobre kopie zapasowe.

Wiele zastosowań LVM RAID (a nawet mdadm RAID) jest przejmowanych przez takie rzeczy, jak klastrowe systemy przechowywania / obiektów, ZFS i btrfs. Polecam również zbadanie tych, które mogą lepiej zaspokoić Twoje potrzeby.


Dziękuję

Chciałbym podziękować psusi za nakłonienie mnie do powrotu do stanu LVM-RAID i zaktualizowania tego postu.

Przypisy

  1. Podejrzewam, że można użyć mapera urządzeń do sklejenia metadanych i danych w taki sposób, mdadm --assembleaby je zabrał. Oczywiście możesz po prostu dobrze działać mdadmna woluminach logicznych ... i byłoby to rozsądniejsze.

  2. Podczas instalacji Wheezy nie udało mi się tego po raz pierwszy i zakończyłem bez konfiguracji grub. Musiałem uruchomić system, wprowadzając wszystkie informacje w monicie grub. Po uruchomieniu zadziałało, więc myślę, że będzie działało dobrze z poziomu instalatora. Jeśli skończysz po wyświetleniu monitu o grub, oto magiczne linie do wpisania:

    linux /boot/vmlinuz-3.2.0-4-amd64 root=/dev/mapper/vg0-root
    initrd /boot/initrd.image-3.2.0-4-amd64
    boot
    

PS: Minęło trochę czasu, odkąd faktycznie przeprowadziłem oryginalne eksperymenty. Udostępniłem moje oryginalne notatki . Zauważ, że zrobiłem teraz nowsze, omówione w tej odpowiedzi, a nie w tych notatkach.

derobert
źródło
2
W rzeczywistości otrzymujesz ten błąd z powodu wersji lvm w wheezy, która jest bardzo stara i zawiera błędy; działa mi dobrze tutaj na Ubuntu 14.04 z lvm w wersji 2.02.98 (uważam, że jessie jest przynajmniej taka nowa). Po drugie, polecenie, które pokazałeś jako porażkę, to zmiana rozmiaru - zmiana kształtu jest czymś zupełnie innym. Przekształcenie oznacza zmianę z RAID1 na RAID5 lub z RAID RAID 3 na 4 RAID RAID 5. To wciąż nie jest obsługiwane, ale po prostu zmiana rozmiaru działa dobrze.
psusi
@psusi Ach, myślałem, że oni również uważają zmianę rozmiaru za przekształcenie (ponieważ zmienia ono geometrię RAID, biorąc pod uwagę tak blisko, jak zmienia się liczba dysków). Pomyślałem, że zanim dostanę błąd, próbując go również na Jessie, ponownie go przetestuję. (Musisz zbudować nową maszynę wirtualną Jessie LVM-RAID, więc to potrwa.) Dziękuję.
derobert
dpkg-debzapewnia czystszy sposób na wyodrębnianie plików z pakietów deb, bez konieczności przeskakiwania etapami.
muru
@muru jest dpkg-debdostępny w środowisku instalatora? To nie było ... Upewnij się też, żeby sprawdzić Wheezy.
derobert
@derobert ar -xpowinien również działać, aby rozpakować archiwa deb, choć jest to bardziej niezgrabne. A co powiesz na aktualizację swojej odpowiedzi z obecnym statusem?
Faheem Mitha
7

Nie wiedziałem też, że LVM może zrobić RAID. Osobiście trzymałbym się mdadm, ponieważ jest to znacznie bardziej dojrzałe oprogramowanie, które robi to samo. Jeśli coś zepsuje się w LVM RAID, prawdopodobnie nie będziesz w stanie uzyskać tak dużego wsparcia, jak w przypadku korzystania z mdadm. Ponadto nie ufałbym LVM RAID, ponieważ LVM od dawna nie jest najsolidniejszym oprogramowaniem.

ZFS i BTRFS to przyszłość. Korzyści, które dają, wykraczają poza to, co jest możliwe w warstwie blokowej. O ile nie dążę do kompatybilności, nie będę już używać LVM / mdadm. ZFS i BTRFS mają wiele funkcji, takich jak kompresja, deduplikacja i kopiowanie przy zapisie, ale nie będę wchodził w to tutaj, ponieważ byłoby to trochę poza zakresem.

Na koniec przeprowadź badania i wykorzystaj to, co odpowiada Twoim potrzebom / pragnieniom.

Darmowe pociski
źródło
Dziękuję za odpowiedź. Zastanów się, czy nie rozszerzyć go o to, dlaczego nie ufasz LVM.
Faheem Mitha
2
„ZFS i BTRFS są przyszłością” Niekoniecznie. Według mojej wiedzy ZFS na Linuksie jest nadal oparty na BEZPIECZNIKU, więc jest głównie używany do uzyskiwania funkcji ZFS bez korzystania z Solaris lub FreeBSD. BTRFS jest niesamowity, ale niekoniecznie jest to przyszłość. Na przykład Red Hat wydaje się LVM+XFSzmierzać bardziej w kierunku niż BTRFS. Obsługują BTRFS, ale to raczej kwestia Oracle / SuSE.
Bratchley,
Nie mówię, że z jakiegoś powodu nie lubię btrfs (tak naprawdę to lubię). Po prostu nie jest to kierunek, w którym zmierza duża dystrybucja, taka jak Red Hat, i nie mogę wymyślić niczego, co BTRFS może zrobić, czego LVM / XFS nie może przynajmniej dość dobrze przybliżyć.
Bratchley,
Powiedziałbym również, że BTRFS będzie fajny, ale LVM może zrobić wiele rzeczy, których BTRFS po prostu nie może (jeszcze) zrobić. Na przykład można wykonywać woluminy hybrydowe i migawki cienkiego udostępniania, z których żaden (AFAIK) nie może wykonać BTRFS.
Bratchley,
9
„Według mojej wiedzy ZFS na Linuksie jest nadal oparty na BEZPIECZNIKACH” od ponad pięciu lat jest to niepoprawne. ZoL jest modułem jądra i jest w pełni gotowy do produkcji. Używam go intensywnie od początku 2010 roku.
Jim Salter