Hostowanie serwera ZFS jako gościa wirtualnego

23

Nadal jestem nowy w ZFS. Korzystam z Nexenta, ale myślę o przejściu na OpenIndiana lub Solaris 11 Express. W tej chwili zastanawiam się nad wirtualizacją serwera ZFS jako gościa w ESXi, Hyper-V lub XenServer (jeszcze nie zdecydowałem, który z nich - pochylam się w kierunku ESXi dla obsługi VMDirectPath i FreeBSD).

Głównym powodem jest to, że wydaje mi się, że mam wystarczającą ilość zasobów do obejścia, że ​​mogę z łatwością jednocześnie obsługiwać 1-3 inne maszyny wirtualne. Głównie Windows Server. Być może również VM Linux / BSD. Chciałbym, aby zwirtualizowany serwer ZFS hostował wszystkie dane dla innych maszyn wirtualnych, aby ich dane mogły być przechowywane na fizycznie oddzielnych dyskach od dysków ZFS (montowanie jako iscsi lub nfs).

Serwer ma obecnie AMD Phenom II z 6 rdzeniami całkowitymi (2 odblokowane), 16 GB pamięci RAM (maksymalnie) i LSI SAS 1068E HBA z (7) dyskami SATA II 1 TB (planowanie na RAIDZ2 z hot spare). Mam także (4) dyski SSD SATA II o pojemności 32 GB podłączone do płyty głównej. Mam nadzieję, że dubluję dwa dyski SSD do kopii lustrzanej rozruchu (dla wirtualnego hosta) i pozostawiam pozostałe dwa dyski SSD dla ZIL i L2ARC (dla gościa ZFS VM). Chcę dodać dwa dodatkowe dyski do przechowywania gości VM i przydzielić wszystkie siedem bieżących dysków jako pamięć ZFS. Uwaga: Ta płyta ma nie mieć wsparcia IOMMU jak 880G nie obsługuje, ale mam takie 890FX płytę, która ma IOMMU jeśli to robi ogromną różnicę.

Moje pytania to:

1) Czy mądrze jest to zrobić? Nie widzę żadnych oczywistych wad (co sprawia, że ​​zastanawiam się, dlaczego nikt inny o tym nie wspominał). Wydaje mi się, że mógłbym mieć olbrzymi nadzór i nie chciałbym się do tego angażować, przesuwać wszystkie moje dane tylko po to, aby przejść do fubar z drobnych szczegółów, które mi umknęły.

2) Wydajność wirtualnego gościa ZFS? Jestem skłonny wziąć niewielki spadek wydajności, ale pomyślałem, że jeśli gość VM ma pełny dostęp do dysków, przynajmniej wydajność dysku I / O będzie znikoma (w porównaniu z uruchomieniem ZFS bez wirtualizacji) . Czy ktoś może z tym porozmawiać na podstawie hostingu serwera ZFS jako gość VM?

osij2is
źródło
Mówisz, że chcesz hostować dane dla wszystkich innych maszyn wirtualnych. Czy w pewnym momencie widzisz, że chcesz deduplikacji? Jeśli tak, to naprawdę powinno być na własnym komputerze, ponieważ deduplikacja wymaga dużej ilości pamięci. Dlaczego nie spojrzeć na coś takiego jak SmartOS dla swoich potrzeb ZFS? W ten sposób otrzymujesz również hiperwizora.
devicenull
Myślałem o dedupcji, ale na razie nie, wolałbym jej nie używać. Zbadam SmartOS. Nie słyszałem o tym, więc to sprawdzę.
osij2is

Odpowiedzi:

38

Zbudowałem wiele takich „zintegrowanych” konfiguracji pamięci ZFS. Początkowo zainspirowany doskonałymi postami na Ubiquitous Talk , moje rozwiązanie ma nieco inne podejście do projektowania sprzętu, ale daje wynik w postaci enkapsulowanej zwirtualizowanej pamięci ZFS.

Aby odpowiedzieć na pytania:

  • Ustalenie, czy jest to mądre podejście, naprawdę zależy od twoich celów. Co próbujesz osiągnąć Jeśli masz technologię (ZFS) i szukasz dla niej aplikacji, to zły pomysł. Lepiej jest użyć odpowiedniego sprzętowego kontrolera RAID i uruchomić maszyny wirtualne na lokalnej partycji VMFS. To ścieżka najmniejszego oporu. Jeśli jednak masz konkretny powód, dla którego chcesz korzystać z ZFS (replikacja, kompresja, bezpieczeństwo danych, przenośność itp.), Jest to zdecydowanie możliwe, jeśli chcesz włożyć wysiłek.

  • Wydajność zależy w dużej mierze od projektu, niezależnie od tego, czy korzystasz z systemu bez systemu operacyjnego, czy wirtualnego. Użycie PCI-passsthrough (lub AMD IOMMU w twoim przypadku) jest niezbędne, ponieważ zapewniasz swojemu ZFS VM bezpośredni dostęp do kontrolera pamięci masowej SAS i dysków. Tak długo, jak maszyna wirtualna ma przydzieloną odpowiednią ilość pamięci RAM i procesora, wydajność jest prawie natywna. Oczywiście Twój projekt basenu ma znaczenie. Proszę rozważyć lustra w porównaniu z RAID Z2. ZFS skaluje się między vdevs, a nie liczbą dysków .


Moja platforma to VMWare ESXi 5, a moim preferowanym systemem operacyjnym obsługującym ZFS jest NexentaStor Community Edition .

To jest mój domowy serwer . Jest to HP ProLiant DL370 G6 z ESXi na wewnętrznej karcie SD. Dwa dublowane dyski 72 GB w środku są połączone z wewnętrznym kontrolerem RAID Smart Array P410 i tworzą wolumin VMFS. Ten wolumin zawiera maszynę wirtualną NexentaStor. Pamiętaj, że maszyna wirtualna ZFS musi żyć gdzieś na stabilnym magazynie.

Do klatki napędów dołączony jest kontroler SAS LSI 9211-8i z sześcioma dyskami SATA 1 TB po prawej stronie. Jest przekazywany do maszyny wirtualnej NexentaStor, dzięki czemu Nexenta może widzieć dyski jako konfigurację RAID 1 + 0. Dyski są dyskami el-cheapo Western Digital Green WD10EARS , odpowiednio dopasowanymi do zmodyfikowanego pliku zpoolbinarnego.

W tej instalacji nie używam urządzenia ZIL ani żadnej pamięci podręcznej L2ARC.

wprowadź opis zdjęcia tutaj

Maszyna wirtualna ma 6 GB pamięci RAM i 2 przydzielone vCPU. W ESXi, jeśli użyjesz przepustowości PCI, zostanie utworzona rezerwacja pamięci dla pełnej ilości przydzielonej pamięci RAM maszyny wirtualnej.

Daję NexentaStor VM dwa interfejsy sieciowe. Jeden dotyczy zarządzania ruchem. Drugi jest częścią osobnego przełącznika vSwitch i ma interfejs vmkernel (bez zewnętrznego łącza w górę). Umożliwia to maszynie wirtualnej zapewnienie pamięci masowej NFS, którą można zamontować za pomocą sieci ESXi za pośrednictwem sieci prywatnej. Możesz łatwo dodać interfejs łącza zwrotnego, aby zapewnić dostęp do hostów zewnętrznych.

Zainstaluj nowe maszyny wirtualne w eksportowanym magazynie danych ZFS. Pamiętaj, aby ustawić parametry „Uruchamianie / wyłączanie maszyny wirtualnej” w ESXi. Chcesz, aby maszyna wirtualna pamięci masowej uruchomiła się przed systemami-gośćmi i zamknęła się jako ostatnia.


wprowadź opis zdjęcia tutaj

Oto wyniki bonnie ++ i iozone z przebiegu bezpośrednio na maszynie wirtualnej NexentaStor. Kompresja ZFS jest wyłączona, aby test pokazał bardziej powiązane liczby, ale w praktyce zawsze powinna być włączona domyślna kompresja ZFS (nie gzip) .

# bonnie++ -u root -n 64:100000:16:64

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
saint           12G   156  98 206597  26 135609  24   410  97 367498  21  1478  17
Latency               280ms    3177ms    1019ms     163ms     180ms     225ms
Version  1.96       ------Sequential Create------ --------Random Create--------
saint               -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
    64:100000:16/64  6585  60 58754 100 32272  79  9827  58 38709 100 27189  80
Latency              1032ms     469us    1080us     101ms     375us   16108us

# iozone -t1 -i0 -i1 -i2 -r1m -s12g

    Iozone: Performance Test of File I/O

    Run began: Wed Jun 13 22:36:14 2012

    Record Size 1024 KB
    File size set to 12582912 KB
    Command line used: iozone -t1 -i0 -i1 -i2 -r1m -s12g
    Output is in Kbytes/sec
    Time Resolution = 0.000001 seconds.
    Throughput test with 1 process
    Each process writes a 12582912 Kbyte file in 1024 Kbyte records

    Children see throughput for  1 initial writers  =  234459.41 KB/sec
    Children see throughput for  1 rewriters        =  235029.34 KB/sec
    Children see throughput for  1 readers          =  359297.38 KB/sec
    Children see throughput for 1 re-readers        =  359821.19 KB/sec
    Children see throughput for 1 random readers    =   57756.71 KB/sec
    Children see throughput for 1 random writers    =  232716.19 KB/sec

To jest wykres NexentaStor DTrace pokazujący IOPS i prędkości transferu maszyny wirtualnej pamięci podczas uruchomienia testowego. 4000 IOPS i 400+ megabajtów / sekundę jest całkiem rozsądne w przypadku dysków o niższej jakości. (jednak duży rozmiar bloku) wprowadź opis zdjęcia tutaj

Inne notatki.

  • Będziesz chciał przetestować dyski SSD, aby zobaczyć, czy można je przedstawić bezpośrednio maszynie wirtualnej, czy też DirectPath wybiera cały kontroler płyty głównej.
  • Nie masz dużo mocy procesora, więc ogranicz jednostkę pamięci do 2 procesorów vCPU.
  • Nie używaj RAIDZ1 / Z2 / Z3, chyba że naprawdę potrzebujesz miejsca na dysku.
  • Nie używaj deduplikacji. Kompresja jest bezpłatna i bardzo przydatna dla maszyn wirtualnych. Deduplikacja wymagałaby znacznie więcej pamięci RAM + L2ARC, aby była skuteczna.
  • Zacznij bez dysków SSD i dodaj je, jeśli to konieczne. Niektóre obciążenia nie uderzają w ZIL ani L2ARC .
  • NexentaStor to kompletny pakiet. Posiadanie solidnego GUI zarządzania ma jednak tę zaletę, że słyszałem również o sukcesie z Napp-It .
ewwhite
źródło
+1. Dzięki za wszystkie informacje! Aby odpowiedzieć na twoje pytanie, robię to z kilku powodów. W dużej mierze robię to, aby wykorzystać inne rdzenie procesora, aby utworzyć jedną lub dwie inne maszyny wirtualne (nie robiąc ZFS) i zapewnić cel iSCSI na moim serwerze wirtualnym Opteron. Moimi powodami dla ZFS są (w określonej kolejności) kompresja oraz bezpieczeństwo i replikacja danych. Dedupe wygląda bardzo fajnie, ale jeśli chodzi o zasoby i moje dane, nie jestem pewien, czy jest to konieczne. Korzystam teraz z Nexenta, ale zastanawiałem się nad przejściem na Solaris Express lub OpenIndiana, jeśli nadal będę nakładać na dyski, aby przekroczyć limit 18 TB.
osij2is
Rozumiem więc twój komentarz na temat tego, czy używać dysków SSD dla L2ARC lub ZIL i jestem skłonny to zrobić. Najpierw zobacz wydajność, następnie określ, czy dodać ZIL i / lub ARC. Jeśli chodzi o tworzenie kopii lustrzanych vs. RAIDZ, po przeczytaniu twoich komentarzy i przeczytaniu tego postu na blogu ( constantin.glez.de/blog/2010/01/... ) Myślę, że tworzenie kopii lustrzanych ma niewielką przewagę. Naprawdę nie potrzebuję miejsca na dysku, ale jeśli mogę mieć nadmiarowość i możliwości szybkiego odczytu / zapisu, myślę, że przestawię się na to. Jakakolwiek przestrzeń do przechowywania, którą mógłbym wydobyć, naprawdę nie byłaby tego warta.
osij2is
Dodatkowo pamiętaj, że kompresja jest przydatna. Płacę za komercyjny Nexenta dla systemów klienckich i wszystko, co jest większe niż 18 TB. Ale te same wskazówki dotyczą OpenIndiana.
ewwhite
Czy używasz vnic E1000 lub VMXNet3 vnic dla sieci NFS? Ponieważ otrzymuję tylko 1 Gb / s między Nexenta / Solaris a VMware przy użyciu podobnej konfiguracji i nie mogę dowiedzieć się, jak uzyskać większą prędkość. Jaka wersja NexentaStor? Podejrzewam, że wersja, którą obecnie mają, jest zepsuta ...
Josh