ZFS: Ridistribuire zvol su tutti i dischi nello zpool?


12

Esiste un modo in cui ZFS può essere richiesto di ridistribuire un determinato filesystem su tutti i dischi nel suo zpool?

Sto pensando a uno scenario in cui ho un volume ZFS di dimensioni fisse che viene esportato come LUN su FC. L'attuale zpool è piccolo, solo due dischi con mirroring da 1 TB e lo zvol è in totale 750 GB. Se dovessi espandere improvvisamente la dimensione dello zpool a, diciamo, 12 dischi da 1 TB, credo che lo zvol verrebbe comunque effettivamente "alloggiato" solo sui primi due mandrini.

Dato che più mandrini = più IOPS, quale metodo potrei usare per 'ridistribuire' lo zvol su tutti e 12 i mandrini per trarne vantaggio?

Risposte:


8

Dovresti riscrivere i tuoi dati nello zpool espanso per riequilibrarli. Altrimenti, con il passare del tempo, le tue scritture verranno distribuite in tutto il pool.


Suppongo che non ci sia un modo semplice e veloce per farlo ...?
Crescere il

7
zfs send | zfs recv
the-wabbit il

Proverò questo - non posso credere che qualcosa di così semplice lo farebbe. :)
growse il

3
Riferiscilo, non l'ho mai fatto e sono anche curioso.
Strange Will

3

Non vi è alcun motivo per cui zvol sia memorizzato solo sui dispositivi iniziali. Se si ingrandisce il pool, ZFS includerà i dati aggiornati su tutti i dispositivi sottostanti disponibili. Non esiste un partizionamento fisso con ZFS.


4
Nella mia esperienza, questo non è vero. Anche se non esiste un "partizionamento fisso", ZFS non sposta i dati di sua spontanea volontà al di fuori delle richieste di I / O del client. Se si crea lo scenario che ho descritto, si aggiungono altri dischi e si eseguono operazioni di I / O pesanti sul LUN originale, si vedranno solo attività sui primi due dischi dell'array, perché è lì che si trovano i dati. ewwhite sottolinea che col tempo si bilancia, ma sono curioso di sapere se esiste un modo più veloce per farlo.
Crescere il

1
Scusa se non ero chiaro. Naturalmente, i dati esistenti non si muoveranno magicamente. Solo i dati aggiornati verranno trasferiti in modo uniforme. Questo è ciò che intendevo con "nuovi IO". Per quanto riguarda i dati statici esistenti, anche la memorizzazione nella cache migliorerà le prestazioni purché i blocchi vengano letti più di una volta.
jlliagre,

0

Questa è una "continuazione" della risposta di ewwhite:

Dovresti riscrivere i tuoi dati nello zpool espanso per riequilibrarli

Ho scritto uno script PHP ( disponibile su github ) per automatizzare questo sul mio host Ubuntu 14.04.

Basta installare lo strumento CLP PHP sudo apt-get install php5-clied eseguire lo script, passando il percorso ai dati dei pool come primo argomento. Per esempio

php main.php /path/to/my/files

Idealmente, dovresti eseguire lo script due volte su tutti i dati nel pool. La prima esecuzione bilancerà l'utilizzo dell'unità, ma i singoli file verranno eccessivamente allocati alle unità aggiunte per ultime. La seconda esecuzione assicurerà che ogni file sia "equamente" distribuito tra le unità. Dico piuttosto che in modo uniforme perché sarà distribuito in modo uniforme solo se non si stanno mescolando le capacità dell'unità come sono con il mio raid 10 di coppie di dimensioni diverse (specchio da 4 TB + specchio da 3 TB + specchio da 3 TB).

Ragioni per l'utilizzo di uno script

  • Devo risolvere il problema "sul posto". Ad esempio, non posso scrivere i dati su un altro sistema, eliminarli qui e riscriverli di nuovo.
  • Ho riempito il mio pool di oltre il 50%, quindi non potevo semplicemente copiare l'intero filesystem in una sola volta prima di eliminare l'originale.
  • Se ci sono solo alcuni file che devono funzionare bene, allora si potrebbe semplicemente eseguire lo script due volte su quei file. Tuttavia, la seconda esecuzione è efficace solo se la prima esecuzione è riuscita a bilanciare l'utilizzo delle unità.
  • Ho molti dati e voglio essere in grado di vedere un'indicazione dei progressi compiuti.

Come posso sapere se viene raggiunto anche l'utilizzo dell'azionamento?

Utilizzare lo strumento iostat per un periodo di tempo (ad es. iostat -m 5) E controllare le scritture. Se sono uguali, hai raggiunto uno spread uniforme. Non sono perfettamente nemmeno nello screenshot qui sotto perché sto eseguendo una coppia di 4 TB con 2 coppie di unità da 3 TB in RAID 10, quindi i due 4 verranno scritti su un po 'di più. inserisci qui la descrizione dell'immagine

Se l'utilizzo dell'unità è "sbilanciato", iostat mostrerà qualcosa di più simile allo screenshot qui sotto in cui le nuove unità vengono scritte in modo sproporzionato. Puoi anche dire che sono le nuove unità perché le letture sono a 0 poiché non hanno dati su di esse. inserisci qui la descrizione dell'immagine

Lo script non è perfetto, è solo una soluzione alternativa, ma funziona per me nel frattempo fino a quando ZFS un giorno implementerà una funzione di riequilibrio come BTRFS ha (dita incrociate).


Oh mio ... Wow ...
ewwhite

0

Bene, questo è un po 'un trucco ma dato che hai fermato la macchina usando zvol, potresti zfs inviare il file system a un file locale su localhost chiamato bar.zvol, e quindi ricevi di nuovo il file back system. Ciò dovrebbe riequilibrare i dati per te.

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

la migliore soluzione che ho trovato è stata quella di duplicare metà dei tuoi dati nel pool espanso e quindi eliminare i dati duplicati originali.


3
Puoi elaborare?
ewwhite,

@reco: zvols non sono file system, quindi non è possibile eliminare o duplicare i dati su di essi. Potresti sovrascrivere i dati ma ciò li danneggerebbe a meno che non lo fai con lo stesso contenuto che si estenderebbe effettivamente ai dati sui volumi sottostanti, ma questo è ciò che ewwhite ha già suggerito un anno fa.
jlliagre,

si hai ragione. mi guardavo intorno e cercavo lo stesso argomento. quello che ho capito è che con zfs la ridistribuzione dei dati tramite i vdev non è necessaria. ma se si desidera comunque duplicare i dati e cancellare gli originali, per qualsiasi motivo, si accelererà ciò che zfs farebbe nel tempo.
reco

1
La ridistribuzione dei dati tramite i vdev è una richiesta legittima. Temo che manchi ancora la domanda riguarda zvols, non i file system. Non è possibile duplicare o eliminare dati su un volume, non ha senso.
jlliagre,

ciao jlliagre. Sì hai ragione dispiace
reco
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.