Saltar al contenutoSaltar alla navigazione delle pagine: pagina precedente [chiave d’accesso p]/pagina successiva [chiave d’accesso n]
Si applica a SUSE Enterprise Storage 5

9 Pool con codice di cancellazione

Ceph fornisce un'alternativa alla replica normale dei dati nei pool denominata pool di cancellazione o con codice di cancellazione. I pool di cancellazione non forniscono tutte le funzionalità dei pool replicati, ma richiedono uno spazio di memorizzazione dei dati non elaborati inferiore. Un pool di cancellazione di default in grado di memorizzare 1 TB di dati richiede uno spazio di memorizzazione di dati non elaborati pari a 1,5 TB. Si tratta di un confronto positivo rispetto al pool replicato che richiede 2 TB di spazio di memorizzazione effettivo per la stessa quantità di dati.

Per ulteriori informazioni sul codice di cancellazione, vedere https://en.wikipedia.org/wiki/Erasure_code.

Nota
Nota

Quando si utilizza FileStore, non è possibile accedere ai pool con codice di cancellazione tramite l'interfaccia RBD a meno che non sia stato configurato un livello di cache. Per ulteriori dettagli vedere Sezione 9.3, «Pool con codice di cancellazione e suddivisione in livelli di cache» o utilizzare BlueStore.

Nota
Nota

Assicurarsi che le regole CRUSH per i pool di cancellazione utilizzino indep per step. Per informazioni, vedere Sezione 6.3.2, «firstn e indep».

9.1 Creazione di un pool con codice di cancellazione di esempio

Il pool con codice di cancellazione più semplice equivale a RAID5 e richiede almeno tre host. In questa procedura è illustrato come creare un pool ai fini del test.

  1. Il comando ceph osd pool create viene utilizzato per creare un pool di tipo cancellazione. 12 sta per il numero di gruppi di posizionamento. Con i parametri di default, il pool è in grado di gestire gli errori di un OSD.

    root # ceph osd pool create ecpool 12 12 erasure
    pool 'ecpool' created
  2. La stringa ABCDEFGHI viene scritta in un oggetto denominato NYAN.

    cephadm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
  3. Ai fini del test, adesso è possibile disabilitare gli OSD, ad esempio disconnettendoli dalla rete.

  4. Per verificare se il pool è in grado di gestire gli errori dei dispositivi, è possibile accedere al contenuto del file mediante il comando rados.

    root # rados --pool ecpool get NYAN -
    ABCDEFGHI

9.2 Profili dei codici di cancellazione

Quando si richiama il comando ceph osd pool create per creare un pool di cancellazione, viene utilizzato il profilo di default a meno che non se ne specifichi un altro. I profili definiscono la ridondanza dei dati. A tal fine impostare due parametri, denominati arbitrariamente k ed m. k ed m definiscono il numero di porzioni in cui vengono suddivisi i dati e quante porzioni di codifica vengono create. Le porzioni ridondanti vengono quindi memorizzate in OSD diversi.

Definizioni necessarie per i profili dei pool di cancellazione:

chunk

quando si richiama la funzione di codifica, vengono restituite porzioni della stessa dimensione: le porzioni di dati che è possibile concatenare per ricostruire l'oggetto originale e le porzioni di codifica che è possibile utilizzare per ricompilare una porzione persa.

k

il numero di porzioni di dati, ovvero il numero di porzioni in cui è suddiviso l'oggetto originale. Ad esempio, se k = 2 un oggetto da 10 KB verrà suddiviso in k oggetti da 5 KB ciascuno.

m

il numero di porzioni di codifica, ovvero il numero di porzioni aggiuntive calcolato dalle funzioni di codifica. Esistono 2 porzioni di codifica, vale a dire che 2 OSD possono essere fuori senza perdere dati.

crush-failure-domain

definisce a quali dispositivi vengono distribuite le porzioni. È necessario impostare come valore un tipo di compartimento. Per tutti i tipi di compartimenti, vedere Sezione 6.2, «Compartimenti». Se il dominio dell'errore è rack, le porzioni saranno memorizzate in rack diversi al fine di aumentare la resilienza in caso di errore dei rack.

Con il profilo del codice di cancellazione utilizzato nella Sezione 9.1, «Creazione di un pool con codice di cancellazione di esempio», i dati del cluster non andranno persi in caso di errore di un singolo OSD. Pertanto, per memorizzare 1 TB di dati è necessario uno spazio di memorizzazione effettivo di altri 0,5 TB. Vale a dire che per 1 TB di dati è necessario uno spazio di memorizzazione effettivo di 1,5 TB. Ciò equivale a una normale configurazione RAID 5. Confronto: un pool replicato necessita di 2 TB di spazio di memorizzazione dei dati non elaborati per memorizzare 1 TB di dati.

È possibile visualizzare le impostazioni del profilo di default con:

root # ceph osd erasure-code-profile get default
directory=.libs
k=2
m=1
plugin=jerasure
crush-failure-domain=host
technique=reed_sol_van

È importante scegliere il profilo giusto perché non è possibile modificarlo dopo la creazione del pool. È necessario creare un nuovo pool con un profilo diverso e spostare tutti gli oggetti del pool precedente in quello nuovo.

I parametri più importanti del profilo sono k, m e crush-failure-domain in quanto definiscono l'overhead di memorizzazione e la durata dei dati. Ad esempio, se l'architettura desiderata deve sostenere la perdita di due rack con un overhead di memorizzazione del 66%, è possibile definire il profilo seguente:

root # ceph osd erasure-code-profile set myprofile \
   k=3 \
   m=2 \
   crush-failure-domain=rack

È possibile ripetere l'esempio della Sezione 9.1, «Creazione di un pool con codice di cancellazione di esempio» con questo nuovo profilo:

root # ceph osd pool create ecpool 12 12 erasure myprofile
cephadm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
root # rados --pool ecpool get NYAN -
ABCDEFGHI

L'oggetto NYAN verrà diviso in tre (k=3) e verranno create due porzioni aggiuntive (m=2). Il valore di m definisce quanti OSD è possibile perdere simultaneamente senza perdere alcun dato. Con il comando crush-failure-domain=rack verrà creato un set di regole CRUSH che garantisce che le due porzioni non vengano memorizzate nello stesso rack.

Per ulteriori informazioni sui profili dei codici di cancellazione, vedere http://docs.ceph.com/docs/master/rados/operations/erasure-code-profile (in lingua inglese).

9.3 Pool con codice di cancellazione e suddivisione in livelli di cache

I pool con codice di cancellazione richiedono più risorse rispetto ai pool replicati e presentano meno funzionalità, come la scrittura parziale. Per superare tali limiti, si consiglia di impostare un livello di cache prima del pool con codice di cancellazione.

Ad esempio, se il pool «hot-storage» è costituito da uno spazio di memorizzazione veloce, è possibile velocizzare «ecpool» creato nella Sezione 9.2, «Profili dei codici di cancellazione» con:

root # ceph osd tier add ecpool hot-storage
root # ceph osd tier cache-mode hot-storage writeback
root # ceph osd tier set-overlay ecpool hot-storage

In tal modo il pool «hot-storage» verrà posizionato come livello di ecpool in modalità Write-back, in modo che per ogni scrittura e lettura in ecpool venga utilizzato effettivamente lo spazio di memorizzazione ad accesso frequente, a favore della flessibilità e della velocità.

Quando si utilizza FileStore, non è possibile creare un'immagine RBD o un pool con codice di cancellazione perché sono richieste le scritture parziali. È tuttavia possibile creare un'immagine RBD in un pool con codice di cancellazione quando un livello di pool replicato è impostato come livello di cache:

root # rbd --pool ecpool create --size 10 myvolume

Per ulteriori informazioni sulla suddivisione in livelli di cache, vedere Capitolo 10, Suddivisione in livelli di cache.

9.4 Pool con codice di cancellazione con RADOS Block Device (dispositivo di blocco RADOS)

Per contrassegnare un pool EC come pool RBD, applicare il rispettivo tag:

root # ceph osd pool application enable rbd ec_pool_name

RBD può memorizzare data immagine nei pool EC. Tuttavia, l'intestazione dell'immagine e i metadati devono essere comunque memorizzati in un pool replicato. A tal fine, presupporre di disporre di un pool denominato "rbd":

root # rbd create rbd/image_name --size 1T --data-pool ec_pool_name

È possibile utilizzare normalmente l'immagine come qualsiasi altra, con la differenza che tutti i dati saranno memorizzati nel pool ec_pool_name al posto del pool "rbd".

Stampa pagina