Jakie są konsekwencje wydajności pracy maszyn wirtualnych na hoście ZFS?


11

Rozważam migrację z ext3 do ZFS w celu przechowywania danych na moim hoście Debian Linux, przy użyciu ZFS w systemie Linux . Jedną z zabójczych cech ZFS, której naprawdę chcę, jest gwarancja integralności danych. Z niecierpliwością oczekuję także możliwości trywialnego powiększania pamięci w miarę wzrostu moich potrzeb.

Jednak uruchamiam również kilka maszyn wirtualnych na tym samym hoście. (Chociaż normalnie w moim przypadku na hoście działa tylko jedna maszyna wirtualna w danym momencie).

Biorąc pod uwagę zachowanie sumowania danych ZFS i zachowanie kopiowania przy zapisie, a także fakt, że obrazy dysku maszyny wirtualnej są stosunkowo dużymi plikami (plik obrazu dysku mojej głównej maszyny wirtualnej ma obecnie pojemność 31 GB), jakie są konsekwencje wydajnościowe dla gościa maszyny wirtualnej takiego migracja? Jakie kroki mogę podjąć, aby zmniejszyć możliwy negatywny wpływ na wydajność?

Mogę żyć z mniejszymi gwarancjami integralności danych na obrazach dysków maszyny wirtualnej, jeśli to konieczne (nie robię nic naprawdę krytycznego w żadnej maszynie wirtualnej) i mogę łatwo oddzielić je od reszty systemu plików, ale byłoby miło, gdybyś nie muszę (nawet wybiórczo) wyłączać funkcji, która najbardziej powoduje, że chcę migrować do innego systemu plików.

Sprzęt jest dość mocny jak na system klasy stacji roboczej, ale nie da wiele świeczki serwerowi wysokiej klasy (32 GB pamięci RAM z rzadko używanym> 10 GB, 6-rdzeniowy procesor 3,3 GHz, obecnie użyteczne 2,6 TB miejsca na dysku według dfi w sumie około 1,1 TB wolnego; migracja do ZFS prawdopodobnie doda trochę więcej wolnego miejsca ) i nie planuję uruchamiania deduplikacji danych (ponieważ włączenie deduplikacji po prostu nie dodałoby wiele w mojej sytuacji). Plan jest zacząć od konfiguracji JBOD (oczywiście z dobrymi kopiami zapasowymi), ale mogę ostatecznie przejść do konfiguracji lustrzanego dwukierunkowego, jeśli warunki to uzasadniają.


Należy również pamiętać, że ZFS działa lepiej niż tradycyjny RAID5 pod względem IOPS . Zapisy RAIDZ działają z prędkością pojedynczego dysku, ponieważ nie są narażone na kary wydajności we / wy, które nękają tradycyjne RAID5 / 6.
Stefan Lasiewski,

1
Dziękujemy wszystkim, którzy odpowiedzieli na twoje spostrzeżenia! Na pewno wrócę do tego pytania później.
CVn

Komentarz Stefana jest… cóż, to po prostu nieprawda. Wydajność ZFS RAIDZ jest znacznie gorsza z punktu widzenia IOPS (z czym zwykle masz problemy w maszynach wirtualnych) niż tradycyjne macierze RAID5. Nie zakładaj poprawy wydajności zapisu, przechodząc do ZFS. To rzadko się zdarza. Zwiększenia odczytu będą zależeć od pamięci RAM dostępnej dla ARC oraz od rozmiaru i delta zestawu roboczego. Zwykle w przypadku maszyn wirtualnych ZFS ARC pomaga w ogólnej wydajności odczytu w porównaniu do alternatyw. Pisze zwykle cierpią, nawet na lusterkach, ZAWSZE z raidz.
Nex7

@ Nex7 Jak zapisuje się w ogóle bez RAID z ZFS, ale tylko z jednym urządzeniem pamięci masowej, które np. Zapewnia niektórzy mdraid? Czy ZFS działa porównywalnie z innymi systemami plików, ponieważ nie używa się żadnych wymyślnych macierzy RAID?
Thorsten Schöning

Odpowiedzi:


4

Ponieważ ZFS działa na poziomie bloku, rozmiar plików nie ma znaczenia. ZFS wymaga więcej pamięci i procesora, ale z natury nie jest znacznie wolniejszy jako system plików. Trzeba jednak pamiętać, że RAIDZ nie jest równoważny szybkością z RAID5. RAID10 jest w porządku, gdy szybkość jest priorytetem.


4

ZFS na przyzwoitym (tj. Wzmocnionym) sprzęcie będzie prawdopodobnie szybszy niż inne systemy plików, prawdopodobnie chcesz utworzyć ZIL w szybkiej lokalizacji (tj. SSD). Jest to zasadniczo lokalizacja do zapisywania w pamięci podręcznej (cóż, bardziej jak dziennik w ext3 / 4). Pozwala to skrzynce ack zapisywać jako zapisaną na dysk, zanim rzeczywiste wrzeciona będą miały dane.

Możesz również utworzyć L2 ARC na dysku SSD do odczytu pamięci podręcznej. Jest to fantastyczne w środowisku maszyn wirtualnych, w którym dyski fizyczne można rzucić na kolana, uruchamiając kilka maszyn wirtualnych jednocześnie.

Dyski trafiają do VDEV, VDEV do zpool (używaj jednocześnie całych dysków). Jeśli jest to mniejszy system, możesz chcieć mieć jeden zpool i (jeśli nie martwisz się zbytnio utratą danych) jeden VDEV. VDEV to miejsca, w których wybierasz poziom RAID (chociaż możesz również MIRROR VDEV, jeśli masz wystarczającą liczbę dysków). Najwolniejszy dysk w VDEV określa szybkość całego VDEV.

W ZFS chodzi o integralność danych - powodem, dla którego wiele tradycyjnych narzędzi do obsługi systemu plików nie istnieje (takich jak fsck), jest problem, którego rozwiązania nie mogą istnieć w systemie plików ZFS.

IMO największą wadą ZFS jest to, że jeśli twój system plików zbliży się do pełnego (powiedzmy 75% +), robi się BARDZO wolno. Tylko nie idź tam.


2

31 GB naprawdę nie jest wcale duże ...

W każdym razie, w zależności od aktualnie używanego systemu plików, może się okazać, że ZFS działa nieco wolniej, ale biorąc pod uwagę specyfikację sprzętu może być nieistotny.

Oczywiście ZFS użyje dużej ilości pamięci RAM do buforowania, co może sprawić, że twoje maszyny wirtualne będą wydawać się „szybsze” w ogólnym użyciu (gdy nie wykonujesz intensywnego czytania lub pisania). Nie jestem pewien, jak ZFS jest dostrojony w Linuksie, ale może być konieczne ograniczenie jego ARC, jeśli to możliwe, aby zatrzymać ucieczkę z całą pamięcią RAM (Widząc, że będziesz potrzebować przyzwoitej porcji dla systemu hosta i Maszyny wirtualne).

Chciałbym włączyć kompresję (radzę teraz włączyć ją, chyba że masz dobry powód, aby tego nie robić). Pamiętaj, że należy to zrobić przed umieszczeniem danych w systemie plików. Większość ludzi jest zaskoczona, gdy włącza się szybciej, ponieważ algorytmy kompresji zwykle działają szybciej niż dyskowe operacje we / wy. Wątpię, czy spowoduje to znaczny problem z wydajnością twojego 6-rdzeniowego procesora. Nie spodziewałem się, że maszyny wirtualne będą dużo kompresować, ale udało mi się przekształcić ~ 470 GB danych maszyn wirtualnych w 304 GB tylko przy domyślnym ustawieniu kompresji.

Nie przejmuj się deduplikacją, po prostu wróci, by cię później prześladować, a ty będziesz spędzać tygodnie na przeszukiwaniu danych, próbując się ich pozbyć.

Jeśli napotkasz problemy z wydajnością, oczywistą odpowiedzią jest dodanie dysku SSD jako ZIL / L2ARC lub nawet obu. Nie jest idealne używanie jednego urządzenia dla obu urządzeń, ale najprawdopodobniej nadal poprawi ono wydajność puli zawierającej niewielką liczbę dysków / napędów wirtualnych.

Aby dodać: naprawdę spróbowałbym zacząć od konfiguracji redundantnej, jeśli to możliwe (najlepiej mirrory), lub jak najszybciej przekształcić się w mirrory z paska. Podczas gdy ZFS sumuje wszystkie dane i wykrywa błędy w locie (lub podczas szorowania), nie będzie w stanie nic z tym zrobić (bez użycia kopii = 2, które podwoją użycie dysku). Zostaniesz po prostu z informacją o błędach w plikach (prawdopodobnie obrazach dysków VM), których nie będziesz w stanie zrobić dużo bez usuwania i ponownego tworzenia tych plików.


„Zostaniesz po prostu z informacją, że w plikach są błędy… o których nie będziesz w stanie wiele zrobić”. To dobra opinia i doceniam to. To powiedziawszy, tam właśnie przychodzą moje nocne kopie zapasowe. Jak widać, nic nie stoi pomiędzy mną a cichym uszkodzeniem danych, więc nawet jeśli ZFS po prostu odmawia mi odczytu pliku lub jego części, dopóki nie przywrócę go z (znanego dobra ), to ogromna poprawa w zakresie zapewnienia integralności danych.
CVn

Jeśli chodzi o rozmiar pliku, nie, 31 GB nie jest dokładnie obiektywnie ogromne (choć nadal stanowi ~ 1,2% całkowitej pojemności pamięci systemowej), ale martwiłem się, że system COW będzie kopiował wszystkie te dane ciągle tam iz powrotem, nieporozumienie, które JamesRyan szybko poprawił .
CVn

1

W zależności od przypadków użycia i maszyn wirtualnych rozważę następujące. Pozwól systemowi operacyjnemu hosta zająć się plikami, które przechowujesz w woluminach ZFS.

Jeśli to możliwe, utwórz tylko jednostkę LUN dla każdej maszyny wirtualnej, zawierającą tylko system operacyjny i niezbędne pliki binarne. I zaprezentuj tempo przechowywania danych indywidualnych jako udziały za pośrednictwem NFS, samby lub iSCSI (lub zvols, jak wspomniano w komentarzach). ZFS jest w stanie śledzić każdy plik z sumą kontrolną i czasem dostępu ect. Oczywiście, jeśli prędkość nie jest tak ważna, można również włączyć kompresję w niektórych magazynach danych. Korzyścią byłaby brakująca warstwa innego systemu plików. Jeśli utworzysz jednostkę LUN dla drugiego wirtualnego dysku twardego i utworzysz na niej system plików NTFS, ZFS musi obsłużyć duży obiekt binarny i nie zna żadnej zawartości ani plików, a zatem nie może skorzystać z pamięci podręcznej ZIL lub ARC w w taki sam sposób, jak pliki samolotu.

Wspominając o listach ACL, ZFS może używać list ACL za pośrednictwem NFSv4 lub Samby (jeśli jest włączona). Przyznaję, że korzystam z ZFS na FreeBSD i nie mogę zapewnić, jak włączyć kojarzenie list ACL Sambas z woluminami ZFS. Ale jestem pewien, że to nie powinna być wielka sprawa.

Deduplikacja w połączeniu z pamięcią podręczną odczytu jest dużą zaletą, jeśli chodzi o oszczędność miejsca i poprawę masowych odczytów (Boot Storm), ponieważ wszystkie maszyny wirtualne zaczynają czytać te same bloki.

To samo dotyczy migawek ZFS dla maszyn wirtualnych i magazynów danych. Możesz utworzyć prosty skrypt powłoki, aby zamrozić maszynę wirtualną, zrobić migawkę maszyny wirtualnej i magazynu danych i kontynuować pracę lub po prostu sam magazyn danych i sklonować maszynę wirtualną, aby zaprezentować migawkę oryginalnej wersji i przetestować kilka rzeczy.

Możliwości są nieograniczone dzięki ZFS;)

EDYCJA: Mam nadzieję, że wyjaśniłem to teraz trochę lepiej

EDIT2: Osobista opinia: Rozważ użycie RAIDZ2 (RAID6), ponieważ możesz wytrzymać awarię podwójnego dysku! Jeśli pozostanie ci jeden zapasowy dysk, nigdy nie będzie źle, ale dwie awarie dysku powinny wystarczyć do szybkiej reakcji. Właśnie postet mój skrypt do monitorowania stanu dysku tutaj


Nie jestem pewien, czy to rozumiem. Czy mówisz, że powinienem przechowywać pliki używane przez maszyny wirtualne jako osobne pliki w systemie plików ZFS, a nie jako obraz dysku? A co z takimi partycjami, sektorami rozruchowymi, atrybutami, o których ZFS nie wie, listami ACL systemu Windows w kontekście Linuksa ...? Albo cię źle rozumiem, albo odpowiadasz na coś innego niż to, o co proszę. Czy możesz ponownie przeczytać pytanie i edytować swoją odpowiedź, aby wyjaśnić, w jaki sposób rozwiązuje to problem z wydajnością pamięci?
CVn

Odnośnie migawek: Rzeczywiste zamrożenie maszyny wirtualnej może nie być konieczne. ZFS używa Copy-on-Write (COW), co oznacza, że ​​Migawki są natychmiastowe i zapewniają pełny obraz dysku. Niektórzy administratorzy używają tego do baz danych MySQL i PostGRES bez zamrażania baz danych (np. Bez przestojów), chociaż inni najpierw opróżniają tabele. Jeśli musisz zawiesić maszynę wirtualną, wykonanie migawki ZFS powinno zająć tylko kilka sekund.
Stefan Lasiewski,

Michael, myślę, że Daywalker odnosi się do zvols, w których możesz stworzyć plik, który działa jak urządzenie blokowe. Używałbym NFS, a nie pojedynczych zvoli dla maszyn wirtualnych (cóż, w tym przypadku wygląda na to, że to wszystko lokalne, więc tylko pliki w systemach plików). Tak, zvole mogą być fajne, ale są dodatkową warstwą komplikacji. Migawki ZFS są z definicji spójne. Nie oznacza to, że system operacyjny maszyny wirtualnej wie, że musi opróżnić dane na dysk, ale uzyskasz spójność systemu plików na tym samym poziomie, jakbyś stracił moc na maszynie wirtualnej.
TheFiddlerWins

Dedup wymaga dużych zasobów. Korzystanie z kompresji nie jest możliwe i (w przypadku maszyn wirtualnych) prawdopodobnie odzyskasz dużo miejsca z powodu białych znaków w systemach plików maszyn wirtualnych.
TheFiddlerWins

@ MichaelKjörling Po prostu edytuj mój post, mając nadzieję na lepsze zrozumienie (również z komentarzami TheFiddlerWins i Stefana Lasiewskiego
Daywalker
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.