bcache su md o md su bcache


11

bcache consente a una o più unità disco veloci come le unità a stato solido (SSD) basate su flash di fungere da cache per una o più unità disco rigido più lente .

Se ho capito bene,

  • un SSD * potrebbe essere assegnato per memorizzare nella cache più HDD di backup, quindi i dispositivi memorizzati nella cache risultanti potrebbero essere RAID con mdadm
    o
  • più HDD potrebbero essere RAID in un singolo dispositivo md di backup e l'SSD assegnato alla cache

Mi chiedo quale sia l'approccio più sano. Mi viene in mente che far crescere un RAID5 / 6 potrebbe essere più semplice con l'una o l'altra tecnica, ma non sono sicuro di quale!

Esistono buoni motivi (ad es. Aumentare la memoria di backup o qualsiasi altra cosa) per scegliere un approccio rispetto all'altro (per un grande filesystem non root contenente file di backup VM)?


* per "un SSD" intendo una sorta di dispositivo SSD ridondante, ad esempio un RAID1 di due SSD fisici


In entrambi i casi, tutti i dischi con cui bcachedovrà essere formattato il backs bcache- quindi dovrai creare un mdarray, formattare il singolo disco risultante interamente come bcachepartizione di backup, collegarlo all'unità cache e passare da lì, o formattare molti dischi con bcache, collegarli alla loro unità cache, quindi formattare i numerosi dischi come un array. In entrambi i casi ci sono più punti di possibili guasti, tutti dipendenti dall'interoperabilità tra due filesystem - per non parlare dell'ultimo fs. vedi qui : scorrere verso il basso .
Mikeserv,

Grazie a github.com/g2p/blocks , puoi convertirlo sul posto, anche se ci sono alcune limitazioni a questo.
Adam Ryczkowski il

@mikeserv Capisco tutto ciò, questo è per un server appositamente progettato, quindi va tutto bene. Cosa intendi con "due filesystem"? bcache non è un filesystem - l'unico file system che avrò sarà XFS sul dispositivo bcache o mdadm finale (a seconda dell'opzione che scelgo).

Grazie @Adam, la conversione sul posto non è un problema per me.

@mikeserv no non lo è. I filesystem (ad es. Btrfs, xfs, extN ecc.) Vivono su dispositivi a blocchi. mdadm e bcache funzionano a livello di dispositivo a blocchi non a livello di file system (btrfs confonde il problema con la sua violazione a strati, ma questa è una conversazione completamente separata).

Risposte:


4

Penso che memorizzare nella cache l'intero dispositivo md abbia più senso.

Mettere bcache nella cache dell'intero dispositivo md sacrifica l'intera idea di avere un raid, perché introduce un altro singolo punto di errore.

  • I fallimenti OTH dei dischi SSD sono relativamente rari e bcache può essere messo in modalità writethrough/ writearound(a differenza della writebackmodalità), dove non ci sono dati memorizzati solo nel dispositivo cache e il fallimento della cache non uccide le informazioni in il raid lo rende un'opzione relativamente sicura.

  • Un altro fatto è che esiste un notevole sovraccarico computazionale del soft RAID-5; quando si memorizza nella cache ciascun membro del raid in rotazione separatamente, il computer deve ancora ricalcolare tutte le parità, anche in caso di hit della cache

  • Ovviamente, sacrificheresti un po 'di spazio ssd costoso, se memorizzi in cache ogni unità rotante separatamente. - A meno che non preveda di utilizzare la cache ssd razziata.

  • Entrambe le opzioni non influiscono relativamente sul tempo del processo di crescita, sebbene l'opzione con le unità rotanti che vengono memorizzate nella cache separatamente abbia il potenziale per essere più lenta a causa del maggiore traffico del bus.

È veloce e relativamente semplice configurare bcache per rimuovere l'unità ssd, quando è necessario sostituirlo. Grazie ai blocchi dovrebbe essere possibile migrare sul posto la configurazione del raid in entrambi i modi.

Si dovrebbe anche ricordare, che al momento la maggior parte (tutte?) Le distribuzioni-CD dal vivo non supportanobcache , quindi non si può semplicemente accedere ai vostri dati a tali strumenti indipendentemente dal bcache- mdraidopzione di layout scelto.


1
Ho aggiornato la domanda per chiarire che non ho intenzione di avere una cache SSD non ridondante. Il tuo secondo punto elenco è un punto eccellente, grazie per quello. Terzo proiettile sullo spazio: vuoi dire perché avresti memorizzato la parità su SSD? per quanto riguarda il tuo ultimo para, sto usando F20 ma alla fine userò RHEL / CentOS7 o Debian Jessie (se bcache-tools fa il taglio).

@JackDouglas Ad 3rd bullet: Sì, esattamente quello. Ma dal momento che prevedi di utilizzare unità SSD raid, questo non si applica a te.
Adam Ryczkowski il

1
Lo fa ancora perché non saranno solo sottoposti a mirroring, ma dovranno anche memorizzare la parità RAID per le unità di backup. Questo non è il caso se il RAID viene eseguito sotto bcache che pensavo fosse il tuo punto

Credo che tu voglia dire il contrario: la matrice ssd non deve memorizzare la parità dei dischi rotanti, se viene alimentata l'intera unità mdraid.
Adam Ryczkowski il

1
si, è esattamente quello che intendo!

1

Penso che l'approccio sano sia quello di memorizzare nella cache il dispositivo MD risultante.

bcache è progettato per passare attraverso letture e scritture sequenziali.

Se si cache ogni dispositivo separatamente, logicamente, diversi dispositivi che si spogliano in un MD incursione o spogliato, dal punto di vista della bcache, scriveranno costantemente blocchi casuali.

Mentre un volume MD con cache apparirà normale, scrivendo i file sul volume, piuttosto che blocchi casuali su più dispositivi.

L'intero punto del raid hardware e software è fare lo striping dei dati nel backend in modo che il filesystem risultante assomigli a un volume normale.

Questo potrebbe non essere corretto (poiché gli sviluppatori di bcache potrebbero essere intelligenti e tenere conto di quel tipo di situazione), ma la cosa logica ottimale da fare è memorizzare i volumi nella cache, piuttosto che bloccare i dispositivi.


anche un ottimo punto

Una grande scrittura sequenziale su un RAID5 / 6 produce scritture sequenziali su tutti i dispositivi componenti. Ogni dispositivo componente ottiene ogni blocco di dati (o parità) N-1, ma i dati che riceve sono sequenziali. Ma hai ragione nel distorcere le cose. Se ci sono alcuni blocchi che vedono frequenti scritture a striscia parziale, con conseguente lettura-modifica-scrittura di (parte della) striscia di parità, che potrebbe essere memorizzata nella cache da bcache. La memorizzazione nella cache più in alto, prima che la scrittura a strisce parziali colpisse mai il dispositivo MD, sarebbe comunque migliore.
Peter Cordes,
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.