18 Gestione dei pool di memorizzazione #
Ceph memorizza i dati nei pool. I pool sono gruppi logici per la memorizzazione di oggetti. Quando inizialmente si installa un cluster senza creare un pool, Ceph utilizza i pool di default per la memorizzazione dei dati. Gli elementi di rilievo più importanti riportati di seguito sono relativi ai pool Ceph:
Resilienza: i pool Ceph forniscono resilienza tramite la replica o la codifica dei dati contenuti al loro interno. È possibile impostare ciascun pool come replicato (
replicated
) o con codice di cancellazione (erasure coding
). Per i pool replicati, è possibile impostare anche il numero di repliche, o copie, di cui disporrà ogni oggetto dati all'interno del pool. Il numero di copie (OSD, compartimenti/foglie CRUSH) che possono andare perse è inferiore di uno rispetto al numero delle repliche. Con il codice di cancellazione, è possibile impostare i valori dik
em
, dovek
è il numero di porzioni di dati em
è il numero di porzioni di codice. Per i pool con codice di cancellazione, il numero di porzioni di codice determina quanti OSD (compartimenti/foglie CRUSH) possono andare persi senza causare la perdita dei dati.Gruppi di posizionamento: è possibile impostare il numero di gruppi di posizionamento per il pool. In una configurazione tipica si utilizzano circa 100 gruppi di posizionamento per OSD per fornire il bilanciamento ottimale senza utilizzare troppe risorse di calcolo. Quando si configurano più pool, assicurarsi di impostare un numero ragionevole di gruppi di posizionamento per entrambi il pool e il cluster insieme.
Regole CRUSH: quando si memorizzano dati in un pool, gli oggetti e le relative repliche (o porzioni, nel caso dei pool con codice di cancellazione) vengono posizionati in base al set di regole CRUSH mappate al pool. È possibile creare una regola CRUSH personalizzata per il pool.
Snapshot: quando si creano snapshot con
ceph osd pool mksnap
, si crea effettivamente uno snapshot di un determinato pool.
Per organizzare i dati nei pool, è possibile elencare, creare e rimuovere pool. È inoltre possibile visualizzare le statistiche di utilizzo per ciascun pool.
18.1 Creazione di un pool #
È possibile creare un pool replicato (replicated
), per il recupero degli OSD persi mantenendo più copie degli oggetti, o di cancellazione (erasure
) per ottenere la funzionalità RAID5 o 6 generalizzata. Per i pool replicati è necessario maggior spazio di storage nominale rispetto a quello necessario per i pool con codice di cancellazione. L'impostazione di default è replicated
. Per ulteriori informazioni sui pool con codice di cancellazione, vedere il Capitolo 19, Pool con codice di cancellazione.
Per creare un pool replicato, eseguire:
cephuser@adm >
ceph osd pool create POOL_NAME
L'utilità di dimensionamento automatico si occuperà della gestione degli argomenti facoltativi rimanenti. Per ulteriori informazioni, vedere Sezione 17.4.12, «Abilitazione dell'utilità di dimensionamento automatico del gruppo di posizionamento».
Per creare un pool con codice di cancellazione, eseguire:
cephuser@adm >
ceph osd pool create POOL_NAME erasure CRUSH_RULESET_NAME \
EXPECTED_NUM_OBJECTS
Se si supera il limite di gruppi di posizionamento per OSD, è possibile che il comando ceph osd pool create
si concluda con un errore. Il limite viene impostato con l'opzione mon_max_pg_per_osd
.
- POOL_NAME
Indica il nome del pool. Deve essere univoco. Questa opzione è obbligatoria.
- POOL_TYPE
Indica il tipo di pool, che può essere sia
replicato
, per recuperare dagli OSD persi mantenendo più copie degli oggetti, o dicancellazione
per ottenere un tipo di capacità RAID5 generalizzata. Per i pool replicati è richiesto uno spazio di memorizzazione non elaborato maggiore, ma consentono di implementare tutte le operazioni Ceph. Per i pool di cancellazione è richiesto uno spazio di memorizzazione non elaborato minore, ma è possibile implementare solo un sottoinsieme delle operazioni disponibili. L'impostazione di default perPOOL_TYPE
èreplicated
.- CRUSH_RULESET_NAME
Indica il nome del set di regole CRUSH per il pool. Se il set di regole specificato non esiste, la creazione dei pool replicati si concluderà con un errore con -ENOENT. Per i pool replicati, si tratta del set di regole specificato dalla variabile di configurazione
osd pool default CRUSH replicated ruleset
. Questo set di regole deve esistere. Nel caso dei pool con codice di cancellazione, si tratta del set di regole "erasure-code", se è utilizzato il profilo con codice di cancellazione di default, oppure di POOL_NAME. Questo set di regole verrà creato in modo implicito se non esiste già.- erasure_code_profile=profile
Solo per i pool con codice di cancellazione. Utilizzare il profilo del codice di cancellazione. Deve essere un profilo esistente, come definito da
osd erasure-code-profile set
.NotaSe per qualsiasi motivo l'utilità di dimensionamento automatico è stata disabilitata (
pg_autoscale_mode
impostata su off) su un pool, è possibile calcolare e impostare manualmente il numero di gruppi di posizionamento. Per informazioni più dettagliate sul calcolo del numero appropriato di gruppi di posizionamento per il pool, vedere Sezione 17.4, «Gruppi di posizionamento» (in lingua inglese).- EXPECTED_NUM_OBJECTS
Indica il numero di oggetti previsto per il pool. Quando questo valore viene impostato (insieme a una
soglia di unione del filestore
), al momento della creazione del pool si verifica la suddivisione della cartella del gruppo di posizionamento. In tal modo si evita l'impatto di latenza con una suddivisione della cartella di runtime.
18.2 Elenco di pool #
Per elencare il pool del cluster, eseguire:
cephuser@adm >
ceph osd pool ls
18.3 Ridenominazione di un pool #
Per rinominare un pool, eseguire:
cephuser@adm >
ceph osd pool rename CURRENT_POOL_NAME NEW_POOL_NAME
Se si rinomina un pool e si dispone di funzionalità specifiche per il pool per un utente autenticato, è necessario aggiornare le funzionalità dell'utente con il nuovo nome pool.
18.4 Eliminazione di un pool #
I pool possono contenere dati importanti. L'eliminazione di un pool comporta la cancellazione di tutti i dati in esso contenuti e non è possibile recuperarli in alcun modo.
Poiché l'eliminazione involontaria di un pool è un pericolo effettivo, Ceph implementa due meccanismi che impediscono che ciò accada. Prima di poter eliminare un pool è necessario disabilitare entrambi i meccanismi.
Il primo di questi è il flag NODELETE
. Ciascun pool è dotato di questo flag, il cui valore di default è "false". Per scoprire il valore di questo flag su un pool, eseguire il seguente comando:
cephuser@adm >
ceph osd pool get pool_name nodelete
Se l'output è nodelete: true
, non è possibile eliminare il pool fino a quando non si modifica il flag con il seguente comando:
cephuser@adm >
ceph osd pool set pool_name nodelete false
Il secondo meccanismo è il parametro di configurazione esteso a tutto il cluster mon allow pool delete
, il cui valore di default è "false". Vale a dire che per default non è possibile eliminare un pool. Il messaggio di errore visualizzato è:
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
Per eliminare il pool malgrado questa impostazione di sicurezza, è possibile impostare temporaneamente mon allow pool delete
su "true", eliminare il pool e riportare il parametro su "false":
cephuser@adm >
ceph tell mon.* injectargs --mon-allow-pool-delete=truecephuser@adm >
ceph osd pool delete pool_name pool_name --yes-i-really-really-mean-itcephuser@adm >
ceph tell mon.* injectargs --mon-allow-pool-delete=false
Con il comando injectargs
viene visualizzato il seguente messaggio:
injectargs:mon_allow_pool_delete = 'true' (not observed, change may require restart)
Ciò conferma semplicemente che il comando è stato eseguito correttamente. Non si tratta di un errore.
Se sono stati creati set di regole propri e regole per un pool creato precedentemente, considerare di rimuovere tali regole quando il pool non è più necessario.
18.5 Altre operazioni #
18.5.1 Associazione di pool a un'applicazione #
Prima di utilizzare i pool, è necessario associare loro un'applicazione. I pool che verranno utilizzati con CephFS o quelli creati automaticamente da Object Gateway vengono associati automaticamente.
Negli altri casi, è possibile associare manualmente un nome applicazione in formato libero a un pool:
cephuser@adm >
ceph osd pool application enable POOL_NAME APPLICATION_NAME
CephFS utilizza il nome applicazione cephfs
, per il RADOS Block Device (dispositivo di blocco RADOS) viene utilizzato rbd
e per Object Gateway viene utilizzato rgw
.
È possibile associare un pool a più applicazioni, ciascuna delle quali può disporre di metadati propri. Per elencare l'applicazione (o le applicazioni) associata a un pool, immettere il comando seguente:
cephuser@adm >
ceph osd pool application get pool_name
18.5.2 Impostazione delle quote del pool #
È possibile impostare le quote del pool per il numero massimo di byte e/o il numero massimo di oggetti per pool.
cephuser@adm >
ceph osd pool set-quota POOL_NAME MAX_OBJECTS OBJ_COUNT MAX_BYTES BYTES
Esempio:
cephuser@adm >
ceph osd pool set-quota data max_objects 10000
Per rimuovere una quota, impostarne il valore a 0.
18.5.3 Visualizzazione delle statistiche del pool #
Per visualizzare le statistiche di utilizzo di un pool, eseguire:
cephuser@adm >
rados df
POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS RD WR_OPS WR USED COMPR UNDER COMPR
.rgw.root 768 KiB 4 0 12 0 0 0 44 44 KiB 4 4 KiB 0 B 0 B
cephfs_data 960 KiB 5 0 15 0 0 0 5502 2.1 MiB 14 11 KiB 0 B 0 B
cephfs_metadata 1.5 MiB 22 0 66 0 0 0 26 78 KiB 176 147 KiB 0 B 0 B
default.rgw.buckets.index 0 B 1 0 3 0 0 0 4 4 KiB 1 0 B 0 B 0 B
default.rgw.control 0 B 8 0 24 0 0 0 0 0 B 0 0 B 0 B 0 B
default.rgw.log 0 B 207 0 621 0 0 0 5372132 5.1 GiB 3579618 0 B 0 B 0 B
default.rgw.meta 961 KiB 6 0 18 0 0 0 155 140 KiB 14 7 KiB 0 B 0 B
example_rbd_pool 2.1 MiB 18 0 54 0 0 0 3350841 2.7 GiB 118 98 KiB 0 B 0 B
iscsi-images 769 KiB 8 0 24 0 0 0 1559261 1.3 GiB 61 42 KiB 0 B 0 B
mirrored-pool 1.1 MiB 10 0 30 0 0 0 475724 395 MiB 54 48 KiB 0 B 0 B
pool2 0 B 0 0 0 0 0 0 0 0 B 0 0 B 0 B 0 B
pool3 333 MiB 37 0 111 0 0 0 3169308 2.5 GiB 14847 118 MiB 0 B 0 B
pool4 1.1 MiB 13 0 39 0 0 0 1379568 1.1 GiB 16840 16 MiB 0 B 0 B
Di seguito è riportata una descrizione delle singole colonne:
- USED
Numero di byte utilizzati dal pool.
- OBJECTS
Numero di oggetti memorizzati nel pool.
- CLONES
Numero di cloni memorizzati nel pool. Quando viene creata una snapshot e si scrive su un oggetto, invece di modificare l'oggetto originale, ne viene creato un clone per evitare che il contenuto dell'oggetto originale acquisito tramite snapshot venga modificato.
- COPIES
Numero di repliche dell'oggetto. Ad esempio, se un pool replicato con fattore di replica di 3 contiene "x" oggetti, in genere disporrà di 3 * x copie.
- MISSING_ON_PRIMARY
Numero di oggetti in stato danneggiato (non esistono tutte le copie) mentre la copia è mancante sull'OSD primario.
- UNFOUND
Numero di oggetti non trovati.
- DEGRADED
Numero di oggetti danneggiati.
- RD_OPS
Numero totale di operazioni di lettura richieste per il pool.
- RD
Numero totale di byte letti dal pool.
- WR_OPS
Numero totale di operazioni di scrittura richieste per il pool.
- WR
Numero totale di byte scritti sul pool. Tenere presente che questo valore non corrisponde all'utilizzo del pool, poiché è possibile scrivere sullo stesso oggetto per più volte. Come risultato, il valore di utilizzo del pool rimarrà invariato, ma il numero di byte scritti nel pool aumenterà.
- USED COMPR
Numero di byte allocati per i dati compressi.
- UNDER COMPR
Numero di byte occupati dai dati compressi quando non lo sono.
18.5.4 Ottenimento dei valori del pool #
Per ottenere un valore da un pool, eseguire il comando get
seguente:
cephuser@adm >
ceph osd pool get POOL_NAME KEY
È possibile ottenere valori per le chiavi elencate nella Sezione 18.5.5, «Impostazione dei valori del pool» oltre che per le chiavi seguenti:
- PG_NUM
Indica il numero di gruppi di posizionamento per il pool.
- PGP_NUM
Indica il numero effettivo dei gruppi di posizionamento da utilizzare quando si calcola il posizionamento dei dati. L'intervallo valido è uguale o minore di
PG_NUM
.
Per visualizzare un elenco di tutti i valori correlati a un pool specifico, eseguire:
cephuser@adm >
ceph osd pool get POOL_NAME all
18.5.5 Impostazione dei valori del pool #
Per impostare un valore a un pool, eseguire:
cephuser@adm >
ceph osd pool set POOL_NAME KEY VALUE
Di seguito è riportato un elenco dei valori del pool ordinati per tipo di pool:
- crash_replay_interval
Indica il numero di secondi da consentire ai client per riprodurre richieste riconosciute, ma non sottoposte a commit.
- pg_num
Indica il numero di gruppi di posizionamento per il pool. Se si aggiungono nuovi OSD al cluster, verificare il valore dei gruppi di posizionamento su tutti i pool utilizzati come destinazione per i nuovi OSD.
- pgp_num
Indica il numero effettivo dei gruppi di posizionamento da utilizzare quando si calcola il posizionamento dei dati.
- crush_ruleset
Indica il set di regole da utilizzare per la mappatura del posizionamento oggetti nel cluster.
- hashpspool
Impostare (1) o annullare l'impostazione (0) del flag HASHPSPOOL su un determinato pool. Se si abilita questo flag, l'algoritmo viene modificato per distribuire meglio i gruppi di posizionamento agli OSD. Dopo aver abilitato questo flag in un pool il cui flag HASHPSPOOL è stato impostato sul valore 0 di default, nel cluster viene avviato il processo di backfill per fare in modo che il posizionamento di tutti i gruppi di posizionamento sia nuovamente corretto. Si tenga presente che questa procedura potrebbe generare un notevole carico I/O su un cluster, pertanto non abilitare il flag da 0 a 1 sui cluster di produzione con carico elevato.
- nodelete
Impedisce la rimozione del pool.
- nopgchange
Impedisce di modificare i valori
pg_num
epgp_num
del pool.- noscrub,nodeep-scrub
Disabilita la pulitura (approfondita) dei dati per un pool specifico per risolvere carichi I/O temporaneamente elevati.
- write_fadvise_dontneed
Impostare o annullare l'impostazione del flag
WRITE_FADVISE_DONTNEED
sulle richieste di lettura/scrittura di un determinato pool per evitare l'inserimento dei dati nella cache. L'impostazione di default èfalse
. Si applica a entrambi i pool replicati ed EC.- scrub_min_interval
Intervallo minimo espresso in secondi per la pulitura dei pool quando il carico del cluster è basso. Il valore di default
0
significa che viene utilizzato il valoreosd_scrub_min_interval
ricavato dal file di configurazione Ceph.- scrub_max_interval
Intervallo massimo espresso in secondi per la pulitura dei pool, indipendentemente dal carico del cluster. Il valore di default
0
significa che viene utilizzato il valoreosd_scrub_max_interval
ricavato dal file di configurazione Ceph.- deep_scrub_interval
Intervallo espresso in secondi per la pulitura approfondita del pool. Il valore di default
0
significa che viene utilizzato il valoreosd_deep_scrub
ricavato dal file di configurazione Ceph.
- dimensione
Imposta il numero di repliche per gli oggetti nel pool. Per ulteriori informazioni, vedere Sezione 18.5.6, «Impostazione del numero di repliche di oggetti». Solo pool replicati.
- min_size
Imposta il numero minimo di repliche richiesto per I/O. Per ulteriori informazioni, vedere Sezione 18.5.6, «Impostazione del numero di repliche di oggetti». Solo pool replicati.
- nosizechange
Impedisce di modificare le dimensioni del pool. Durante la creazione di un pool, il valore di default è ricavato dal valore del parametro
osd_pool_default_flag_nosizechange
, impostato sufalse
per default. Si applica soltanto ai pool replicati perché non è possibile modificare le dimensioni dei pool EC.- hit_set_type
Consente di controllare i set di accessi per i pool di cache. Per ulteriori informazioni, vedere Bloom Filter (in lingua inglese). Questa opzione può contenere i seguenti valori:
bloom
,explicit_hash
,explicit_object
. Il valore di default èbloom
, gli altri valori sono solo ai fini dei test.- hit_set_count
Indica il numero di set di accessi per i pool di cache. Più elevato è il numero, maggiore è il consumo di RAM da parte del daemon
ceph-osd
. Il valore di default è0
.- hit_set_period
Indica la durata, espressa in secondi, di un periodo di set di accessi per i pool di cache. Più elevato è il numero, maggiore è il consumo di RAM da parte del daemon
ceph-osd
. Durante la creazione di un pool, il valore di default è ricavato dal valore del parametroosd_tier_default_cache_hit_set_period
, impostato su1200
per default. Si applica soltanto ai pool replicati perché non è possibile utilizzare i pool EC come livello di cache.- hit_set_fpp
Probabilità falsa positiva per il tipo di set di accessi bloom. Per ulteriori informazioni, vedere Bloom Filter (in lingua inglese). L'intervallo valido è da 0,0 a 1,0; il valore di default è
0,05
- use_gmt_hitset
Forza gli OSD a utilizzare le registrazioni dell'orario GMT (ora di Greenwich) quando si crea un set di accessi per la suddivisione in livelli di cache. In tal modo ci si assicura che i nodi in fusi orari diversi restituiscano lo stesso risultato. Il valore di default è
1
. Tale valore non deve essere modificato.- cache_target_dirty_ratio
Indica la percentuale del pool di cache contenente oggetti modificati prima che l'agente di suddivisione in livelli di cache li svuoti nel pool di memorizzazione di supporto. Il valore di default è
0.4
.- cache_target_dirty_high_ratio
Indica la percentuale del pool di cache contenente oggetti modificati prima che l'agente di suddivisione in livelli di cache li svuoti nel pool di memorizzazione di supporto con una velocità più elevata. Il valore di default è
0.6
.- cache_target_full_ratio
Indica la percentuale del pool di cache contenente oggetti non modificati prima che l'agente di suddivisione in livelli di cache li rimuova dal pool di cache. Il valore di default è
0.8
.- target_max_bytes
Ceph inizierà lo svuotamento o la rimozione degli oggetti quando viene attivata la soglia
max_bytes
.- target_max_objects
Ceph inizierà lo svuotamento o la rimozione degli oggetti quando viene attivata la soglia
max_objects
.- hit_set_grade_decay_rate
Grado di decadimento della temperatura tra due
hit_set
consecutivi. Il valore di default è20
.- hit_set_search_last_n
Numero massimo
N
di visualizzazioni neglihit_set
per il calcolo della temperatura. Il valore di default è1
.- cache_min_flush_age
Tempo (in secondi) prima che l'agente di suddivisione in livelli di cache svuoti un oggetto dal pool di cache nel pool di memorizzazione.
- cache_min_evict_age
Tempo (in secondi) prima che l'agente di suddivisione in livelli di cache rimuova un oggetto dal pool di cache.
- fast_read
Se questo flag è abilitato nei pool con codice di cancellazione, la richiesta di lettura emette sottoletture a tutte le partizioni e attende di ricevere un numero sufficiente di partizioni da decodificare per servire il client. Nel caso dei plug-in di cancellazione jerasure e isa, quando vengono restituite le prime risposte
K
, la richiesta del client viene eseguita immediatamente utilizzando i dati decodificati da tali risposte. Questo approccio causa un maggiore carico sulla CPU e un minore carico sul disco/sulla rete. Attualmente il flag è supportato solo per i pool con codice di cancellazione. Il valore di default è0
.
18.5.6 Impostazione del numero di repliche di oggetti #
Per impostare il numero di repliche di oggetti in un pool replicato, eseguire quanto riportato di seguito:
cephuser@adm >
ceph osd pool set poolname size num-replicas
In num-replicas è incluso l'oggetto stesso. Se ad esempio si desiderano l'oggetto e due copie dello stesso per un totale di tre istanze dell'oggetto, specificare 3.
Se si imposta num-replicas a 2, si otterrà solo una copia dei dati. Se si perde un'istanza oggetto, è necessario confidare nel fatto che l'altra copia non sia corrotta, ad esempio dall'ultima pulitura effettuata durante il recupero (fare riferimento alla Sezione 17.6, «Pulitura dei gruppi di posizionamento»).
L'impostazione di un pool a una replica significa che nel pool è presente una istanza esatta dell'oggetto Dati. In caso di errore dell'OSD, i dati vengono persi. Un utilizzo possibile di un pool con una replica consiste nella memorizzazione temporanea dei dati per un breve periodo.
Se vengono impostate 4 repliche per un pool, è possibile aumentare l'affidabilità del 25%.
Nel caso di due data center, è necessario impostare almeno 4 repliche per un pool affinché siano presenti due copie in ciascun data center per fare in modo che, se un data center viene perso, ne esistano comunque due copie e i dati vengano conservati anche in caso di perdita di un disco.
Un oggetto potrebbe accettare I/O danneggiati con meno di pool size
repliche. Per impostare un numero minimo di repliche obbligatorie per I/O, si deve utilizzare l'impostazione min_size
. Esempio:
cephuser@adm >
ceph osd pool set data min_size 2
In tal modo ci si assicura che nessun oggetto nel pool di dati riceva I/O con meno di min_size
repliche.
Per ottenere il numero di repliche di oggetti, eseguire quanto riportato di seguito:
cephuser@adm >
ceph osd dump | grep 'replicated size'
Ceph elencherà i pool, con l'attributo replicated size
evidenziato. Per default, Ceph crea due repliche di un oggetto (per un totale di tre copie o una dimensione pari a 3).
18.6 Migrazione del pool #
Quando si crea un pool (vedere Sezione 18.1, «Creazione di un pool») è necessario specificarne i parametri iniziali, come il tipo di pool o il numero dei gruppi di posizionamento. Se in un secondo momento si decide di modificare uno di questi parametri, ad esempio durante la conversione di un pool replicato in uno con codice di cancellazione o se si riduce il numero di gruppi di posizionamento, è necessario eseguire la migrazione dei dati del pool su un altro i cui parametri sono adatti alla distribuzione attualmente attiva.
Questa sezione descrive due metodi di migrazione: il metodo del livello di cache, per la migrazione dei dati generali del pool, e il metodo basato sui sottocomandi rbd migrate
, per la migrazione delle immagini RBD a un nuovo pool. Ogni metodo presenta le proprie specifiche e limitazioni.
18.6.1 Limitazioni #
È possibile utilizzare il metodo del livello di cache per eseguire la migrazione da un pool replicato a un pool EC o a un altro pool replicato. La migrazione da un pool EC non è supportata.
Non è possibile eseguire la migrazione delle immagini RBD e delle esportazioni CephFS da un pool replicato a un pool EC. Il motivo di questa limitazione risiede nel fatto che i pool EC non supportano
omap
, laddove invece RBD e CephFS utilizzanoomap
per memorizzare i metadati. Ad esempio, lo svuotamento dell'oggetto intestazione dell'RBD non riuscirà correttamente. Tuttavia, è possibile eseguire la migrazione dei dati a un pool EC, lasciando i metadati in un pool replicato.Il metodo
rbd migration
consente di eseguire la migrazione delle immagini con un tempo di fermo del client minimo. È necessario soltanto interrompere il client prima del passaggioprepare
e avviarlo in seguito. Tenere presente che solo un clientlibrbd
che supporta questa funzione (Ceph Nautilus o più recenti) sarà in grado di aprire l'immagine subito dopo il passaggioprepare
, mentre i clientlibrbd
meno recenti o i clientkrbd
non saranno in grado di aprire l'immagine finché non viene eseguita la fasecommit
.
18.6.2 Esecuzione della migrazione con il livello di cache #
Il principio è semplice: includere il pool di cui eseguire la migrazione in un livello di cache in ordine inverso. Nell'esempio seguente viene eseguita la migrazione di un pool replicato denominato "testpool" a un pool con codice di cancellazione:
Creare un novo pool con codice di cancellazione denominato "newpool". Fare riferimento alla Sezione 18.1, «Creazione di un pool» per una spiegazione dettagliata dei parametri di creazione del pool.
cephuser@adm >
ceph osd pool create newpool erasure defaultVerificare che il portachiavi del client utilizzato fornisca per "newpool" almeno le stesse capacità di "testpool".
Adesso si hanno due pool: quello originale replicato "testpool" compilato con i dati e il nuovo pool con codice di cancellazione vuoto "newpool":
Figura 18.1: Pool prima della migrazione #Impostare il livello di cache e configurare il pool replicato "testpool" come pool di cache. L'opzione
-force-nonempty
consente di aggiungere un livello di cache anche se il pool contiene già dei dati:cephuser@adm >
ceph tell mon.* injectargs \ '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=1'cephuser@adm >
ceph osd tier add newpool testpool --force-nonemptycephuser@adm >
ceph osd tier cache-mode testpool proxyFigura 18.2: Configurazione del livello di cache #Forzare il pool di cache in modo che tutti gli oggetti vengano spostati nel nuovo pool:
cephuser@adm >
rados -p testpool cache-flush-evict-allFigura 18.3: Svuotamento dei dati #Fino a quando lo svuotamento di tutti i dati nel pool con codice di cancellazione non è completato, è necessario specificare un overlay in modo che la ricerca degli oggetti venga eseguita nel pool precedente:
cephuser@adm >
ceph osd tier set-overlay newpool testpoolCon l'overlay, tutte le operazioni vengono inoltrate al "testpool" replicato precedente:
Figura 18.4: Impostazione dell'overlay #Adesso è possibile commutare tutti i client agli oggetti di accesso nel nuovo pool.
Dopo la migrazione di tutti i dati nel "newpool" con codice di cancellazione, rimuovere l'overlay e il pool di cache "testpool" precedente:
cephuser@adm >
ceph osd tier remove-overlay newpoolcephuser@adm >
ceph osd tier remove newpool testpoolFigura 18.5: Completamento della migrazione #Esegui
cephuser@adm >
ceph tell mon.* injectargs \ '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=0'
18.6.3 Esecuzione della migrazione di immagini RBD #
Di seguito è indicata la modalità consigliata per eseguire la migrazione delle immagini RBD da un pool replicato a un altro.
Interrompere l'accesso dei client (ad esempio le macchine virtuali) all'immagine RBD.
Creare una nuova immagine nel pool di destinazione, con l'elemento superiore impostato sull'immagine di origine:
cephuser@adm >
rbd migration prepare SRC_POOL/IMAGE TARGET_POOL/IMAGESuggerimento: migrazione soltanto dei dati a un pool con codice di cancellazioneSe è necessario eseguire la migrazione soltanto dei dati dell'immagine a un nuovo pool EC e lasciare i metadati nel pool replicato originale, eseguire invece il comando seguente:
cephuser@adm >
rbd migration prepare SRC_POOL/IMAGE \ --data-pool TARGET_POOL/IMAGEConcedere ai client l'accesso all'immagine nel pool di destinazione.
Eseguire la migrazione dei dati al pool di destinazione:
cephuser@adm >
rbd migration execute SRC_POOL/IMAGERimuovere l'immagine meno recente:
cephuser@adm >
rbd migration commit SRC_POOL/IMAGE
18.7 Snapshot del pool #
Gli snapshot del pool riprendono lo stato dell'interno pool Ceph. Con gli snapshot del pool è possibile mantenere la cronologia dello stato del pool. La creazione di snapshot del pool consuma spazio di storage in modo proporzionale alle dimensioni del pool. Verificare sempre che lo spazio su disco nello spazio di memorizzazione correlato sia sufficiente prima di creare lo snapshot di un pool.
18.7.1 Creazione dello snapshot di un pool #
Per creare una snapshot di un pool, eseguire:
cephuser@adm >
ceph osd pool mksnap POOL-NAME SNAP-NAME
Esempio:
cephuser@adm >
ceph osd pool mksnap pool1 snap1
created pool pool1 snap snap1
18.7.2 Elenco di snapshot di un pool #
Per visualizzare un elenco delle snapshot esistenti di un pool, eseguire:
cephuser@adm >
rados lssnap -p POOL_NAME
Esempio:
cephuser@adm >
rados lssnap -p pool1
1 snap1 2018.12.13 09:36:20
2 snap2 2018.12.13 09:46:03
2 snaps
18.7.3 Rimozione dello snapshot di un pool #
Per rimuovere una snapshot di un pool, eseguire:
cephuser@adm >
ceph osd pool rmsnap POOL-NAME SNAP-NAME
18.8 Compressione dei dati #
Per risparmiare spazio su disco, in BlueStore (ulteriori dettagli nel riferimento Sezione 1.4, «BlueStore») è disponibile la compressione rapida dei dati. Il rapporto di compressione dipende dai dati memorizzati nel sistema. Tenere presente che per le attività di compressione/decompressione è richiesta una potenza della CPU aggiuntiva.
È possibile configurare la compressione dei dati a livello globale (vedere la Sezione 18.8.3, «Opzioni di compressione globali») e quindi sostituire le impostazioni di compressione specifiche per ciascun pool individuale.
È possibile abilitare o disabilitare la compressione dei dati del pool o modificare l'algoritmo e la modalità di compressione in qualsiasi momento, a prescindere dal fatto che il pool contenga o meno dati.
Dopo aver abilitato la compressione del pool, non verrà applicata alcuna compressione ai dati esistenti.
Dopo aver disabilitato la compressione di un pool, tutti i relativi dati verranno decompressi.
18.8.1 Abilitazione della compressione #
Per abilitare la compressione dei dati per un pool denominato POOL_NAME, eseguire il comando seguente:
cephuser@adm >
ceph
osd pool set POOL_NAME compression_algorithm COMPRESSION_ALGORITHMcephuser@adm >
ceph
osd pool set POOL_NAME compression_mode COMPRESSION_MODE
Per disabilitare la compressione dei dati per un pool, utilizzare "none" come algoritmo di compressione:
cephuser@adm >
ceph
osd pool set POOL_NAME compression_algorithm none
18.8.2 Opzioni di compressione del pool #
Elenco completo delle opzioni di compressione:
- compression_algorithm
I valori possibili sono
none
,zstd
,snappy
. L'impostazione di default èsnappy
.L'algoritmo di compressione da utilizzare dipenda dal caso di utilizzo specifico. Di seguito sono riportati alcuni suggerimenti:
Utilizzare il valore di default
snappy
a meno che non sia necessario modificarlo per qualche motivo.zstd
offre un buon rapporto di compressione, ma causa un elevato overhead della CPU durante la compressione di piccole quantità di dati.Eseguire un benchmark di questi algoritmi su un campione dei dati effettivi continuando a osservare la CPU e il consumo di memoria del cluster.
- compression_mode
I valori possibili sono
none
,aggressive
,passive
,force
. L'impostazione di default ènone
.none
: la compressione non viene eseguita maipassive
: la compressione viene eseguita se suggerita comeCOMPRESSIBLE
aggressive
: la compressione viene eseguita a meno che non sia suggerita comeINCOMPRESSIBLE
force
: la compressione viene eseguita sempre
- compression_required_ratio
Valore: doppio, rapporto = SIZE_COMPRESSED / SIZE_ORIGINAL. Il valore di default è
0,875
, che indica che l'oggetto non verrà compresso se la compressione non riduce lo spazio occupato di almeno il 12,5%.Gli oggetti al di sopra di tale rapporto non verranno memorizzati compressi a causa del basso guadagno netto.
- compression_max_blob_size
Valore: intero non firmato, dimensioni in byte. Default:
0
Dimensioni massime degli oggetti che vengono compressi.
- compression_min_blob_size
Valore: intero non firmato, dimensioni in byte. Default:
0
Dimensioni massime degli oggetti che vengono compressi.
18.8.3 Opzioni di compressione globali #
È possibile impostare le seguenti opzioni di configurazione nella configurazione di Ceph e applicarle a tutti gli OSD, non solo a un singolo pool. La configurazione specifica per il pool indicata nella Sezione 18.8.2, «Opzioni di compressione del pool» ha la precedenza.
- bluestore_compression_algorithm
Vedere compression_algorithm
- bluestore_compression_mode
Vedere compression_mode
- bluestore_compression_required_ratio
Vedere compression_required_ratio
- bluestore_compression_min_blob_size
Valore: intero non firmato, dimensioni in byte. Default:
0
Dimensioni massime degli oggetti che vengono compressi. L'impostazione viene ignorata per default a favore di
bluestore_compression_min_blob_size_hdd
ebluestore_compression_min_blob_size_ssd
. Ha la precedenza quando viene impostata su un valore diverso da zero.- bluestore_compression_max_blob_size
Valore: intero non firmato, dimensioni in byte. Default:
0
Dimensioni massime degli oggetti compressi prima che vengano suddivisi in porzioni più piccole. L'impostazione viene ignorata per default a favore di
bluestore_compression_max_blob_size_hdd
ebluestore_compression_max_blob_size_ssd
. Ha la precedenza quando viene impostata su un valore diverso da zero.- bluestore_compression_min_blob_size_ssd
Valore: intero non firmato, dimensioni in byte. Default:
8 K
Dimensioni minime degli oggetti che vengono compressi e memorizzati su un'unità SSD.
- bluestore_compression_max_blob_size_ssd
Valore: intero non firmato, dimensioni in byte. Default:
64 K
Dimensioni massime degli oggetti compressi e memorizzati nell'unità a stato solito prima che vengano suddivisi in porzioni più piccole.
- bluestore_compression_min_blob_size_hdd
Valore: intero non firmato, dimensioni in byte. Default:
128 K
Dimensioni minime degli oggetti che vengono compressi e memorizzati su dischi rigidi.
- bluestore_compression_max_blob_size_hdd
Valore: intero non firmato, dimensioni in byte. Default:
512 K
Dimensioni massime degli oggetti compressi e memorizzati nei dischi rigidi prima che vengano suddivisi in porzioni più piccole.