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.1 / Guida all'amministrazione e alle operazioni / Memorizzazione dei dati in un cluster / Gestione dei pool di memorizzazione
Si applica a SUSE Enterprise Storage 7.1

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 di k e m, dove k è il numero di porzioni di dati e m è 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
Nota
Nota

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 di cancellazione 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 per POOL_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.

Nota
Nota

Se 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

Avvertimento
Avvertimento: l'eliminazione del pool è irreversibile

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=true
cephuser@adm > ceph osd pool delete pool_name pool_name --yes-i-really-really-mean-it
cephuser@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
Suggerimento
Suggerimento: nomi applicazioni di default

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.

Suggerimento
Suggerimento: tutti i valori di un pool

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:

Valori del pool comune
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 e pgp_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 valore osd_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 valore osd_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 valore osd_deep_scrub ricavato dal file di configurazione Ceph.

Valori del pool replicato
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 su false 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 parametro osd_tier_default_cache_hit_set_period, impostato su 1200 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 negli hit_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.

Valori del pool con codice di cancellazione
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.

Avvertimento
Avvertimento: non impostare meno di 3 repliche

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.

Suggerimento
Suggerimento: impostazione di più di 3 repliche

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.

Nota
Nota

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.

Suggerimento
Suggerimento: ottenimento del numero di repliche di oggetti

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 utilizzano omap 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 passaggio prepare e avviarlo in seguito. Tenere presente che solo un client librbd che supporta questa funzione (Ceph Nautilus o più recenti) sarà in grado di aprire l'immagine subito dopo il passaggio prepare, mentre i client librbd meno recenti o i client krbd non saranno in grado di aprire l'immagine finché non viene eseguita la fase commit.

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:

Procedura 18.1: Esecuzione della migrazione del pool replicato al pool con codice di cancellazione
  1. 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 default

    Verificare 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":

    Pool prima della migrazione
    Figura 18.1: Pool prima della migrazione
  2. 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-nonempty
    cephuser@adm > ceph osd tier cache-mode testpool proxy
    Configurazione del livello di cache
    Figura 18.2: Configurazione del livello di cache
  3. Forzare il pool di cache in modo che tutti gli oggetti vengano spostati nel nuovo pool:

    cephuser@adm > rados -p testpool cache-flush-evict-all
    Svuotamento dei dati
    Figura 18.3: Svuotamento dei dati
  4. 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 testpool

    Con l'overlay, tutte le operazioni vengono inoltrate al "testpool" replicato precedente:

    Impostazione dell'overlay
    Figura 18.4: Impostazione dell'overlay

    Adesso è possibile commutare tutti i client agli oggetti di accesso nel nuovo pool.

  5. 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 newpool
    cephuser@adm > ceph osd tier remove newpool testpool
    Completamento della migrazione
    Figura 18.5: Completamento della migrazione
  6. 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.

  1. Interrompere l'accesso dei client (ad esempio le macchine virtuali) all'immagine RBD.

  2. 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/IMAGE
    Suggerimento
    Suggerimento: migrazione soltanto dei dati a un pool con codice di cancellazione

    Se è 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/IMAGE
  3. Concedere ai client l'accesso all'immagine nel pool di destinazione.

  4. Eseguire la migrazione dei dati al pool di destinazione:

    cephuser@adm > rbd migration execute SRC_POOL/IMAGE
  5. Rimuovere 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_ALGORITHM
cephuser@adm > ceph osd pool set POOL_NAME compression_mode COMPRESSION_MODE
Suggerimento
Suggerimento: disabilitazione della compressione del pool

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 mai

  • passive: la compressione viene eseguita se suggerita come COMPRESSIBLE

  • aggressive: la compressione viene eseguita a meno che non sia suggerita come INCOMPRESSIBLE

  • 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 e bluestore_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 e bluestore_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.