27 Ceph come back-end per l'istanza QEMU KVM #
Il caso di utilizzo Ceph più frequente riguarda l'inserimento di immagini di dispositivi di blocco nelle macchine virtuali. Ad esempio, un utente può creare un'immagine "golden" con un sistema operativo e qualsiasi software pertinente in una configurazione ideale. L'utente, quindi, effettua uno snapshot dell'immagine. Infine, l'utente clona lo snapshot (di solito molte volte, vedere Sezione 20.3, «Snapshot» per ulteriori informazioni). La capacità di creare cloni copia su scrittura di uno snapshot significa che Ceph è in grado di fornire rapidamente immagini di dispositivi di blocco alle macchine virtuali, perché il client non deve effettuare il download di un'immagine intera ogni volta che esegue lo spin-up di una nuova macchina virtuale.
I dispositivi di blocco Ceph possono essere integrati con le macchine virtuali QEMU. Per ulteriori informazioni su QEMU KVM, vedere https://documentation.suse.com/sles/15-SP2/html/SLES-all/part-virt-qemu.html (in lingua inglese).
27.1 Installazione di qemu-block-rbd
#
Per utilizzare i dispositivi di blocco Ceph, è necessario che in QEMU sia installato il driver appropriato. Verificare che il pacchetto qemu-block-rbd
sia installato e installarlo se necessario:
root #
zypper install qemu-block-rbd
27.2 Uso di QEMU #
Nella riga di comando QEMU ci si aspetta che venga specificato il nome pool e il nome immagine. È anche possibile specificare il nome di uno snapshot.
qemu-img command options \ rbd:pool-name/image-name@snapshot-name:option1=value1:option2=value2...
Ad esempio, se si specificano le opzioni id e conf si potrebbe ottenere:
qemu-img command options \
rbd:pool_name/image_name:id=glance:conf=/etc/ceph/ceph.conf
27.3 Creazione di immagini con QEMU #
È possibile creare un'immagine del dispositivo di blocco da QEMU. Specificare rbd
, il nome pool e il nome dell'immagine che si desidera creare. Si devono specificare anche le dimensioni dell'immagine.
qemu-img create -f raw rbd:pool-name/image-name size
Esempio:
qemu-img create -f raw rbd:pool1/image1 10G Formatting 'rbd:pool1/image1', fmt=raw size=10737418240 nocow=off cluster_size=0
Il formato dati raw
è effettivamente la sola opzione di formato sensibile da utilizzare con RBD. Tecnicamente si potrebbero utilizzare altri formati supportati da QEMU, come qcow2
, ma in tal modo si aggiungerebbe ulteriore overhead e il volume non sarebbe sicuro per la migrazione in tempo reale della macchina virtuale quando la memorizzazione nella cache è abilitata.
27.4 Ridimensionamento delle immagini con QEMU #
È possibile ridimensionare un'immagine del dispositivo di blocco da QEMU. Specificare rbd
, il nome pool e il nome dell'immagine che si desidera ridimensionare. Si devono specificare anche le dimensioni dell'immagine.
qemu-img resize rbd:pool-name/image-name size
Esempio:
qemu-img resize rbd:pool1/image1 9G Image resized.
27.5 Recupero delle informazioni sull'immagine con QEMU #
È possibile recuperare informazioni sull'immagine del dispositivo di blocco da QEMU. Specificare rbd
, il nome pool e il nome dell'immagine.
qemu-img info rbd:pool-name/image-name
Esempio:
qemu-img info rbd:pool1/image1 image: rbd:pool1/image1 file format: raw virtual size: 9.0G (9663676416 bytes) disk size: unavailable cluster_size: 4194304
27.6 Esecuzione di QEMU con RBD #
Con QEMU è possibile accedere a un'immagine come un dispositivo di blocco virtuale direttamente tramite librbd
. In tal modo si evita un ulteriore passaggio contestuale ed è possibile sfruttare la memorizzazione nella cache RBD.
È possibile utilizzare qemu-img
per convertire le immagini della macchina virtuale esistenti in immagini del dispositivo di blocco Ceph. Ad esempio, se si dispone di un'immagine qcow2, si potrebbe eseguire:
qemu-img convert -f qcow2 -O raw sles12.qcow2 rbd:pool1/sles12
Per eseguire un avvio della macchina virtuale da tale immagine, si potrebbe eseguire:
root #
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12
La memorizzazione nella cache RBD può migliorare le prestazioni in modo significativo. Le opzioni di cache QEMU controllano la memorizzazione nella cache librbd
caching:
root #
qemu -m 1024 -drive format=rbd,file=rbd:pool1/sles12,cache=writeback
Per ulteriori informazioni sulla memorizzazione nella cache RBD, fare riferimento alla Sezione 20.5, «Impostazioni della cache».
27.7 Abilitazione dell'operazione di scarto e TRIM #
I dispositivi di blocco Ceph supportano l'operazione di scarto. Vale a dire che un guest può inviare richieste TRIM per consentire a un dispositivo di blocco Ceph di recuperare spazio inutilizzato. Tale operazione può essere abilitata nel guest tramite il montaggio di XFS
con l'opzione di scarto.
Affinché questa sia disponibile nel guest, è necessario abilitarla esplicitamente per il dispositivo di blocco. A tal fine, specificare una discard_granularity
associata all'unità:
root #
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12,id=drive1,if=none \
-device driver=ide-hd,drive=drive1,discard_granularity=512
Nell'esempio di cui sopra è utilizzato il driver IDE. Il driver virtio non supporta l'opzione di scarto.
Se si utilizza libvirt
, modificare il file di configurazione del dominio libvirt utilizzando virsh edit
per includere il valore xmlns:qemu
. Aggiungere quindi un qemu:commandline block
come secondario per tale dominio. Nell'esempio seguente è illustrato come impostare due dispositivi con qemu id=
su valori discard_granularity
diversi.
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <qemu:commandline> <qemu:arg value='-set'/> <qemu:arg value='block.scsi0-0-0.discard_granularity=4096'/> <qemu:arg value='-set'/> <qemu:arg value='block.scsi0-0-1.discard_granularity=65536'/> </qemu:commandline> </domain>
27.8 Impostazione delle opzioni cache QEMU #
Le opzioni cache QEMU corrispondono alle seguenti impostazioni cache RBD Ceph.
Writeback:
rbd_cache = true
Write-through:
rbd_cache = true rbd_cache_max_dirty = 0
Nessuno:
rbd_cache = false
Le impostazioni cache QEMU sostituiscono le impostazioni di default Ceph (impostazioni non impostate esplicitamente nel file di configurazione Ceph). Se si impostano esplicitamente le impostazioni cache RBD nel file di configurazione Ceph, (fare riferimento alla Sezione 20.5, «Impostazioni della cache»), le impostazioni Ceph sostituiscono le impostazioni della cache QEMU. Se si configurano le impostazioni cache nella riga di comando QEMU, le rispettive impostazioni sostituiscono quelle del file di configurazione Ceph.