cephx
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.
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»).
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».
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.
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
La stringa ABCDEFGHI
viene scritta in un oggetto denominato NYAN
.
cephadm@adm >
echo ABCDEFGHI | rados --pool ecpool put NYAN -
Ai fini del test, adesso è possibile disabilitare gli OSD, ad esempio disconnettendoli dalla rete.
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
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:
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.
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.
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.
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 myprofilecephadm@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.
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
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
.
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".
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".
Le coppie di opzioni di chiavi/valori specifiche per il plug-in del codice di cancellazione selezionato.
Facoltativo. Ignora un profilo esistente con lo stesso nome e consente l'impostazione di una stripe_unit non allineata a 4K.
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
Se è presente un pool che fa riferimento al profilo, l'eliminazione non riesce.
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
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
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".