TrueNAS w ZFS
Jeśli jesteś specjalistą ds. pamięci masowej, ale dopiero zaczynasz korzystać z TrueNAS i OpenZFS, ich działanie i warunki mogą być dla Ciebie nieco inne. Celem tego wpisu na blogu jest przedstawienie podstawowego przewodnika na temat działania OpenZFS w zakresie przechowywania danych oraz przegląd niektórych terminów i definicji używanych do opisu działań związanych z przechowywaniem w OpenZFS. Szybki słownik terminów OpenZFS można znaleźć tutaj. TrueNAS w ZFS.
Główne zalety OpenZFS
OpenZFS jest zarówno systemem plików, jak i menedżerem woluminów. Połączenie tych dwóch elementów pozwala OpenZFS dokładnie wiedzieć, gdzie znajdują się dane na każdym urządzeniu pamięci masowej i ile danych zarządza każde urządzenie pamięci masowej. OpenZFS zapewnia również kilka wbudowanych implementacji RAID. Funkcje te pozwalają OpenZFS radykalnie skrócić czas odbudowy w przypadku awarii urządzenia pamięci masowej.
OpenZFS odbudowuje jedynie użyte bloki na każdym urządzeniu pamięci masowej, zamiast skanować całe urządzenie pamięci pod kątem potencjalnych danych. Jest to ogromna zaleta, ponieważ urządzenia pamięci masowej stają się coraz większe.
Jedną z najważniejszych funkcji OpenZFS jest to, że ma on na celu zapewnienie integralności danych. Ponieważ OpenZFS oblicza sumę kontrolną dla każdego użytego bloku na urządzeniu pamięci masowej, może zidentyfikować, kiedy na nośniku pamięci wystąpił błąd, taki jak zgnilizna bitów, który spowodował uszkodzenie danych. OpenZFS wykonuje te same podpisy kryptograficzne na wszystkich metadanych.
Jeśli podstawowy sprzęt ma problem, OpenZFS zdaje sobie sprawę, że pobrane dane nie odpowiadają jego zapisom i może podjąć działania. OpenZFS automatycznie koryguje wszelkie wykryte błędy danych na urządzeniu pamięci masowej z nadmiarowej kopii.
OpenZFS kontynuuje ten projekt ochrony danych, korzystając z systemu zarządzania blokami kopiowania przy zapisie. OpenZFS nigdy nie nadpisuje istniejących bloków. Podczas zapisywania danych OpenZFS identyfikuje bloki, które należy zmienić i zapisuje je w nowej lokalizacji na urządzeniu magazynującym.
Stare bloki pozostają nienaruszone. Ten proces kopiowania przy zapisie nie tylko chroni dane przed częściowym zapisem i uszkodzeniem, ale zapewnia dodatkowe funkcje, takie jak migawki i klonowanie danych, czyli tworzenie nowego systemu plików na podstawie migawki.
Pule pamięci i zbiory danych
Najwyższym poziomem abstrakcji pamięci w TrueNAS jest pula pamięci. Pula pamięci to zbiór urządzeń pamięci masowej, takich jak dyski twarde, dyski SSD i moduły NVDIMM, NVMe, który umożliwia administratorowi łatwe zarządzanie wykorzystaniem pamięci i dostępem do systemu.
Pula pamięci to miejsce, w którym dane są zapisywane lub odczytywane przez różne protokoły uzyskujące dostęp do systemu. Po utworzeniu pula pamięci masowej umożliwia dostęp do zasobów pamięci masowej poprzez tworzenie i udostępnianie zbiorów danych opartych na plikach (NAS) lub zvol opartych na blokach (SAN).
Zbiór danych to nazwany fragment pamięci w puli pamięci używany do dostępu do puli pamięci na podstawie plików. Zbiór danych może przypominać tradycyjny system plików dla systemów Windows, UNIX lub Mac. W OpenZFS surowe urządzenie blokowe, czyli LUN, jest znane jako zvol.
Zvol to także nazwany fragment pamięci o nieco innych cechach niż zbiór danych.
Po utworzeniu zbiór danych można udostępnić za pomocą NFS, SMB, AFP lub WebDAV i uzyskać do niego dostęp w dowolnym systemie obsługującym te protokoły. Dostęp do Zvols jest możliwy za pomocą protokołów iSCSI lub Fibre Channel (FC).
Ogromna elastyczność oferowana przez pule pamięci masowej pozwala efektywnie i efektywnie wykorzystywać całą pamięć masową w systemie. Nie ma potrzeby przydzielania określonych dysków twardych lub innych urządzeń pamięci masowej do określonych zadań lub protokołów, które zwykle powodują powstawanie niewykorzystanej, zmarnowanej przestrzeni w innych starszych architekturach pamięci masowej.
TrueNAS obsługuje więcej niż jedną pulę pamięci na system, a pulę pamięci można powiększyć w dowolnym momencie, dodając więcej pamięci do systemu.
vdevs
Następny poziom abstrakcji pamięci w OpenZFS, vdev lub urządzenie wirtualne, to jedna z bardziej unikalnych koncepcji związanych z pamięcią masową OpenZFS.
Vdev to logiczna jednostka pamięci w pulach pamięci OpenZFS. Każdy vdev składa się z jednego lub większej liczby dysków twardych, dysków SSD, modułów NVDIMM, NVMe lub SATA DOM.
Redundancja danych, czyli programowa implementacja RAID, jest definiowana na poziomie vdev. Vdev zarządza znajdującymi się w nim urządzeniami pamięci masowej, odciążając funkcje ZFS wyższego poziomu od tego zadania.
Pula pamięci to zbiór vdevów, które z kolei stanowią indywidualną kolekcję urządzeń pamięci masowej. Tworząc pulę pamięci w TrueNAS, tworzysz kolekcję vdev z określoną redundancją lub poziomem ochrony.
Kiedy dane są zapisywane w puli pamięci, są one rozkładane na wszystkie urządzenia vdev w puli pamięci. Możesz myśleć o kolekcji vdev w puli pamięci jako o zestawie wirtualnych urządzeń pamięci masowej RAID 0. Duża część wydajności OpenZFS pochodzi z rozłożenia danych pomiędzy vdevami w puli pamięci.
Ogólnie rzecz biorąc, im więcej vdevów w puli pamięci, tym lepsza wydajność. Podobnie jak w ogólnej koncepcji RAID 0, im więcej urządzeń pamięci masowej znajduje się w pasku RAID 0, tym lepsza jest wydajność odczytu i zapisu.
RAID
W OpenZFS koncepcja grupy RAID jest podobna do innych implementacji, ponieważ dane są rozkładane na grupę urządzeń pamięci masowej z obliczeniem parzystości lub można dublować urządzenia Vdevowe, które zarządzają ochroną danych RAID za pomocą OpenZFS i ogólnie termin grupa RAID można zrównać z terminem vdev.
Kopie lustrzane — podobne do lustrzanej kopii RAID 1, w której dane zapisane na jednym urządzeniu są zapisywane na innym urządzeniu. OpenZFS obsługuje wiele kopii lustrzanych urządzeń. W lustrze można umieścić dwa, trzy, a nawet cztery urządzenia pamięci masowej, a wszystkie dane zapisane na jednym urządzeniu zostaną zapisane na wszystkich urządzeniach w lustrze. Lustro zapewni, że vdev będzie działać, nawet jeśli wszystkie urządzenia oprócz jednego zawiodą w vdev. Typowa konfiguracja zdefiniuje wiele serwerów lustrzanych vdev dla dwóch urządzeń, co zapewni doskonałą wydajność losowych operacji wejścia/wyjścia. Kompromisem jest pojemność pamięci masowej ze względu na ilość pojemności zarezerwowaną na potrzeby nadmiarowości.
RAIDZ 1 – podobnie jak RAID 5, RAIDZ 1 rozprowadza dane i informacje o parzystości pomiędzy wszystkimi urządzeniami pamięci masowej w vdev, chroniąc przed awarią pojedynczego urządzenia w vdev. Jest to najbardziej wydajna konfiguracja z punktu widzenia pojemności i zapewniająca dobrą wydajność w przypadku dużych aplikacji z zapisem sekwencyjnym, takich jak kopie zapasowe danych.
RAIDZ 2 – podobnie jak RAID 6, RAIDZ 2 rozdziela dane i informacje o parzystości pomiędzy wszystkie urządzenia pamięci masowej w vdev, chroniąc przed potencjalną awarią dwóch urządzeń pamięci masowej w vdev. Jest to najbardziej typowa konfiguracja dla aplikacji ogólnego użytku przechowujących podstawowe dane w systemie TrueNAS, ponieważ zapewnia doskonałą równowagę pomiędzy dostępną pojemnością, ochroną danych i wydajnością.
Ponieważ OpenZFS jest także menedżerem RAID, TrueNAS nie wymaga sprzętowego kontrolera RAID, co czyni TrueNAS bardziej wydajnym systemem przechowywania danych. OpenZFS zapewnia programową macierz RAID i konfiguracje, które najprawdopodobniej znasz ze swojego starszego systemu pamięci masowej. Oto niektóre terminy i definicje dotyczące nadmiarowości urządzeń pamięci masowej OpenZFS.
RAIDZ 3 – Potrójna ochrona przez parzystość. RAIDZ 3 rozprowadza dane i informacje o parzystości pomiędzy wszystkimi urządzeniami pamięci masowej w vdev, chroniąc przed potencjalną awarią trzech urządzeń pamięci masowej w vdev.
TrueNAS korzystający z OpenZFS chroni dane na wielu poziomach i dokłada wszelkich starań, aby zapewnić wydajność i pojemność potrzebną Twoim aplikacjom.
Podsumujmy omówioną właśnie hierarchię przechowywania.
- Poszczególne urządzenia pamięci masowej (dyski twarde, dyski SSD, NVDIMMS, NVMe, Sata DOMS) są gromadzone w vdevs.
- Mirroring lub RAID są realizowane na poziomie vdev.
- vdevs są gromadzone razem w celu utworzenia pul pamięci.
- Dane są rozłożone na wszystkich vdevach w puli pamięci.
- W pulach pamięci tworzone są zbiory danych (NAS) lub zvol (SAN), aby umożliwić dostęp do danych
- Zbiory danych są udostępniane za pośrednictwem protokołów plików NFS, SMB, AFP lub WebDAV, a dostęp do plików zvol można uzyskać za pośrednictwem protokołów blokowych iSCSI lub FC.
Oto kilka ogólnych zasad dotyczących urządzeń pamięci masowej, macierzy RAID, vdevów, zbiorów danych i pul pamięci.
- W przypadku TrueNAS używaj wyłącznie urządzeń pamięci masowej dostarczonych przez iXsystems.
- Po utworzeniu poziomu RAIDZ lub kopii lustrzanej w vdev, nie można do niego dodawać dodatkowych urządzeń.
- Aby dodać więcej miejsca w puli pamięci, dodaj więcej vdevów.
- Nie mieszaj różnych poziomów RAID w tej samej puli pamięci.
- Możesz łączyć SAN i NAS w tej samej puli pamięci.
- W systemie można mieć wiele pul pamięci.
- Możesz dodawać, ale nie możesz usuwać vdevów z puli pamięci.
- Wszystkie pliki vdev w puli pamięci powinny mieć ten sam rozmiar.
- Najlepsza praktyka to nie więcej niż 12 urządzeń pamięci masowej na jednego vdev.
- Możesz utracić dyski w vdevie, ale nie możesz stracić całego vdev.
Specjalne vdev
Pule pamięci mogą używać specjalnych vdevów w celu poprawy wydajności. Te specjalne typy vdev nie są używane do trwałego przechowywania danych, ale zamiast tego tymczasowo buforują dane na szybszych urządzeniach.
SLOG : OpenZFS utrzymuje dziennik zamiarów ZFS (ZIL) jako część puli pamięci. Podobnie jak dziennik w niektórych innych systemach plików, w tym dzienniku zapisu OpenZFS zapisuje trwające operacje, aby można je było zakończyć lub wycofać w przypadku awarii systemu lub awarii zasilania.
Jednym ze sposobów zwiększenia wydajności zapisu jest oddzielenie ZIL od normalnych operacji na puli pamięci poprzez dodanie dedykowanego urządzenia jako oddzielnego dziennika, czyli SLOG. Dedykowane urządzenie to zwykle małe, ale bardzo szybkie urządzenie, takie jak urządzenie flash o dużej wytrzymałości, takie jak dysk SSD lub NVDIMM.
Czasami to urządzenie SLOG jest znane jako pamięć podręczna zapisu. SLOG może poprawić wydajność zapisu synchronicznego w przypadku protokołu plików, takiego jak NFS, gdzie aplikacja czeka na potwierdzenie z miejsca docelowego przechowywania, że dane faktycznie zostały zapisane. SLOG będzie miał niewielki wpływ na aplikacje z zapisem asynchronicznym. Protokoły SMB i iSCSI zwykle korzystają z zapisu asynchronicznego, więc użycie urządzenia SLOG nie przyniesie korzyści.
L2ARC : W OpenZFS część systemowej pamięci RAM jest rezerwowana jako adaptacyjna pamięć podręczna zastępcza (ARC) do buforowania odczytów z systemu i zapewniania lepszej wydajności aplikacjom intensywnie odczytującym. Jeśli fragment danych jest stale odczytywany, zazwyczaj trafia do ARC.
Kiedy fragment danych jest używany wystarczająco często, aby skorzystać z buforowania, ale nie na tyle często, aby można go było przechowywać w pamięci RAM, OpenZFS może przechowywać go w urządzeniu pamięci podręcznej, zwanym ARC poziomu 2 lub L2ARC. L2ARC to zazwyczaj bardzo szybka i wytrzymała pamięć flash, taka jak dysk SSD lub NVDIMM.
Podobnie jak w przypadku każdej pamięci podręcznej odczytu, L2ARC może z czasem poprawić wydajność. Im więcej danych zostanie odczytanych, tym więcej danych jest potencjalnie przechowywanych w pamięci podręcznej w ARC lub L2ARC. Z biegiem czasu pamięć podręczna odczytu „nagrzeje się” i poprawi wydajność odczytu.
Wydajność i vdev
Zawsze istnieje kompromis, jeśli chcesz zrównoważyć wydajność i pojemność systemu pamięci masowej. Ogólnie rzecz biorąc, lustro może zapewnić lepsze IOPS i przepustowość odczytu, ale RAIDZ może zapewnić lepszą przepustowość zapisu i znacznie lepszą efektywność wykorzystania przestrzeni. Jednak im więcej vdevów w puli, tym lepsza jest pula.
W przypadku aplikacji wymagających dużej liczby operacji IOPS/odczytu najlepiej sprawdza się wiele lustrzanych rozwiązań vdev. Nie jest to jednak konfiguracja najbardziej efektywna pod względem przestrzennym, ponieważ wymaga wydajności w zamian za przestrzeń.
Ogólne najlepsze praktyki dotyczące wydajności podczas tworzenia vdevów obejmują:
- Używaj dwudyskowych lustrzanych vdevów do bardziej losowych obciążeń, takich jak wirtualizacja.
- Używaj dłuższych vdevów RAIDZ 1 lub RAIDZ 2 do przechowywania kopii zapasowych lub ogólnych obciążeń pamięci masowej.
- W przypadku aplikacji wymagających intensywnego zapisu zazwyczaj lepiej jest mieć vdev RAIDZ, który zapewnia dłuższe paski na vdev.
- Twórcy vdev z lustrzaną kopią (RAID 10) mają najszybszy czas odbudowy.
Adresy punktów przyjmujących zlecenia można zobaczyć pod tym linkiem “Punkty przyjmowania zleceń“
RAID 50 Data Recovery czyli odzyskiwanie danych z macierzy Raid 50 to zaawansowana usługa oferowana przez MiP Data & Forensic,
posiadająca bardzo bogate doświadczenie w odzyskiwaniu danych z macierzy RAID w Centrum analiz i odzyskiwania danych w Warszawie