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 df
i 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ą.
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło
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
źródło