Quali sono le conseguenze sulle prestazioni dell'esecuzione di macchine virtuali su un host ZFS?


11

Sto pensando di migrare da ext3 a ZFS per l'archiviazione dei dati sul mio host Debian Linux, usando ZFS su Linux . Una caratteristica killer di ZFS che voglio davvero è la sua garanzia di integrità dei dati. La capacità di aumentare banalmente lo spazio di archiviazione man mano che il mio spazio di archiviazione deve aumentare è anche qualcosa che non vedo l'ora.

Tuttavia, eseguo anche alcune macchine virtuali sullo stesso host. (Anche se normalmente, nel mio caso, sull'host è in esecuzione una sola VM alla volta.)

Considerando il checksum dei dati di ZFS e il comportamento del copy-on-write, insieme al fatto che le immagini del disco della VM sono file relativamente grandi (il file di immagine del disco della mia VM principale si trova attualmente a 31 GB), quali sono le implicazioni delle prestazioni all'interno del guest VM di tale una migrazione? Quali passi posso prendere per ridurre il possibile impatto negativo sulle prestazioni?

Posso vivere con meno garanzie di integrità dei dati sulle immagini del disco della VM, se necessario (non faccio nulla di veramente critico all'interno di nessuna delle VM) e posso separarle facilmente dal resto del filesystem, ma sarebbe bello se non lo facessi Devo (anche selettivamente) disattivare praticamente la funzione che più mi fa venire voglia di migrare su un file system diverso.

L'hardware è piuttosto robusto per un sistema di classe workstation, ma non reggerebbe molto a un server di fascia alta (32 GB di RAM con raramente> 10 GB in uso, CPU a 6 core da 3,3 GHz, attualmente 2,6 TB utilizzabili spazio su disco in base a dfun totale di circa 1,1 TB libero; la migrazione a ZFS aggiungerà probabilmente più spazio libero ) e non sto pianificando di eseguire la deduplicazione dei dati (poiché l'attivazione del dedup non aggiungerebbe molto nella mia situazione). Il piano è di iniziare con una configurazione JBOD (ovviamente con buoni backup) ma alla fine potrei passare a una configurazione mirror a due vie se le condizioni lo giustificano.


Inoltre, tieni presente che ZFS offre prestazioni migliori del RAID5 tradizionale in termini di IOPS . Le scritture RAIDZ funzionano alla velocità di un singolo disco perché non risentono delle penalità delle prestazioni I / O che affliggono il RAID5 / 6 tradizionale.
Stefan Lasiewski,

1
Grazie a tutti coloro che hanno risposto per i tuoi approfondimenti! Tornerò sicuramente su questa domanda più tardi.
un CVn il

Il commento di Stefan è ... beh, è ​​solo falso. Le prestazioni di ZFS RAIDZ sono significativamente peggiori dal punto di vista IOPS (di solito si hanno problemi con le macchine virtuali) rispetto agli array RAID5 tradizionali. Non presupporre un miglioramento delle prestazioni di scrittura passando a ZFS. Raramente è il caso. I guadagni di lettura della lettura dipenderanno dalla RAM disponibile per ARC e dalle dimensioni e dalta del set di lavoro. Di solito con VM, ZFS ARC finisce per aiutare con le prestazioni complessive di lettura rispetto alle alternative. Le scritture di solito soffrono, anche sugli specchi, SEMPRE con raidz.
Nex7,

@ Nex7 Come sono le scritture senza RAID da ZFS ma con un solo dispositivo di archiviazione, che ad esempio è fornito da alcuni mdraid? ZFS funziona in modo paragonabile ad altri file system perché non viene utilizzata alcuna roba RAID?
Thorsten Schöning,

Risposte:


4

Poiché ZFS funziona a livello di blocco, la dimensione dei file non fa alcuna differenza. ZFS richiede più memoria e CPU ma non è intrinsecamente significativamente più lento come file system. Sebbene sia necessario essere consapevoli del fatto che RAIDZ non è equivalente in termini di velocità a RAID5. RAID10 va bene dove la velocità è una priorità.


4

ZFS su hardware decente (ad es. Buff) sarà probabilmente più veloce di altri file system, probabilmente vorrai creare uno ZIL su una posizione veloce (ad es. SSD). Questo è essenzialmente un percorso per scrivere nella cache (beh, più come un diario in ext3 / 4). Ciò consente alla casella ack di scrivere come scritta sul disco prima che i mandrini effettivi abbiano i dati.

È inoltre possibile creare un ARC L2 su SSD per la cache di lettura. Questo è fantastico in un ambiente VM in cui è possibile mettere in ginocchio i dischi fisici avviando più VM contemporaneamente.

Le unità vanno in VDEV, i VDEV in zpools (si prega di utilizzare interi dischi alla volta). Se questo è un sistema più piccolo, potresti voler avere un singolo zpool e (se non sei troppo preoccupato per la perdita di dati) un singolo VDEV. I VDEV sono i punti in cui si seleziona il livello RAID (sebbene sia possibile anche i VDEV a SPECCHIO se si hanno abbastanza dischi). Il disco più lento in un VDEV determina la velocità dell'intero VDEV.

ZFS si basa sull'integrità dei dati - il motivo per cui non esistono molti strumenti tradizionali per la manutenzione del file system (come fsck) è il problema che risolvono non può esistere su un file system ZFS.

IMO il più grande svantaggio di ZFS è che se i tuoi file system si avvicinano completamente (diciamo 75% +) diventa MOLTO lento. Basta non andarci.


2

31 GB in realtà non è affatto grande ...

Ad ogni modo, a seconda del file system attualmente in uso, è possibile che ZFS sia leggermente più lento, ma date le specifiche hardware potrebbe essere trascurabile.

Ovviamente ZFS utilizzerà una buona porzione di RAM per la memorizzazione nella cache che può far sembrare le macchine virtuali più "scattanti" in uso generale (quando non si eseguono pesanti operazioni di lettura o scrittura). Non sono sicuro di come ZFS sia ottimizzato su Linux ma potrebbe essere necessario limitare il suo ARC, se possibile, per impedirlo di scappare via con tutta la RAM (visto che vorrai un pezzo decente lasciato sul tuo sistema host e VM).

Vorrei abilitare la compressione (il consiglio in questi giorni è di attivarlo a meno che tu non abbia una buona ragione per non farlo). Ricorda che questo deve essere fatto prima di inserire i dati nel file system. La maggior parte delle persone è sorpresa di scoprire che in realtà è più veloce, dato che gli algoritmi di compressione funzioneranno generalmente più velocemente dell'IO del disco. Dubito che causerà un grosso problema di prestazioni con il tuo processore a 6 core. Non mi aspettavo che le macchine virtuali comprimessero molto, ma sono riuscita a trasformare ~ 470 GB di dati di macchine virtuali in 304 GB solo con l'impostazione di compressione predefinita.

Non preoccuparti della dedupe, tornerà a perseguitarti più tardi e passerai settimane a mescolare i dati cercando di sbarazzartene.

Se riscontri problemi di prestazioni, la risposta ovvia è aggiungere un SSD come ZIL / L2ARC o anche entrambi. Non è l'ideale per utilizzare un dispositivo per entrambi, ma molto probabilmente migliorerà comunque le prestazioni su un pool contenente un piccolo numero di dischi / vdev.

Per aggiungere: proverei davvero a iniziare con una configurazione ridondante, se possibile (idealmente mirror), o convertire in mirror da una striscia il più presto possibile. Mentre ZFS eseguirà il checksum di tutti i dati e rileverà gli errori al volo (o durante uno scrub), non sarà in grado di fare nulla al riguardo (senza utilizzare copie = 2 che raddoppierà l'utilizzo del disco). Ti resterà solo che ti dice che ci sono errori nei file (probabilmente le immagini del tuo disco VM) di cui non sarai in grado di fare molto senza eliminare e ricreare quei file.


"Ti resterà solo che ti dice che ci sono errori nei file ... di cui non sarai in grado di fare molto" Questa è una buona opinione, e lo apprezzo. Detto questo, è qui che arrivano i miei backup notturni. Dato che non c'è nulla tra me e la corruzione silenziosa dei dati, quindi anche se ZFS si rifiuta semplicemente di farmi leggere il file o una parte di esso fino a quando non lo ripristino dal (noto bene ) backup, questo è un enorme miglioramento delle garanzie di integrità dei dati.
un CVn

Per quanto riguarda le dimensioni del file, no, 31 GB non sono esattamente oggettivamente enormi (anche se sono ancora ~ 1,2% della mia capacità totale di archiviazione del sistema), ma la mia preoccupazione era più sulla linea di quella COW avrebbe il sistema a copiare tutti quei dati avanti e indietro continuamente, un'idea sbagliata che JamesRyan ha rapidamente corretto .
un CVn

1

A seconda dei casi d'uso e delle macchine virtuali, prenderei in considerazione quanto segue. Lascia che il sistema operativo host si occupi dei file che stai memorizzando sui volumi ZFS.

Se possibile, creare solo un LUN per ogni VM, contenente solo il sistema operativo e i file binari necessari. E presentare lo spazio di archiviazione per i dati individuali come condivisioni tramite NFS, samba o iSCSI (o zvols come menzionato nei commenti). ZFS è in grado di tenere traccia di ogni file con checksum e tempi di accesso ect. Naturalmente, se la velocità non è così importante, è possibile abilitare anche la compressione su alcuni archivi dati. Il vantaggio sarebbe uno strato mancante di un altro filesystem. Se dovessi creare un LUN per il secondo disco rigido virtuale e creare un filesystem NTFS al di sopra di questo, ZFS deve gestire un grande BLOB binario e non conosce alcun contenuto o file e quindi non può sfruttare la cache ZIL o ARC in allo stesso modo dei file aerei.

Menzionando gli ACL, ZFS è in grado di usare gli ACL tramite NFSv4 o Samba (se abilitato). Devo ammettere che uso ZFS su FreeBSD e non posso assicurare come abilitare gli accoppiamenti ACL Sambas su volumi ZFS. Ma sono sicuro che questo non dovrebbe essere un grosso problema.

La deduplicazione in combinazione con una cache di lettura è un grande vantaggio quando si tratta di risparmiare spazio e migliorare letture di massa (Boot storm) poiché tutte le macchine virtuali iniziano a leggere gli stessi blocchi.

Lo stesso vale per le istantanee ZFS per le macchine virtuali e i datastore. È possibile creare un semplice script shell, congelare la VM, scattare un'istantanea della VM e del Datastore e continuare a lavorare, o solo il Datastore da solo, e clonare la VM per presentare l'istantanea di quella originale e testare alcune cose.

Le possibilità sono infinite con ZFS;)

EDIT: Spero di averlo spiegato un po 'meglio ora

EDIT2: opinione personale: considerare l'utilizzo di un RAIDZ2 (RAID6) in quanto è possibile resistere a un errore del doppio disco! Se è rimasto un solo disco di riserva, non sarà mai sbagliato, ma due guasti del disco dovrebbero essere sufficienti per una rapida risposta. Ho appena postato il mio script per monitorare lo stato del disco qui


Non sono sicuro di averlo. Stai dicendo che dovrei archiviare i file utilizzati dalle macchine virtuali come file separati sul file system ZFS, anziché come immagine del disco? Che dire cose come partizioni, settori di avvio, attributi che ZFS non conosce, ACL di Windows in un contesto Linux, ...? O ti fraintendo, o stai rispondendo a qualcosa di diverso da quello che sto chiedendo. Potete per favore rileggere la domanda e modificare la risposta per chiarire come risolve il problema delle mie prestazioni di archiviazione?
un CVn il

Per quanto riguarda le istantanee: potrebbe non essere necessario congelare effettivamente la VM. ZFS utilizza Copy-on-Write (COW), il che significa che le istantanee sono istantanee e ti forniranno un'immagine del disco completa. Alcuni amministratori lo usano per i database MySQL e PostGRES senza congelare i loro database (es. Nessun tempo di inattività), sebbene altri prima svuotano le tabelle. Se è necessario congelare la VM, l'esecuzione dello snapshot ZFS dovrebbe richiedere solo pochi secondi.
Stefan Lasiewski,

Michael Penso che Daywalker si riferisca a zvols in cui è possibile creare un file che si comporta come un dispositivo a blocchi. Userei NFS non singoli zvol per VM (beh in questo caso sembra che sia tutto locale, quindi solo file nei file system). Sì, gli zvol possono essere fighi ma sono un ulteriore livello di complicazione. E le istantanee di ZFS sono per definizione coerenti. Ciò non significa che il sistema operativo della VM sappia che deve scaricare i suoi dati su disco, ma otterrai la coerenza del file system allo stesso livello di se perdessi energia sulla VM.
TheFiddler vince il

Dedup richiede molte risorse. L'uso della compressione non lo è e (per le macchine virtuali) probabilmente ti farà tornare molto spazio a causa dello spazio vuoto nei file system della VM.
TheFiddler vince il

@ MichaelKjörling Basta editet il mio post, sperando in una migliore comprensione (anche con i commenti da TheFiddlerWins e Stefan Lasiewski
Daywalker
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.