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 zpool
binarnego.
W tej instalacji nie używam urządzenia ZIL ani żadnej pamięci podręcznej L2ARC.
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.
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)
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 .