Ho creato una serie di queste configurazioni di archiviazione ZFS "all-in-one". Inizialmente ispirata agli eccellenti post di Ubiquitous Talk , la mia soluzione adotta un approccio leggermente diverso alla progettazione hardware, ma produce il risultato dello storage ZFS virtualizzato incapsulato.
Per rispondere alle tue domande:
Determinare se questo è un approccio saggio dipende davvero dai tuoi obiettivi. Cosa stai cercando di realizzare? Se hai una tecnologia (ZFS) e stai cercando un'applicazione per essa, allora questa è una cattiva idea. Stai meglio usando un controller RAID hardware adeguato ed eseguendo le tue VM su una partizione VMFS locale. È il percorso di minor resistenza. Tuttavia, se hai un motivo specifico per voler utilizzare ZFS (replica, compressione, sicurezza dei dati, portabilità, ecc.), Questo è sicuramente possibile se sei disposto a impegnarti.
Le prestazioni dipendono fortemente dal tuo design, indipendentemente dal fatto che tu sia in esecuzione su metallo nudo o virtuale. L'uso del passthrough PCI (o AMD IOMMU nel tuo caso) è essenziale, in quanto forniresti alla tua ZFS VM l'accesso diretto a un controller e dischi di archiviazione SAS. Finché alla VM viene allocata una quantità appropriata di risorse RAM e CPU, le prestazioni sono quasi native. Ovviamente, il design della tua piscina è importante. Considerare i mirror rispetto a RAID Z2. ZFS scala su vdevs e non sul numero di dischi .
La mia piattaforma è VMWare ESXi 5 e il mio sistema operativo compatibile con ZFS preferito è NexentaStor Community Edition .
Questo è il mio server di casa . È un HP ProLiant DL370 G6 con ESXi da una scheda SD interna. I due dischi da 72 GB con mirroring al centro sono collegati al controller RAID Smart Array P410 interno e formano un volume VMFS. Quel volume contiene una macchina virtuale NexentaStor. Ricorda che la macchina virtuale ZFS deve vivere da qualche parte su un archivio stabile.
C'è un controller SAS LSI 9211-8i collegato alla gabbia dell'unità che alloggia sei dischi SATA da 1 TB sulla destra. Viene passato alla macchina virtuale NexentaStor, consentendo a Nexenta di vedere i dischi come una configurazione RAID 1 + 0. I dischi sono el-cheapo Western Digital Verde WD10EARS unità allineate correttamente con una versione modificata zpool
binario.
Non sto usando un dispositivo ZIL o alcuna cache L2ARC in questa installazione.
La macchina virtuale ha 6 GB di RAM e 2 vCPU assegnati. In ESXi, se si utilizza il passthrough PCI, verrà creata una prenotazione di memoria per l'intero importo della RAM assegnata alla VM.
Dò alla NexentaStor VM due interfacce di rete. Uno è per il traffico di gestione. L'altro fa parte di un vSwitch separato e ha un'interfaccia vmkernel (senza uplink esterno). Ciò consente alla VM di fornire storage NFS montabile da ESXi attraverso una rete privata. È possibile aggiungere facilmente un'interfaccia uplink per fornire accesso agli host esterni.
Installa le tue nuove macchine virtuali sull'archivio dati esportato da ZFS. Assicurarsi di impostare i parametri "Avvio / spegnimento della macchina virtuale" in ESXi. Si desidera che la VM di archiviazione si avvii prima dei sistemi guest e si blocchi per ultima.
Ecco i risultati di bonnie ++ e iozone di una corsa direttamente sulla VM NexentaStor. La compressione ZFS è disattivata perché il test mostri numeri più riconoscibili, ma in pratica, la compressione predefinita ZFS (non gzip) deve essere sempre abilitata.
# 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
Questo è un grafico NexentaStor DTrace che mostra gli IOPS della VM di archiviazione e le velocità di trasferimento durante l'esecuzione del test. 4000 IOPS e 400+ Megabyte / secondo sono abbastanza ragionevoli per tali dischi di fascia bassa. (grande dimensione del blocco, però)
Altre note
- Ti consigliamo di testare i tuoi SSD per vedere se possono essere presentati direttamente a una VM o se DirectPath sceglie l'intero controller della scheda madre.
- Non hai molta potenza della CPU, quindi limita l'unità di memoria a 2 vCPU.
- Non utilizzare RAIDZ1 / Z2 / Z3 a meno che non sia realmente necessario lo spazio su disco.
- Non usare la deduplicazione. La compressione è gratuita e molto utile per le macchine virtuali. La deduplicazione richiederebbe molta più RAM + L2ARC per essere efficace.
- Inizia senza gli SSD e aggiungili se necessario. Alcuni carichi di lavoro non colpiscono ZIL o L2ARC .
- NexentaStor è un pacchetto completo. C'è un vantaggio nell'avere una solida GUI di gestione, tuttavia, ho sentito parlare del successo anche con Napp-It .