27 Ceph als Back-End für die QEMU KVM-Instanz #
Der häufigste Anwendungsfall von Ceph ist die Bereitstellung von Blockgeräte-Images für virtuelle Maschinen. Ein Benutzer erstellt beispielsweise ein Klon-Image („Golden Image“) mit Betriebssystem und der relevanten Software in einer idealen Konfiguration. Dann erstellt der Benutzer einen Snapshot des Image. Schließlich klont der Benutzer den Snapshot (normalerweise viele Male, weitere detaillierte Informationen finden Sie in Abschnitt 20.3, „Aufnahmen“). Die Fähigkeit zum Erstellen von Klonen aus Snapshots durch Kopien beim Schreibvorgang bedeutet, dass Ceph schnell Blockgeräte-Images für virtuelle Maschinen bereitstellen kann, weil der Client nicht bei jeder Erstellung einer neuen virtuellen Maschine ein gesamtes Image herunterladen muss.
Ceph-Blockgeräte können in virtuelle QEMU-Maschinen integriert werden. Weitere Informationen zu QEMU KVM finden Sie unter https://documentation.suse.com/sles/15-SP1/single-html/SLES-virtualization/#part-virt-qemu.
27.1 Installieren von qemu-block-rbd
#
Zur Verwendung von Ceph-Blockgeräten muss für QEMU der entsprechende Treiber installiert sein. Prüfen Sie, ob das Paket qemu-block-rbd
installiert ist und installieren Sie es, falls erforderlich:
#
zypper install qemu-block-rbd
27.2 Verwenden von QEMU #
In der QEMU-Kommandozeile müssen Sie den Poolnamen und den Image-Namen angeben. Sie können außerdem auch einen Snapshot-Namen angeben.
qemu-img command options \ rbd:pool-name/image-name@snapshot-name:option1=value1:option2=value2...
Beispielsweise könnte die Angabe der Optionen id und conf wie folgt aussehen:
qemu-img command options \
rbd:pool_name/image_name:id=glance:conf=/etc/ceph/ceph.conf
27.3 Erstellen von Images mit QEMU #
Sie können ein Blockgeräte-Image von QEMU aus erstellen. Sie müssen rbd
, den Poolnamen und den Namen des zu erstellenden Image angeben. Sie müssen auch die Größe des Image angeben.
qemu-img create -f raw rbd:pool-name/image-name size
Beispiel:
qemu-img create -f raw rbd:pool1/image1 10G Formatting 'rbd:pool1/image1', fmt=raw size=10737418240 nocow=off cluster_size=0
Das Datenformat raw
ist wirklich die einzige sinnvolle Formatoption für RBD. Eigentlich könnten Sie auch andere QEMU-unterstützte Formate verwenden wie qcow2
, doch das würde zusätzlichen Overhead bedeuten. Außerdem würde bei Live-Migration der virtuellen Maschine das Volume unsicher, wenn Caching aktiviert ist.
27.4 Ändern der Größe von Images mit QEMU #
Sie können die Größe eines Blockgeräte-Images von QEMU aus ändern. Sie müssen rbd
, den Poolnamen und den Namen des Image angeben, dessen Größe geändert werden soll. Sie müssen auch die Größe des Image angeben.
qemu-img resize rbd:pool-name/image-name size
Beispiel:
qemu-img resize rbd:pool1/image1 9G Image resized.
27.5 Abrufen von Image-Informationen mit QEMU #
Sie können die Informationen zum Blockgeräte-Image von QEMU aus abrufen. Sie müssen dazu rbd
, den Poolnamen und den Namen des Image angeben.
qemu-img info rbd:pool-name/image-name
Beispiel:
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 Ausführen von QEMU mit RBD #
QEMU kann auf ein Image als virtuelles Blockgerät direkt über librbd
zugreifen. Dadurch wird ein zusätzlicher Kontextschalter vermieden und Sie können vom RBD-Caching profitieren.
Zum Konvertieren der bestehenden Images von virtuellen Maschinen zu Ceph-Blockgeräte-Images kann qemu-img
verwendet werden. Wenn Sie beispielsweise über ein qcow2-Image verfügen, könnten Sie folgendes Kommando ausführen:
qemu-img convert -f qcow2 -O raw sles12.qcow2 rbd:pool1/sles12
Mit folgendem Kommando könnten Sie eine virtuelle Maschine von diesem Image booten:
#
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12
RBD Caching kann die Leistung erheblich verbessern. Die Cache-Optionen von QEMU steuern das librbd
-Caching:
#
qemu -m 1024 -drive format=rbd,file=rbd:pool1/sles12,cache=writeback
Weitere Informationen zum RBD-Caching finden Sie in Abschnitt 20.5, „Cache-Einstellungen“.
27.7 Aktivieren und Verwerfen und TRIM #
Ceph-Blockgeräte unterstützen die Verwerfen-Operation. Dies bedeutet, dass ein Gast TRIM-Anforderungen senden kann, damit ein Ceph-Blockgerät nicht genutzten Speicherplatz freigibt. Dies kann beim Gast durch Einhängen von XFS
mit der Verwerfen-Option aktiviert werden.
Damit dies für den Gast verfügbar ist, muss es explizit für das Blockgerät aktiviert sein. Dazu müssen Sie eine discard_granularity
angeben, die mit dem Laufwerk verknüpft ist:
#
qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12,id=drive1,if=none \
-device driver=ide-hd,drive=drive1,discard_granularity=512
Im obigen Beispiel wird ein IDE-Treiber verwendet. Der virtio-Treiber unterstützt keine Verwerfen-Vorgänge.
Wenn Sie libvirt
verwenden, bearbeiten Sie die Konfigurationsdatei Ihrer libvirt-Domäne mit virsh edit
, um den Wert xmlns:qemu
hinzuzufügen. Fügen Sie dann einen qemu:commandline block
als untergeordnetes Element dieser Domäne hinzu. Im folgenden Beispiel sehen Sie, wie zwei Geräte mit qemu id=
auf verschiedene discard_granularity
-Werte festgelegt werden.
<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 Festlegen von QEMU-Cache-Optionen #
Die Cache-Optionen von QEMU entsprechen den folgenden Ceph RBD-Cache-Einstellungen.
Writeback:
rbd_cache = true
Writethrough:
rbd_cache = true rbd_cache_max_dirty = 0
kein Befehl:
rbd_cache = false
Die Cache-Einstellungen von QEMU überschreiben die Standardeinstellungen von Ceph (Einstellungen, die nicht explizit in der Ceph-Konfigurationsdatei festgelegt sind). Wenn Sie explizit die RBD Cache-Einstellungen in Ihrer Ceph-Konfigurationsdatei festlegen (siehe Abschnitt 20.5, „Cache-Einstellungen“), überschreiben Ihre Ceph-Einstellungen die QEMU-Cache-Einstellungen. Wenn Sie die Cache-Einstellungen in der QEMU-Kommandozeile festlegen, überschreiben die Einstellungen der QEMU-Kommandozeile die Einstellungen der Ceph-Konfigurationsdatei.