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 6

13 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 le funzionalità complete dei pool replicati (ad esempio, non sono in grado di memorizzare i metadati dei pool RBD), ma richiedono meno spazio di storage nominale. Un pool di cancellazione di default con 1 TB di storage di dati richiede 1,5 TB di spazio di storage nominale e prevede un solo errore del disco. Si tratta sicuramente di un vantaggio rispetto al pool replicato, che richiede 2 TB di spazio di storage nominale per lo stesso scopo.

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. Fare riferimento alla Sezione 14.5, «Pool con codice di cancellazione e suddivisione in livelli di cache» per ulteriori dettagli oppure utilizzare il BlueStore di default (consultare questo riferimento: Sezione 1.4, «BlueStore»).

13.1 Prerequisiti dei pool con codice di cancellazione

Per utilizzare il codice di cancellazione, è necessario:

  • Definire una regola di cancellazione nella mappa CRUSH.

  • Definire un profilo con codice di cancellazione che specifichi l'algoritmo da utilizzare.

  • Creare un pool utilizzando la regola e il profilo menzionati in precedenza.

Tenere presente che non sarà possibile modificare il profilo e i relativi dettagli in seguito alla creazione del pool e all'aggiunta di dati.

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

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

    cephadm@adm > ceph osd pool create ecpool 12 12 erasure
    pool 'ecpool' created
  2. La stringa ABCDEFGHI viene scritta in un oggetto denominato NYAN.

    cephadm@adm > 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.

    cephadm@adm > rados --pool ecpool get NYAN -
    ABCDEFGHI

13.3 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. Il valore min_size di default nei pool con codice di cancellazione è k + 1. Tuttavia, si consiglia di impostare il valore min_size su almeno k + 2 per evitare la perdita di dati e operazioni di scrittura.

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 9.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. Tenere presente che ciò richiede dei rack k+m.

Con il profilo con codice di cancellazione di default utilizzato in Sezione 13.2, «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 o di un host. Pertanto, per memorizzare 1 TB di dati è necessario uno spazio di memorizzazione effettivo di altri 0,5 TB. Ciò vuol dire che per 1 TB di dati sono necessari 1,5 TB di spazio di storage nominale (perché k=2, m=1). Ciò equivale a una normale configurazione RAID 5. Un pool replicato necessita invece di 2 TB di spazio di storage nominale per memorizzare 1 TB di dati.

È possibile visualizzare le impostazioni del profilo di default con:

cephadm@adm > 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 trasferirvi tutti gli oggetti del pool precedente (vedere la Sezione 11.3, «Migrazione del pool»).

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 storage del 66%, è possibile definire il profilo seguente. Tenere presente che ciò si applica solo alle mappe CRUSH contenenti compartimenti di tipo "rack":

cephadm@adm > ceph osd erasure-code-profile set myprofile \
   k=3 \
   m=2 \
   crush-failure-domain=rack

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

cephadm@adm > ceph osd pool create ecpool 12 12 erasure myprofile
cephadm@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
cephadm@adm > 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.

13.3.1 Creazione di un nuovo profilo con codice di cancellazione

Il comando seguente consente di creare un nuovo profilo con codice di cancellazione:

root # ceph osd erasure-code-profile set NAME \
 directory=DIRECTORY \
 plugin=PLUGIN \
 stripe_unit=STRIPE_UNIT \
 KEY=VALUE ... \
 --force
DIRECTORY

Facoltativo. Impostare il nome della directory da cui viene caricato il plug-in del codice di cancellazione. Quello di default è /usr/lib/ceph/erasure-code.

PLUGIN

Facoltativo. Utilizzare il plug-in del codice di cancellazione per calcolare le porzioni di codifica e recuperare quelle mancanti. I plug-in disponibili sono "jerasure", "isa", "lrc" e "shes". Il plug-in di default è "jerasure".

STRIPE_UNIT

Facoltativo. La quantità di dati in una porzione di dati per segmento. Ad esempio, un profilo con 2 porzioni di dati e stripe_unit=4K inserisce l'intervallo 0-4K nella porzione 0, 4K-8K nella porzione 1 e quindi 8K-12K nuovamente nella porzione 0. Per le migliori prestazioni, deve essere un multiplo di 4K. Il valore di default viene estrapolato dall'opzione di configurazione di monitoraggio osd_pool_erasure_code_stripe_unit al momento della creazione di un pool. Il valore "stripe_width" di un pool che utilizza questo profilo sarà il numero delle porzioni di dati moltiplicato per questo valore di "stripe_unit".

KEY=VALUE

Le coppie di opzioni di chiavi/valori specifiche per il plug-in del codice di cancellazione selezionato.

--force

Facoltativo. Ignora un profilo esistente con lo stesso nome e consente l'impostazione di una stripe_unit non allineata a 4K.

13.3.2 Rimozione di un profilo con codice di cancellazione

Il comando seguente consente di rimuovere un profilo con codice di cancellazione identificato dal relativo nome (NAME):

root # ceph osd erasure-code-profile rm NAME
Importante
Importante

Se è presente un pool che fa riferimento al profilo, l'eliminazione non riesce.

13.3.3 Visualizzazione dei dettagli di un profilo con codice di cancellazione

Il comando seguente consente di visualizzare i dettagli di un profilo con codice di cancellazione identificato dal relativo nome (NAME):

root # ceph osd erasure-code-profile get NAME

13.3.4 Elenco dei profili con codice di cancellazione

Il comando seguente consente di visualizzare un elenco dei nomi di tutti i profili con codice di cancellazione:

root # ceph osd erasure-code-profile ls

13.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:

cephadm@adm > ceph osd pool application enable rbd ec_pool_name

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

cephadm@adm > 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