Ospitare un server ZFS come guest virtuale


23

Sono ancora nuovo in ZFS. Sto usando Nexenta ma sto pensando di passare a OpenIndiana o Solaris 11 Express. In questo momento, sto per prendere in considerazione l'idea di virtualizzare il server ZFS come guest all'interno di ESXi, Hyper-V o XenServer (non ho ancora deciso quale - sto propendendo a ESXi per il supporto VMDirectPath e FreeBSD).

Il motivo principale è che sembra che io abbia abbastanza risorse per andare in giro da poter facilmente avere 1-3 macchine virtuali in esecuzione contemporaneamente. Principalmente Windows Server. Forse anche una VM Linux / BSD. Vorrei che il server ZFS virtualizzato ospitasse tutti i dati per le altre macchine virtuali in modo che i loro dati potessero essere conservati su dischi fisicamente separati dai dischi ZFS (mount come iscsi o nfs).

Il server ha attualmente un AMD Phenom II con 6 core totali (2 sbloccati), 16 GB di RAM (al massimo) e un LSI SAS 1068E HBA con (7) dischi SATA II da 1 TB collegati (pianificazione su RAIDZ2 con hot spare). Ho anche (4) SSD SATA II da 32 GB collegati alla scheda madre. Spero di eseguire il mirroring di due SSD su un mirror di avvio (per l'host virtuale) e di lasciare gli altri due SSD per ZIL e L2ARC (per il guest ZFS VM). Sono disposto ad aggiungere altri due dischi per archiviare i guest VM e allocare tutti e sette i dischi correnti come memoria ZFS. Nota: la scheda madre non ha il supporto IOMMU in quanto l'880G non lo supporta, ma ho una scheda 890FX che ha IOMMU se fa una differenza enorme.

Le mie domande sono:

1) È saggio farlo? Non vedo alcun lato negativo ovviamente (il che mi fa chiedere perché nessun altro lo abbia menzionato). Mi sento come se potessi fare una svista enorme e odio impegnarmi in questo, spostare tutti i miei dati solo per andare in frantumi da qualche minuto dettaglio che mi mancava.

2) Prestazioni degli ospiti virtuali ZFS? Sono disposto a subire un piccolo calo delle prestazioni, ma penso che se il guest VM ha pieno accesso al disco ai dischi che, per lo meno, le prestazioni di I / O del disco saranno trascurabili (rispetto all'esecuzione di ZFS non virtualizzato) . Qualcuno può parlare di questo per esperienza nell'hosting di un server ZFS come guest VM?


Dici di voler ospitare dati per tutte le altre macchine virtuali. Ti dimentichi di voler deduplicare ad un certo punto? In tal caso, questo dovrebbe davvero essere sul proprio computer, poiché la deduplicazione richiede molta memoria. Perché non dare un'occhiata a qualcosa come SmartOS per le tue esigenze ZFS? In questo modo ottieni anche un hypervisor.
Devicenull,

Ho pensato a dedupe ma per il momento immediato, no, preferirei non usarlo. Esaminerò SmartOS. Non ne ho sentito parlare, quindi lo controllerò.
osij2is

Risposte:


38

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 zpoolbinario.

Non sto usando un dispositivo ZIL o alcuna cache L2ARC in questa installazione.

inserisci qui la descrizione dell'immagine

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.


inserisci qui la descrizione dell'immagine

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ò) inserisci qui la descrizione dell'immagine

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 .

+1. Grazie per tutte le informazioni! Per rispondere alla tua domanda, lo sto facendo per alcuni motivi. Lo sto facendo in gran parte per sfruttare gli altri core della CPU per creare una o due altre macchine virtuali (non facendo ZFS) e per fornire una destinazione iSCSI al mio server virtuale Opteron. Le mie ragioni per ZFS sono (in nessun ordine particolare) la compressione, la sicurezza e la replica dei dati. Dedupe sembra molto bello, ma in termini di risorse e miei dati, non sono sicuro che sia necessario. Sto usando Nexenta in questo momento, ma stavo considerando di passare a Solaris Express o OpenIndiana se continuo a impilare i dischi per superare il limite di 18 TB.
osij2is

Quindi, capisco il tuo commento sull'opportunità di utilizzare gli SSD per L2ARC o ZIL e sono disposto a fare proprio questo. Vedi prima le prestazioni, POI decidi se aggiungere ZIL e / o ARC. Per quanto riguarda il mirroring rispetto a RAIDZ, dopo aver letto i tuoi commenti e aver letto questo post sul blog ( constantin.glez.de/blog/2010/01/… ) immagino che il mirroring abbia un leggero vantaggio. Non ho davvero bisogno dello spazio su disco, ma se posso avere ridondanza e capacità di lettura / scrittura veloci, penso che passerò a quello. Qualunque sia lo spazio di archiviazione che potrei fare davvero non ne varrebbe la pena.
osij2is

Inoltre, ricorda che la compressione è utile. Pago Nexenta commerciale per i sistemi client e qualsiasi cosa di dimensioni superiori a 18 TB. Ma gli stessi suggerimenti si applicano a OpenIndiana.
ewwhite,

Stai usando un vnic E1000 o un vnic VMXNet3 per la rete NFS? Perché sto ottenendo solo 1 gbps tra Nexenta / Solaris e VMware usando una configurazione simile e non riesco a capire come ottenere più velocità. Quale versione di NexentaStor? Sospetto che la versione che hanno attualmente disponibile sia rotta ...
Josh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.