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 5

8 RADOS Block Device (dispositivo di blocco RADOS)

Un blocco è una sequenza di byte, ad esempio un blocco di dati da 512 byte. Le interfacce di memorizzazione basate su blocchi rappresentano il modo più comune per memorizzare i dati con supporti rotanti, come dischi rigidi, CD, dischi floppy. L'ubiquità delle interfacce dei dispositivi di blocco rende un dispositivo di blocco virtuale un candidato ideale per interagire con un sistema di memorizzazione di massa come Ceph.

I dispositivi di blocco Ceph consentono la condivisione di risorse fisiche e sono ridimensionabili. Questi dispositivi memorizzano i dati suddivisi in più OSD in un cluster Ceph. I dispositivi di blocco Ceph sfruttano le funzionalità RADOS come la creazione di snapshot, replica e coerenza. I RADOS Block Device (RBD, dispositivi di blocco RADOS) di Ceph interagiscono con gli OSD utilizzando i moduli del kernel o la libreria librbd.

Protocollo RADOS
Figura 8.1: Protocollo RADOS

I dispositivi di blocco Ceph offrono prestazioni elevate con scalabilità infinita ai moduli del kernel. Supportano soluzioni di virtualizzazione come QEMU o sistemi di calcolo basati su cloud come OpenStack che fanno affidamento su libvirt. È possibile utilizzare lo stesso cluster per attivare Object Gateway, CephFS e RADOS Block Device (dispositivi di blocco RADOS) simultaneamente.

8.1 Comandi dei dispositivi di blocco

Il comando rbd consente di creare, elencare, analizzare e rimuovere immagini dei dispositivi di blocco. È inoltre possibile utilizzarlo per clonare immagini, creare snapshot, eseguire il rollback di un'immagine in uno snapshot o visualizzare uno snapshot.

Suggerimento
Suggerimento: accesso a un cluster

Per utilizzare i comandi dei RADOS Block Device (dispositivi di blocco RADOS), è necessario disporre dell'accesso a un cluster Ceph in esecuzione.

8.1.1 Creazione di un'immagine del dispositivo di blocco

Prima di poter aggiungere un dispositivo di blocco a un nodo, è necessario creare un'immagine correlata nel cluster. Per creare un'immagine del dispostivi di blocco, eseguire quanto riportato di seguito:

root # rbd create --size megabytes pool-name/image-name

Ad esempio, per creare un'immagine da 1 GB denominata "bar" le cui informazioni vengono memorizzate in un pool denominato "swimmingpool", eseguire quanto riportato di seguito:

root # rbd create --size 1024 swimmingpool/bar
Suggerimento
Suggerimento: pool di default

Se non si specifica un pool quando si crea un'immagine, questa verrà memorizzata nel pool "rbd" di default.

Nota
Nota: creare prima un pool

È necessario creare un pool prima di poterlo specificare come origine. Per ulteriori dettagli, vedere Capitolo 7, Gestione di pool di memorizzazione.

8.1.2 Creazione di un'immagine del dispositivo di blocco in un pool con codice di cancellazione

A partire da SUSE Enterprise Storage 5, è possibile memorizzare i dati dell'immagine di un dispositivo di blocco in pool con codice di cancellazione. In un pool con codice di cancellazione è possibile memorizzare solo la parte riguardate i dati di un'immagine RBD. Inoltre, è necessario che il flag "overwrite" di sovrascrittura del pool con codice di cancellazione deve essere impostato su true e ciò è possibile farlo solo se tutti gli OSD utilizzano BlueStore.

I metadati dell'immagine non possono risiedere in un pool con codice di cancellazione. I metadati possono risiedere nel pool "rbd" o nel pool specificato esplicitamente dall'utente con il parametro --pool= nel comando rbd create.

Nota
Nota: BlueStore obbligatorio

Per utilizzare i pool con codice di cancellazione per le immagini dei dispositivi di blocco è necessario BlueStore in tutti i nodi.

Seguire i passaggi riportati di seguito per creare un'immagine RBD in un pool con codice di cancellazione:

root # ceph osd pool create POOL_NAME 12 12 erasure
root # ceph osd pool set POOL_NAME allow_ec_overwrites true

# Metadata will reside in pool "rbd", and data in pool "POOL_NAME"
root # rbd create IMAGE_NAME --size=1G --data-pool POOL_NAME

#Metadata will reside in pool "OTHER_POOL", and data in pool "POOL_NAME"
root # rbd create IMAGE_NAME --size=1G --data-pool POOL_NAME --pool=OTHER_POOL

8.1.3 Elenco delle immagini dei dispositivi di blocco

Per elencare i dispositivi di blocco nel pool "rbd", eseguire quanto riportato di seguito ("rbd" è il nome pool di default):

root # rbd ls

Per elencare i dispositivi di blocco in un pool denominato "swimmingpool", eseguire quanto riportato di seguito:

root # rbd ls swimmingpool

8.1.4 Recupero delle informazioni sull'immagine

Per recuperare informazioni da un'immagine "bar" in un pool denominato "swimmingpool", eseguire quanto riportato di seguito:

root # rbd info swimmingpool/bar

8.1.5 Ridimensionamento di un'immagine del dispositivo di blocco

Le immagini del RADOS Block Device (dispositivo di blocco RADOS) sono sottoposte a thin provisioning, non utilizzano effettivamente alcuno spazio di memorizzazione fisico fino a quando non si inizia a salvare i dati in esse. Dispongono tuttavia di una capacità massima che è possibile impostare con l'opzione --size. Se si desidera aumentare (o diminuire) le dimensioni massime di un'immagine, eseguire quanto riportato di seguito:

root # rbd resize --size 2048 foo # to increase
rbd resize --size 2048 foo --allow-shrink # to decrease

8.1.6 Rimozione di un'immagine del dispositivo di blocco

Per rimuovere un dispositivo di blocco che corrisponde a un'immagine "bar" in un pool denominato "swimmingpool", eseguire quanto riportato di seguito:

root # rbd rm swimmingpool/bar

8.2 Montaggio e smontaggio di immagini RBD

Dopo aver creato un RADOS Block Device (dispositivo di blocco RADOS), è possibile formattarlo, montarlo in modo che sia in grado di scambiare file e smontarlo al termine di tale operazione.

  1. Accertarsi che nel cluster Ceph sia incluso un pool con l'immagine disco che si desidera montare. Presupporre che il pool sia denominato mypool e l'immagine myimage.

    rbd list mypool
  2. Mappare l'immagine nel nuovo dispositivo di blocco.

    root # rbd map --pool mypool myimage
    Suggerimento
    Suggerimento: nome e autenticazione utente

    Per specificare un nome utente, utilizzare --id user-name. Inoltre, se si utilizza l'autenticazione cephx, è necessario specificare anche un segreto. Quest'ultimo potrebbe essere ricavato da un portachiavi o da un file contenente il segreto:

    root # rbd map --pool rbd myimage --id admin --keyring /path/to/keyring

    oppure

    root # rbd map --pool rbd myimage --id admin --keyfile /path/to/file
  3. Elencare tutti i dispositivi mappati:

    root # rbd showmapped
     id pool   image   snap device
     0  mypool myimage -    /dev/rbd0

    Il dispositivo che si desidera utilizzare è /dev/rbd0.

  4. Creare un file system XFS sul dispositivo /dev/rbd0.

    root # mkfs.xfs /dev/rbd0
     log stripe unit (4194304 bytes) is too large (maximum is 256KiB)
     log stripe unit adjusted to 32KiB
     meta-data=/dev/rbd0              isize=256    agcount=9, agsize=261120 blks
              =                       sectsz=512   attr=2, projid32bit=1
              =                       crc=0        finobt=0
     data     =                       bsize=4096   blocks=2097152, imaxpct=25
              =                       sunit=1024   swidth=1024 blks
     naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
     log      =internal log           bsize=4096   blocks=2560, version=2
              =                       sectsz=512   sunit=8 blks, lazy-count=1
     realtime =none                   extsz=4096   blocks=0, rtextents=0
  5. Montare il dispositivo e verificare che sia montato correttamente. Sostituire /mnt con il proprio punto di montaggio.

    root # mount /dev/rbd0 /mnt
    root # mount | grep rbd0
    /dev/rbd0 on /mnt type xfs (rw,relatime,attr2,inode64,sunit=8192,...

    Adesso è possibile spostare i dati nel e dal dispositivo come se questo fosse una directory locale.

    Suggerimento
    Suggerimento: aumento delle dimensioni del dispositivo RBD

    Se le dimensioni del dispositivo RBD non sono più sufficienti, è possibile aumentarle.

    1. Aumentare le dimensioni dell'immagine RBD, ad esempio fino a 10 GB.

      root # rbd resize --size 10000 mypool/myimage
       Resizing image: 100% complete...done.
    2. Accrescere il file system in modo da riempire le nuove dimensioni del dispositivo.

      root # xfs_growfs /mnt
       [...]
       data blocks changed from 2097152 to 2560000
  6. Una volta terminato l'accesso al dispositivo, non è possibile smontarlo.

    root # unmount /mnt
Suggerimento
Suggerimento: montaggio/smontaggio manuale

Poiché mappare e montare manualmente le immagini RBD dopo l'avvio e annullare tali operazioni prima dello spegnimento può essere tedioso, vengono forniti uno script rbdmap e un'unità systemd. Vedere Sezione 8.4, «rbdmap: mappatura dei dispositivi RBD all'avvio».

8.3 Snapshot dei dispositivi di blocco

Uno snapshot RBD è uno snapshot di un'immagine del RADOS Block Device (dispositivo di blocco RADOS). Gli snapshot consentono di conservare la cronologia dello stato dell'immagine. Ceph supporta anche il layering di snapshot, che consente di clonare rapidamente e facilmente immagini VM. Ceph supporta gli snapshot dei dispositivi di blocco mediante l'uso del comando rbd e molte interfacce di livello superiore, tra cui QEMU, libvirt, OpenStack e CloudStack.

Nota
Nota

Interrompere le operazioni di input e output prima di eseguire lo snapshot di un'immagine. Se l'immagine contiene un file system, questo deve presentare uno stato coerente prima dello snapshot.

8.3.1 Note su Cephx

Quando cephx è abilitato (vedere http://ceph.com/docs/master/rados/configuration/auth-config-ref/ per ulteriori informazioni), è necessario specificare un nome o ID utente e un percorso del portachiavi contenente la chiave corrispondente dell'utente. Per ulteriori dettagli, vedere User Management (in lingua inglese). È inoltre possibile aggiungere la variabile di ambiente CEPH_ARGS per evitare di immettere di nuovo i seguenti parametri.

root # rbd --id user-ID --keyring=/path/to/secret commands
root # rbd --name username --keyring=/path/to/secret commands

Ad esempio:

root # rbd --id admin --keyring=/etc/ceph/ceph.keyring commands
root # rbd --name client.admin --keyring=/etc/ceph/ceph.keyring commands
Suggerimento
Suggerimento

Aggiungere l'utente e il segreto nella variabile di ambiente CEPH_ARGS in modo che non sia necessario immetterli ogni volta.

8.3.2 Nozioni di base sugli snapshot

Nelle procedure seguenti è dimostrato come creare, elencare e rimuovere snapshot mediante l'uso del comando rbd sulla riga di comando.

8.3.2.1 Creazione di snapshot

Per creare uno snapshot con rbd, specificare l'opzione snap create, il nome pool e il nome immagine.

root # rbd --pool pool-name snap create --snap snap-name image-name
root # rbd snap create pool-name/image-name@snap-name

Ad esempio:

root # rbd --pool rbd snap create --snap snapshot1 image1
root # rbd snap create rbd/image1@snapshot1

8.3.2.2 Elenchi di snapshot

Per elencare gli snapshot di un'immagine, specificare il nome pool e il nome immagine.

root # rbd --pool pool-name snap ls image-name
root # rbd snap ls pool-name/image-name

Ad esempio:

root # rbd --pool rbd snap ls image1
root # rbd snap ls rbd/image1

8.3.2.3 Rollback di snapshot

Per eseguire il rollback a uno snapshot con rbd, specificare l'opzione snap rollback, il nome pool, il nome immagine e il nome snapshot.

root # rbd --pool pool-name snap rollback --snap snap-name image-name
root # rbd snap rollback pool-name/image-name@snap-name

Ad esempio:

root # rbd --pool pool1 snap rollback --snap snapshot1 image1
root # rbd snap rollback pool1/image1@snapshot1
Nota
Nota

Eseguire il rollback di un'immagine a uno snapshot significa sovrascrivere la versione attuale dell'immagine con i dati provenienti da uno snapshot. La durata di esecuzione di un rollback aumenta proporzionalmente alle dimensioni dell'immagine. È più rapido eseguire la clonazione da uno snapshot piuttosto che eseguire il rollback di un'immagine a uno snapshot; questo è inoltre il metodo preferito per tornare a uno stato preesistente.

8.3.2.4 Eliminazione di uno snapshot

Per eliminare uno snapshot con rbd, specificare l'opzione snap rm, il nome pool, il nome immagine e il nome utente.

root # rbd --pool pool-name snap rm --snap snap-name image-name
root # rbd snap rm pool-name/image-name@snap-name

Ad esempio:

root # rbd --pool pool1 snap rm --snap snapshot1 image1
root # rbd snap rm pool1/image1@snapshot1
Nota
Nota

Nei Ceph OSD i dati vengono eliminati in modo asincrono, quindi con l'eliminazione di uno snapshot non si libera immediatamente spazio su disco.

8.3.2.5 Eliminazione definitiva di snapshot

Per eliminare tutti gli snapshot di un'immagine con rbd, specificare l'opzione snap purge e il nome immagine.

root # rbd --pool pool-name snap purge image-name
root # rbd snap purge pool-name/image-name

Ad esempio:

root # rbd --pool pool1 snap purge image1
root # rbd snap purge pool1/image1

8.3.3 Layering

Ceph supporta la creazione di molti cloni copia su scrittura (copy-on-write, COW) di uno snapshot del dispositivo di blocco. Il layering degli snapshot consente ai client dei dispositivi di blocco Ceph di creare immagini molto rapidamente. Ad esempio, si può creare un'immagine del dispositivo di blocco con una Linux VM scritta al suo interno, quindi eseguire lo snapshot dell'immagine, proteggere lo snapshot e creare tutti i cloni copia su scrittura desiderati. Poiché gli snapshot sono di sola lettura, la clonazione di uno di essi semplifica la semantica e consente quindi di creare i cloni rapidamente.

Nota
Nota

I termini "parent" e "child" menzionati negli esempi di riga di comando riportati sotto significano uno snapshot del dispositivo di blocco Ceph (parent) e l'immagine corrispondente clonata dallo snapshot (child).

In ciascuna immagine clonata (child) è memorizzato il rifermento alla rispettiva immagine superiore, che consente all'immagine clonata di aprire e leggere lo snapshot superiore.

Un clone COW di uno snapshot si comporta esattamente come qualsiasi altra immagine del dispositivo di blocco Ceph. Nelle immagini clonate è possibile eseguire operazioni di lettura e scrittura ed è possibile clonarle e ridimensionarle. Con le immagini clonate non esistono restrizioni speciali. Il clone copia su scrittura di uno snapshot si riferisce tuttavia allo snapshot, quindi è necessario proteggere quest'ultimo prima di clonarlo.

Nota
Nota

Ceph supporta la clonazione solo per le immagini format 2 (creata con rbd create --image-format 2).

8.3.3.1 Introduzione al layering

Il layering dei dispositivi di blocco Ceph è un processo semplice. È necessario disporre di un'immagine, creare uno snapshot dell'immagine, proteggere lo snapshot. Dopo aver eseguito questi passaggi, è possibile iniziare la clonazione dello snapshot.

L'immagine clonata fa riferimento allo snapshot superiore e include l'ID pool, l'ID immagine e l'ID snapshot. L'inclusione dell'ID pool significa che è possibile clonare snapshot da un pool nelle immagini in un altro pool.

  • Modello di immagine: un caso comune di layering dei dispositivi di blocco consiste nel creare un'immagine master e uno snapshot che funge da modello per i cloni. Ad esempio, un utente può creare un'immagine per una distribuzione Linux (ad esempio, SUSE Linux Enterprise Server) e creare uno shapshot corrispondente. Periodicamente, l'utente può aggiornare l'immagine e creare un nuovo snapshot (ad esempio, zypper ref && zypper patch seguito da rbd snap create). Ma mano che l'immagine matura, l'utente può clonare qualsiasi snapshot.

  • Modello esteso: un caso più avanzato consiste nell'estensione di un'immagine modello che fornisce ulteriori informazioni rispetto all'immagine di base. Ad esempio, un utente può clonare un'immagine (un modello VM) e installare un software diverso (ad esempio un database, un sistema di gestione di contenuti o un sistema di analisi) ed eseguire quindi lo snapshot dell'immagine estesa, che a sua volta è possibile aggiornare allo stesso modo dell'immagine di base.

  • Pool di modelli: un metodo per utilizzare il layering dei dispositivi di blocco consiste nel creare un pool contenente immagini master che fungono da modelli e snapshot di tali modelli. È quindi possibile estendere i privilegi di sola lettura agli utenti in modo che possano clonare gli snapshot senza doverli scrivere o eseguire nel pool.

  • Migrazione/recupero dell'immagine: un metodo per utilizzare il layering dei dispositivi di blocco consiste nell'eseguire la migrazione o il recupero dei dati da un pool in un altro.

8.3.3.2 Protezione di uno snapshot

I cloni accedono agli shapshot superiori. Tutti i cloni verrebbero interrotti se un utente eliminasse inavvertitamente lo snapshot superiore. Per impedire la perdita di dati, è necessario proteggere lo snapshot prima di poterlo clonare.

root # rbd --pool pool-name snap protect \
 --image image-name --snap snapshot-name
root # rbd snap protect pool-name/image-name@snapshot-name

Ad esempio:

root # rbd --pool pool1 snap protect --image image1 --snap snapshot1
root # rbd snap protect pool1/image1@snapshot1
Nota
Nota

Non è possibile eliminare uno snapshot protetto.

8.3.3.3 Clonazione di uno snapshot

Per clonare uno snapshot, è necessario specificare il pool superiore, l'immagine e lo snapshot, il pool secondario e il nome immagine. È necessario proteggere lo snapshot prima di poterlo clonare.

root # rbd --pool pool-name --image parent-image \
 --snap snap-name --dest-pool pool-name \
 --dest child-image
root # rbd clone pool-name/parent-image@snap-name \
pool-name/child-image-name

Ad esempio:

root # rbd clone pool1/image1@snapshot1 pool1/image2
Nota
Nota

Si può clonare uno snapshot da un pool in un'immagine in un altro pool. Ad esempio, si possono mantenere immagini e snapshot di sola lettura come modelli in un pool e cloni scrivibili in un altro pool.

8.3.3.4 Annullamento della protezione di uno snapshot

Prima di poter eliminare uno snapshot, è necessario annullarne la protezione. Inoltre, non è possibile eliminare snapshot con riferimenti dai cloni. È necessario appiattire ciascun clone di uno snapshot prima di poter eliminare quest'ultimo.

root # rbd --pool pool-name snap unprotect --image image-name \
 --snap snapshot-name
root # rbd snap unprotect pool-name/image-name@snapshot-name

Ad esempio:

root # rbd --pool pool1 snap unprotect --image image1 --snap snapshot1
root # rbd snap unprotect pool1/image1@snapshot1

8.3.3.5 Elenco degli elementi secondari di uno snapshot

Per elencare gli elementi secondari di uno snapshot, eseguire quanto riportato di seguito:

root # rbd --pool pool-name children --image image-name --snap snap-name
root # rbd children pool-name/image-name@snapshot-name

Ad esempio:

root # rbd --pool pool1 children --image image1 --snap snapshot1
root # rbd children pool1/image1@snapshot1

8.3.3.6 Appiattimento di un'immagine clonata

Le immagini clonate mantengono un riferimento allo snapshot superiore. Quando si rimuove il riferimento dal clone secondario nello parent superiore, di fatto si "appiattisce" l'immagine copiando le informazioni dallo snapshot al clone. La durata di appiattimento di un clone aumenta proporzionalmente alle dimensioni dello snapshot. Per eliminare uno snapshot, prima è necessario appiattire le immagini secondarie.

root # rbd --pool pool-name flatten --image image-name
root # rbd flatten pool-name/image-name

Ad esempio:

root # rbd --pool pool1 flatten --image image1
root # rbd flatten pool1/image1
Nota
Nota

Poiché un'immagine appiattita contiene tutte le informazioni provenienti dallo snapshot, questa occuperà uno spazio di memorizzazione maggiore rispetto a un clone su più strati.

8.4 rbdmap: mappatura dei dispositivi RBD all'avvio

rbdmap è uno script della shell che consente di automatizzare le operazioni rbd map e rbd unmap su una o più immagini del RADOS Block Device (dispositivo di blocco RADOS). Sebbene sia possibile eseguire manualmente lo script in qualsiasi momento, i principali casi di utilizzo sono la mappatura automatica e il montaggio di immagini RBD all'avvio (e lo smontaggio e l'annullamento della mappatura allo spegnimento), attivati dal sistema Init. A tal fine è incluso un file di unità systemd, rbdmap.service con il pacchetto ceph-common.

Lo script impiega un singolo argomento, che può essere map o unmap. In entrambi i casi lo script analizza sintatticamente un file di configurazione. Il valore di default è /etc/ceph/rbdmap, ma è possibile ignorarlo tramite una variabile di ambiente RBDMAPFILE. Ciascuna riga del file di configurazione corrisponde a un'immagine RBD che deve anche essere mappata o non mappata.

Il file di configurazione presenta il seguente formato:

image_specification rbd_options
image_specification

Percorso di un'immagine in un pool. Specificare come pool_name/image_name. Se si omette pool_name, si presuppone che il default sia "rbd".

rbd_options

Elenco di parametri opzionale da passare al comando sottostante rbd map. Questi parametri e i rispettivi valori devono essere specificati come stringa separata da virgola, ad esempio:

PARAM1=VAL1,PARAM2=VAL2,...

Nell'esempio con lo script rbdmap viene eseguito il seguente comando:

rbd map pool_name/image_name --PARAM1 VAL1 --PARAM2 VAL2

Quando viene eseguito come rbdmap map, lo script analizza sintatticamente il file di configurazione e, per ogni immagine RBD specificata, prima tenta di mappare l'immagine (con il comando the rbd map), quindi ne esegue il montaggio.

Quando eseguito come rbdmap unmap, le immagini elencate nel file di configurazione il montaggio e la mappatura verranno annullati.

rbdmap unmap-all tenta di smontare e successivamente di annullare la mappatura di tutte le immagini RBD attualmente mappate, indipendentemente dalla loro presenza nell'elenco del file di configurazione.

Se ha esito positivo, l'operazione rbd map mappa l'immagine a un dispositivo /dev/rbdX device, quindi viene attivata una regola udev per creare un collegamento simbolico del nome del dispositivo /dev/rbd/pool_name/image_name che punta al dispositivo realmente mappato.

Affinché il montaggio e lo smontaggio abbiano esito positivo, il nome del dispositivo "intuitivo" deve avere una voce corrispondente in /etc/fstab. Quando si scrivono voci /etc/fstab per le immagini RBD, specificare l'opzione di montaggio "noauto" (o "nofail"). In tal modo si impedisce al sistema Init di tentare di montare il dispositivo troppo presto, perfino prima dell'esistenza del dispositivo in questione, poiché di norma rbdmap.service viene attivato piuttosto tardi nella sequenza di avvio.

Per un elenco completo di opzioni rbd, vedere la documentazione relativa a rbd (man 8 rbd).

Per alcuni esempi di utilizzo di rbdmap, vedere la documentazione relativa a rbdmap (man 8 rbdmap).

8.5 Copia speculare di RADOS Block Device (dispositivo di blocco RADOS)

È possibile eseguire la copia speculare delle immagini RBD in modo asincrono tra due cluster Ceph. Questa funzionalità utilizza la funzione journaling dell'immagine RBD per assicurare la replica con coerenza per arresto anomalo tra cluster. La copia speculare è configurata per ogni singolo pool nei cluster peer e può essere configurata in modo che venga eseguita automaticamente la copia speculare di tutte le immagini in un pool o solo di un sottoinsieme specifico di immagini. Per la configurazione della copia speculare si utilizza il comando rbd. Il daemon rbd-mirror è responsabile del pull degli aggiornamenti delle immagini dal cluster peer remoto e della loro applicazione all'immagine nel cluster locale.

Importante
Importante: daemon rbd-mirror

Per utilizzare la copia speculare RBD, è necessario disporre di due cluster Ceph, su ciascuno dei quali è in esecuzione il daemon rbd-mirror.

8.5.1 daemon rbd-mirror

I due daemon rbd-mirror sono responsabili dell'osservazione dei journal dell'immagine sul cluster peer remoto e della riproduzione degli eventi del journal a fronte del cluster locale. La funzione di journaling dell'immagine RBD consente di registrare tutte le modifiche dell'immagine nell'ordine in cui vengono apportate. In tal modo si garantisce la disponibilità a livello locale di una copia speculare con coerenza per arresto anomalo dell'immagine remota.

Il daemon rbd-mirror è disponibile nel pacchetto rbd-mirror. Installarlo, abilitarlo e avviarlo su uno dei nodi del cluster:

root@minion > zypper install rbd-mirror
root@minion > systemctl enable ceph-rbd-mirror@server_name.service
root@minion > systemctl start ceph-rbd-mirror@server_name.service
Importante
Importante

Per ciascun daemon rbd-mirror è necessario connettersi a entrambi i cluster simultaneamente.

8.5.2 Configurazione del pool

Nelle procedure seguenti è illustrato come eseguire task amministrativi di base per configurare la copia speculare tramite il comando rbd. La copia speculare è configurata per ogni singolo pool nei cluster Ceph.

È necessario eseguire i passaggi della configurazione del pool su entrambi i cluster peer. Per maggior chiarezza, in queste procedure si presuppone che due cluster, denominati "local" e "remote", siano accessibili da un singolo host.

Vedere la documentazione relativa a rbd (man 8 rbd) per ulteriori dettagli su come connettersi a cluster Ceph diversi.

Suggerimento
Suggerimento: cluster multipli

Il nome cluster negli esempi seguenti corrisponde a un file di configurazione Ceph omonimo /etc/ceph/remote.conf. Per la configurazione di più cluster, vedere la documentazione relativa a ceph-conf (in lingua inglese).

8.5.2.1 Abilitazione della copia speculare

Per abilitare la copia speculare su un pool, specificare il sottocomando mirror pool enable, il nome pool e la modalità di esecuzione di copia speculare. La modalità di esecuzione di copia speculare può essere "pool" oppure "image":

pool

Tutte le immagini nel pool in cui è abilitata la funzione di journaling vengono sottoposte a copia speculare.

image

La copia speculare deve essere abilitata esplicitamente su ciascuna immagine. Per ulteriori informazioni, vedere Sezione 8.5.3.2, «Abilitazione della copia speculare dell'immagine».

Ad esempio:

root # rbd --cluster local mirror pool enable image-pool pool
root # rbd --cluster remote mirror pool enable image-pool pool

8.5.2.2 Disabilitazione della copia speculare

Per disabilitare la copia speculare su un pool, specificare il sottocomando mirror pool disable e il nome pool. Quando si disabilita la copia speculare su un pool in questo modo, questa verrà disabilitata anche su qualsiasi immagine (nel pool) per la quale è stata abilitata esplicitamente la copia speculare.

root # rbd --cluster local mirror pool disable image-pool
root # rbd --cluster remote mirror pool disable image-pool

8.5.2.3 Aggiunta di un peer del cluster

Affinché il daemon rbd-mirror rilevi il rispettivo cluster peer, è necessario registrare il peer nel pool. Per aggiungere un cluster peer in copia speculare, specificare il sottocomando mirror pool peer add, il nome pool e una specifica del cluster:

root # rbd --cluster local mirror pool peer add image-pool client.remote@remote
root # rbd --cluster remote mirror pool peer add image-pool client.local@local

8.5.2.4 Rimozione di un peer del cluster

Per rimuovere un cluster peer in copia speculare, specificare il sottocomando mirror pool peer remove, il nome pool e l'UUID peer (reso disponibile dal comando rbd mirror pool info):

root # rbd --cluster local mirror pool peer remove image-pool \
 55672766-c02b-4729-8567-f13a66893445
root # rbd --cluster remote mirror pool peer remove image-pool \
 60c0e299-b38f-4234-91f6-eed0a367be08

8.5.3 Configurazione dell'immagine

Diversamente dalla configurazione del pool, la configurazione dell'immagine deve essere eseguita solo a fronte di un singolo cluster Ceph peer in copia speculare.

Le immagini RBD sottoposte a copia speculare sono designate come primarie o non primarie. Questa è una proprietà dell'immagine e non del pool. Non è possibile modificare le immagini designate come non primarie.

Le immagini vengono promosse automaticamente a primarie quando la copia speculare viene prima abilitata su un'immagine (implicitamente, se la modalità di copia speculare del pool è "pool" e la funzione di journaling dell'immagine è abilitata, oppure esplicitamente (vedere Sezione 8.5.3.2, «Abilitazione della copia speculare dell'immagine») mediante il comando rbd).

8.5.3.1 Abilitazione del supporto per il journaling dell'immagine

Nella copia speculare RBD viene utilizzata la funzione di journaling RBD per assicurare che l'immagine replicata mantenga sempre con coerenza per arresto anomalo. Prima di poter eseguire la copia speculare di un'immagine a un cluster peer, è necessario abilitare la funzione di journaling. È possibile abilitare la funzione al momento della creazione dell'immagine fornendo l'opzione --image-feature exclusive-lock,journaling al comando rbd.

In alternativa, è possibile abilitare dinamicamente la funzione di journaling sulle immagini RBD preesistenti. Per abilitare il journaling, specificare il sottocomando feature enable, il nome del pool e dell'immagine e il nome della funzione:

root # rbd --cluster local feature enable image-pool/image-1 journaling
Nota
Nota: dipendenza dell'opzione

La funzione journaling dipende dalla funzione exclusive-lock. Se la funzione exclusive-lock non è già stata abilitata, è necessario farlo prima di abilitare la funzione journaling.

Suggerimento
Suggerimento: journaling su tutte le immagini nuove

È possibile abilitare per default il journaling su tutte le immagini nuove aggiungendo la seguente riga al file di configurazione Ceph:

rbd default features = 125

8.5.3.2 Abilitazione della copia speculare dell'immagine

Se la copia speculare è configurata in modalità "image" per il pool dell'immagine, è necessario abilitare esplicitamente la copia speculare per ciascuna immagine nel pool. Per abilitare la copia speculare per un'immagine specifica, specificare il sottocomando mirror image enable insieme al nome del pool e dell'immagine:

root # rbd --cluster local mirror image enable image-pool/image-1

8.5.3.3 Disabilitazione della copia speculare dell'immagine

Per disabilitare la copia speculare per un'immagine specifica, specificare il sottocomando mirror image disable insieme al nome del pool e dell'immagine:

root # rbd --cluster local mirror image disable image-pool/image-1

8.5.3.4 Promozione e abbassamento di livello dell'immagine

In uno scenario di failover in cui è necessario spostare la designazione primaria all'immagine nel cluster peer, è necessario interrompere l'accesso all'immagine primaria, abbassare di livello l'attuale immagine primaria, promuovere quella nuova e riprendere l'accesso all'immagine sul cluster alternativo.

Per abbassare di livello un'immagine specifica a non primaria, specificare il sottocomando mirror image demote insieme al nome del pool e dell'immagine:

root # rbd --cluster local mirror image demote image-pool/image-1

Per abbassare di livello tutte le immagini primarie in un pool a non primarie, specificare il sottocomando mirror pool demote insieme al nome del pool:

root # rbd --cluster local mirror pool demote image-pool

Per promuovere un'immagine specifica a primaria, specificare il sottocomando mirror image promote insieme al nome del pool e dell'immagine:

root # rbd --cluster remote mirror image promote image-pool/image-1

Per promuovere tutte le immagini primarie in un pool a primarie, specificare il sottocomando mirror pool promote insieme al nome del pool:

root # rbd --cluster local mirror pool promote image-pool
Suggerimento
Suggerimento: suddivisione del carico I/O

Poiché lo stato di primaria o non primaria si riferisce a un'immagine singola, è possibile fare in modo che il carico IO e il failover o il failback della fase venga suddiviso tra due cluster.

Nota
Nota: promozione forzata

È possibile forzare la promozione utilizzando l'opzione --force. La promozione forzata è necessaria quando è impossibile propagare l'abbassamento di livello al cluster peer (ad esempio, in caso di errore del cluster o di interruzione della comunicazione). Ne risulterà uno scenario split brain tra i due peer e l'immagine non viene più sincronizzata fino all'emissione di un sottocomando resync.

8.5.3.5 Risincronizzazione forzata dell'immagine

Se viene rilevato un evento split brain dal daemon rbd-mirror, non verrà effettuato alcun tentativo di copia speculare dell'immagine interessata finché non viene corretto. Per riprendere la copia speculare di un'immagine, prima abbassare di livello l'immagine definita obsoleta, quindi richiedere una risincronizzazione all'immagine primaria. Per richiedere una risincronizzazione dell'immagine, specificare il sottocomando mirror image resync insieme al nome del pool e dell'immagine:

root # rbd mirror image resync image-pool/image-1

8.5.4 Stato della copia speculare

Lo stato di replica del cluster peer viene memorizzato per ciascuna immagine primaria in copia speculare. È possibile recuperare tale stato mediante i sottocomandi mirror image status e mirror pool status:

Per richiedere lo stato dell'immagine speculare, specificare il sottocomando mirror image status insieme al nome del pool e dell'immagine:

root # rbd mirror image status image-pool/image-1

Per richiedere lo stato di riepilogo del pool speculare, specificare il sottocomando mirror pool status insieme al nome del pool:

root # rbd mirror pool status image-pool
Suggerimento
Suggerimento:

Con l'aggiunta dell'opzione --verbose al sottocomando mirror pool status verranno generati ulteriori dettagli sullo stato di ciascuna immagine in copia speculare nel pool.

Stampa pagina