Vai al contenutoNaviga tra le pagine: pagina precedente [tasto di scelta p]/pagina successiva [tasto di scelta n]
documentation.suse.com / Documentazione di SUSE Enterprise Storage 7 / Guida alle operazioni e all'amministrazione / Memorizzazione dei dati in un cluster / Pool con codice di cancellazione
Si applica a SUSE Enterprise Storage 7

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

Per un elenco dei valori del pool relativo ai pool EC, fare riferimento a Valori del pool con codice di cancellazione.

19.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 17.3.2, «firstn e indep».

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

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

    cephuser@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.

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

19.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 17.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 19.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:

cephuser@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 18.6, «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":

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

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

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

Image

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

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

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

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

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

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

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

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

19.4 Contrassegno dei pool con codice di cancellazione con il dispositivo di blocco RADOS (RADOS Block Device, RBD)

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

cephuser@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":

cephuser@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".