Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
Bezieht sich auf SUSE Enterprise Storage 5

8 RADOS Block Device

Ein Block ist eine Folge von Byte, beispielsweise ein 512-Byte-Datenblock. Blockbasierte Speicherschnittstellen werden am häufigsten zum Speichern von Daten auf rotierenden Medien wie Festplatten, CDs, Disketten verwendet. Angesichts der Omnipräsenz von Blockgeräteschnittstellen ist ein virtuelles Blockgerät für ein Massenspeichersystem wie Ceph hervorragend zur Interaktion geeignet.

Ceph-Blockgeräte lassen die gemeinsame Nutzung physischer Ressourcen zu und ihre Größe kann geändert werden. Sie speichern Daten auf mehreren OSDs in einem Ceph Cluster verteilt. Ceph-Blockgeräte nutzen die RADOS-Funktionen wie Snapshotting, Reproduktion und Konsistenz. Ceph's RADOS Block Devices (RBD) interagieren mit OSDs über Kernel-Module oder die librbd-Bibliothek.

RADOS-Protokoll
Abbildung 8.1: RADOS-Protokoll

Die Blockgeräte von Ceph sind sehr leistungsfähig und unbegrenzt auf Kernel-Module skalierbar. Sie unterstützen Virtualisierungslösungen wie QEMU oder Cloud-basierte Rechnersysteme wie OpenStack, die auf libvirt basieren. Sie können Object Gateway, CephFS und RADOS Block Devices gleichzeitig am selben Cluster ausführen.

8.1 Kommandos für Blockgeräte

Mit dem Kommando rbd werden Blockgeräte-Images erstellt, aufgelistet, intern geprüft und entfernt. Sie können es beispielsweise auch zum Klonen von Images, zum Erstellen von Snapshots, für ein Rollback eines Image zu einem Snapshot oder zum Anzeigen eines Snapshots verwenden.

Tipp
Tipp: Zugriff auf einen Cluster

Für RADOS Block Device-Kommandos benötigen Sie Zugriff auf einen aktiven Ceph Cluster.

8.1.1 Erstellen eines Blockgeräte-Image

Bevor Sie ein Blockgerät zu einem Node hinzufügen, müssen Sie zunächst ein Image dafür im Cluster erstellen. Führen Sie zum Erstellen eines Blockgeräte-Image folgendes Kommando aus:

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

Führen Sie folgendes Kommando aus, wenn Sie beispielsweise ein 1 GB Image namens "bar" erstellen möchten, in dem Informationen in einem Pool namens "swimmingpool" gespeichert werden:

root # rbd create --size 1024 swimmingpool/bar
Tipp
Tipp: Standard-Pool

Wenn Sie beim Erstellen eines Image keinen Pool angeben, wird es im Standard-Pool "rbd" gespeichert.

Anmerkung
Anmerkung: Zunächst den Pool erstellen

Sie müssen zunächst einen Pool erstellen, bevor Sie diesen als Ursprung angeben können. Weitere Einzelheiten finden Sie in Kapitel 7, Verwalten von Speicher-Pools.

8.1.2 Erstellen eines Blockgeräte-Image in einem Erasure Coded Pool

Ab SUSE Enterprise Storage 5 ist es möglich, Daten eines Blockgeräte-Image in Erasure Coded Pools zu speichern. Nur der Datenteil ("data") eines RBD-Image kann in einem Erasure Coded Pool gespeichert werden. Darüber hinaus muss im Erasure Coded Pool die Flagge "overwrite" auf true festgelegt sein. Es ist nur möglich, diese Flagge auf true festzulegen, wenn alle OSDs BlueStore verwenden.

Ein Erasure Coded Pool kann keine Image-Metadaten enthalten. Die Metadaten können entweder im Standard-Pool "rbd" gespeichert werden oder im Pool, den der Benutzer explizit mit dem Parameter --pool= im Kommando rbd create angibt.

Anmerkung
Anmerkung: BlueStore erforderlich

Alle Nodes benötigen BlueStore, um Erasure Coded Pools für Blockgeräte-Images zu verwenden.

Führen Sie zum Erstellen eines RBD-Image in einem Erasure Coded Pool die folgenden Schritte aus:

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 Auflisten von Blockgeräte-Images

Führen Sie folgendes Kommando aus, um Blockgeräte im "rbd"-Pool aufzulisten ("rbd" ist der Name des Standard-Pools):

root # rbd ls

Führen Sie folgendes Kommando aus, um Blockgeräte in einem Pool namens "swimmingpool" aufzulisten:

root # rbd ls swimmingpool

8.1.4 Abrufen von Image-Informationen

Führen Sie folgendes Kommando aus, um Informationen von einem Image "bar" in einem Pool namens "swimmingpool" abzurufen:

root # rbd info swimmingpool/bar

8.1.5 Ändern der Größe eines Blockgeräte-Image

RADOS Block Device-Images werden schlank bereitgestellt, was bedeutet, dass Sie erst physischen Speicherplatz belegen, wenn Sie damit beginnen, Daten darin zu speichern. Ihre Kapazität ist jedoch auf den Wert beschränkt, den Sie mit der Option --size festlegen. Führen Sie folgendes Kommando aus, wenn Sie die maximale Größe des Image erhöhen (oder verringern) möchten:

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

8.1.6 Entfernen eines Blockgeräte-Image

Führen Sie zum Entfernen eines Blockgeräts, das einem Image "bar" in einem Pool namens "swimmingpool" entspricht, folgendes Kommando aus:

root # rbd rm swimmingpool/bar

8.2 Einhängen und Aushängen von RBD-Images

Nach Erstellung eines RADOS Block Device können Sie es formatieren, es für den Dateiaustausch einhängen und danach wieder aushängen.

  1. Stellen Sie sicher, dass Ihr Ceph Cluster einen Pool mit dem Festplatten-Image enthält, das eingehängt werden soll. Nehmen wir an, der Name des Pools lautet mypool und das Image ist myimage.

    rbd list mypool
  2. Ordnen Sie das Image einem neuen Blockgerät zu.

    root # rbd map --pool mypool myimage
    Tipp
    Tipp: Benutzername und -authentifizierung

    Geben Sie einen Benutzernamen mit --id user-name an. Wenn Sie die cephx-Authentifizierung nutzen, müssen Sie außerdem ein Geheimnis angeben. Es kann von einem Schlüsselbund stammen oder aus einer Datei, die das Geheimnis enthält:

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

    oder

    root # rbd map --pool rbd myimage --id admin --keyfile /path/to/file
  3. Listen Sie alle zugeordneten Geräte auf:

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

    Das Gerät, mit dem wir arbeiten möchten, heißt /dev/rbd0.

  4. Erstellen Sie am Gerät namens /dev/rbd0 ein XFS-Dateisystem.

    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. Hängen Sie das Gerät ein und prüfen Sie, ob es korrekt eingehängt wurde. Ersetzen Sie /mnt durch Ihren Einhängepunkt.

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

    Nun können Sie Daten auf das und vom Gerät verschieben als wäre es ein lokales Verzeichnis.

    Tipp
    Tipp: Vergrößern des RBD-Geräts

    Wenn sich herausstellt, dass die Größe des RBD-Geräts nicht mehr ausreicht, lässt es sich leicht vergrößern.

    1. Vergrößern Sie das RBD-Image, beispielsweise auf 10 GB

      root # rbd resize --size 10000 mypool/myimage
       Resizing image: 100% complete...done.
    2. Erweitern Sie das Dateisystem, bis es die neue Größe des Geräts ausfüllt.

      root # xfs_growfs /mnt
       [...]
       data blocks changed from 2097152 to 2560000
  6. Wenn Sie Ihre Arbeit an dem Gerät beenden, können Sie es aushängen.

    root # unmount /mnt
Tipp
Tipp: Manuelles Einhängen und Aushängen

Da die manuelle Zuordnung und das Einhängen von RBD-Images nach dem Start sowie das Aushängen und Aufheben der Zuordnung vor dem Herunterfahren sehr mühsam sein kann, wird ein Skript rbdmap und eine systemd-Einheit zur Verfügung gestellt. Weitere Informationen finden Sie in Abschnitt 8.4, „rbdmap: Zuordnen von RBD-Geräten beim Booten“.

8.3 Blockgeräte-Snapshots

Ein RBD-Image ist eine Snapshot eines RADOS Block Device-Image. Mit Snapshots behalten Sie den Verlauf des Zustands eines Image bei: Ceph unterstützt auch ein Snapshot Layering zum schnellen und einfachen Klonen von VM-Images. Ceph unterstützt Blockgeräte-Snapshots mit dem Kommando rbd sowie viele übergeordnete Schnittstellen wie QEMU, libvirt, OpenStack und CloudStack.

Anmerkung
Anmerkung

Stoppen Sie Eingabe- und Ausgabeoperationen, bevor Sie einen Snapshot von einem Image erstellen. Wenn das Image ein Dateisystem enthält, muss sich das Dateisystem vor dem Erstellen eines Snapshots in einem konsistenten Zustand befinden.

8.3.1 Hinweise zu Cephx

Wenn cephx aktiviert ist (weitere Informationen finden Sie unter http://ceph.com/docs/master/rados/configuration/auth-config-ref/), dann müssen Sie einen Benutzernamen oder eine ID und einen Pfad zum Schlüsselbund mit dem entsprechenden Schlüssel für den Benutzer angeben. Weitere detaillierte Informationen finden Sie unter Benutzerverwaltung. Es ist auch möglich, die Umgebungsvariable CEPH_ARGS hinzuzufügen, um die erneute Eingabe der folgenden Parameter zu verhindern.

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

Beispiel:

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

Fügen Sie den Benutzer und das Geheimnis zur Umgebungsvariable CEPH_ARGS hinzu, damit Sie diese Informationen nicht jedes Mal neu eingeben müssen.

8.3.2 Allgemeine Informationen zu Snapshots

Das folgende Verfahren zeigt, wie Snapshots mit dem Kommando rbd in der Kommandozeile erstellt, aufgelistet und entfernt werden.

8.3.2.1 Erstellen von Snapshots

Geben Sie zum Erstellen eines Snapshots mit rbd die Option snap create, den Pool-Namen und den Image-Namen an.

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

Beispiel:

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

8.3.2.2 Auflisten von Snapshots

Geben Sie zum Auflisten von Snapshots eines Image den Pool-Namen und den Image-Namen an.

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

Beispiel:

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

8.3.2.3 Snapshot Rollbacks

Geben Sie zur Durchführung eines Rollbacks zu einem Snapshot mit rbd die Option snap rollback, den Pool-Namen, den Image-Namen und den Namen des Snapshots an.

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

Beispiel:

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

Bei einem Rollback eines Image zu einem Snapshot wird die aktuelle Version des Image mit den Daten aus einem Snapshot überschrieben. Ein Rollback dauert umso länger je größer das Image ist. Einen Snapshot zu klonen ist schneller als ein Rollback eines Image zu einem Snapshot durchzuführen und ist die bevorzugte Methode, wenn zu einem früheren Zustand zurückgekehrt werden soll.

8.3.2.4 Löschen eines Snapshots

Geben Sie zum Löschen eines Snapshots mit rbd die Option snap rm, den Pool-Namen, den Image-Namen und den Benutzernamen an.

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

Beispiel:

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

Ceph OSDs löschen Daten asynchron. Daher wird beim Löschen eines Snapshots nicht sofort Festplattenspeicherplatz frei.

8.3.2.5 Entfernen aller Snapshots

Geben Sie zum Entfernen aller Snapshots für eine Image mit rbd die Option snap purge und den Image-Namen an.

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

Beispiel:

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

8.3.3 Layering

Ceph unterstützt die Möglichkeit zur Erstellung vieler COW (copy-on-write)-Klone eines Blockgeräte-Snapshots. Durch ein Snapshot Layering können Ceph-Blockgeräte-Clients Images sehr schnell erstellen. Beispielsweise könnten Sie ein Blockgeräte-Image mit einem darauf geschriebenen Linux VM und danach einen Snapshot von diesem Image erstellen, dann den Snapshot schützen und beliebig viele COW-Klone erstellen. Ein Snapshot ist schreibgeschützt. Daher vereinfacht ein Snapshot die Semantik und ermöglicht es, Klone schnell zu erstellen.

Anmerkung
Anmerkung

Die im folgenden Kommandozeilenbeispiel genannten Elemente "parent" (übergeordnet) und "child" (untergeordnet) beziehen sich auf einen Ceph-Blockgeräte-Snapshot (parent) und das entsprechende Image, das vom Snapshot geklont wurde (child).

Jedes geklonte Image (child) speichert einen Verweis auf das übergeordnete Image (parent), wodurch das geklonte Image den übergeordneten Snapshot (parent) öffnen und lesen kann.

Ein COW-Klon eines Snapshots verhält sich exakt genauso wie jedes andere Ceph-Blockgeräte-Image. Geklonte Images können gelesen, geschrieben und geklont werden und ihre Größe lässt sich ändern. Geklonte Images haben keine besonderen Einschränkungen. Der COW-Klon eines Snapshots verweist jedoch auf den Snapshot. Daher müssen Sie den Snapshot schützen, bevor Sie ihn klonen.

Anmerkung
Anmerkung

Ceph unterstützt nur das Klonen von Format 2-Images (was bedeutet, dass Sie mit rbd create --image-format 2 erstellt wurden).

8.3.3.1 Erste Schritte mit Layering

Ceph-Blockgeräte-Layering ist ein einfacher Prozess. Sie benötigen ein Image. Sie müssen einen Snapshot vom Image erstellen. Sie müssen den Snapshot schützen. Nach Ausführung dieser Schritte beginnen Sie mit dem Klonen des Snapshots.

Das geklonte Image verweist auf den übergeordneten Snapshot und enthält Pool-ID, Image-ID und Snapshot-ID. Durch die enthaltene Pool-ID können Snapshots von einem Pool zu Images in einem anderen Pool geklont werden.

  • Image-Vorlage: Bei einem üblichen Anwendungsfall für Blockgeräte-Layering wird ein Master Image erstellt und ein Snapshot, der als Vorlage für Klone dient. Beispielsweise erstellt ein Benutzer ein Image für eine Linux-Distribution (zum Beispiel SUSE Linux Enterprise Server) und dann einen Snapshot dafür. Der Benutzer aktualisiert möglicherweise das Image regelmäßig und erstellt einen neuen Snapshot (zum Beispiel zypper ref && zypper patch gefolgt von rbd snap create). So wie sich das Image weiterentwickelt, kann der Benutzer beliebige einzelne Snapshots klonen.

  • Erweiterte Vorlage: Bei einem anspruchsvolleren Anwendungsfall wird ein Vorlagen-Image erweitert, das mehr Informationen als eine Basis-Image enthält. Beispielsweise könnte ein Benutzer ein Image (eine VM-Vorlage) klonen und weitere Software installieren (beispielsweise eine Datenbank, ein Content Management-System oder ein Analysesystem) und dann einen Snapshot des erweiterten Image erstellen, das genauso wie das Basis-Image aktualisiert wird.

  • Vorlagen-Pool: Eine Methode des Blockgeräte-Layerings ist die Erstellung eines Pools, der Master-Images enthält, die als Vorlagen fungieren, sowie Snapshots dieser Vorlagen. Sie könnten dann Nur-Lesen-Berechtigungen an Benutzer verteilen. Die Benutzer haben dadurch die Möglichkeit, die Snapshots zu klonen, dürfen jedoch nicht im Pool schreiben oder Vorgänge ausführen.

  • Image-Migration/Wiederherstellung: Eine Methode des Blockgeräte-Layerings ist die Migration oder Wiederherstellung von Daten von einem Pool in einen anderen Pool.

8.3.3.2 Schützen von Snapshots

Klone greifen auf die übergeordneten Snapshots zu. Alle Klone würden zerstört werden, wenn ein Benutzer versehentlich den übergeordneten Snapshot löscht. Sie müssen den Snapshot schützen, bevor Sie ihn klonen, um Datenverlust zu verhindern.

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

Beispiel:

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

Geschützte Snapshots können nicht gelöscht werden.

8.3.3.3 Klonen von Snapshots

Zum Klonen eines Snapshots müssen Sie den übergeordneten Pool, das Image, den Snapshot, den untergeordneten Pool und den Image-Namen angeben. Der Snapshot muss vor dem Klonen geschützt werden.

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

Beispiel:

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

Ein Snapshot kann von einem Pool zu einem Image in einem anderen Pool geklont werden. Sie könnten beispielsweise schreibgeschützte Images und Snapshots als Vorlagen in einem Pool beibehalten und beschreibbare Klone in einem anderen Pool.

8.3.3.4 Aufheben des Schutzes von Snapshots

Vor dem Löschen eines Snapshots muss zunächst dessen Schutz aufgehoben werden. Außerdem dürfen Sie keine Snapshots löschen, die Verweise von Klonen enthalten. Sie müssen jeden Klon eines Snapshots vereinfachen, bevor Sie den Snapshot löschen.

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

Beispiel:

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

8.3.3.5 Auflisten der untergeordneten Klone von Snapshots

Führen Sie zum Auflisten der untergeordneten Klone eines Snapshots folgendes Kommando aus:

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

Beispiel:

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

8.3.3.6 Vereinfachen eines geklonten Image

Geklonte Images behalten einen Verweis auf den übergeordneten Snapshot bei. Wenn Sie den Verweis vom untergeordneten Klon zum übergeordneten Snapshot entfernen, wird das Image tatsächlich "vereinfacht", indem die Informationen vom Snapshot zum Klon kopiert werden. Die Vereinfachung eines Klons dauert umso länger je größer der Snapshot ist. Zum Löschen eines Snapshots müssen Sie zunächst die untergeordneten Images vereinfachen.

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

Beispiel:

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

Da ein vereinfachtes Image alle Informationen des Snapshots enthält, belegt ein vereinfachtes Image mehr Speicherplatz als ein Layering-Klon.

8.4 rbdmap: Zuordnen von RBD-Geräten beim Booten

rbdmap ist ein Shell-Skript, das die Vorgänge rbd map und rbd unmap an einem oder mehreren RADOS Block Device-Images automatisiert. Obwohl Sie das Skript jederzeit manuell ausführen können, ist es üblich, es automatisch zuzuordnen und die RBD-Images beim Booten einzuhängen (und sie beim Herunterfahren auszuhängen und die Zuordnung aufzuheben). Dieser Vorgang wird vom Init-System ausgelöst. Zu diesem Zweck ist eine Datei für die systemd-Einheit (rbdmap.service) im Paket ceph-common enthalten.

Das Skript nimmt ein einzelnes Argument, entweder map oder unmap. In beiden Fällen analysiert das Skript eine Konfigurationsdatei. Die Standardeinstellung /etc/ceph/rbdmap kann mit der Umgebungsvariable RBDMAPFILE überschrieben werden. Jede Zeile der Konfigurationsdatei entspricht einem RBD-Image, das zugeordnet oder dessen Zuordnung aufgehoben werden soll.

Die Konfigurationsdatei hat das folgende Format:

image_specification rbd_options
image_specification

Pfad zu einem Image in einem Pool. Geben Sie diesen als pool_name/image_name an. Wenn Sie pool_name weglassen, wird der Standardwert "rbd" angenommen.

rbd_options

Eine optionale Liste der Parameter, die an das zugrundeliegende Kommando rbd map weitergegeben werden sollen. Diese Parameter und ihre Werte sollten als durch Komma getrennte Zeichenkette angegeben werden, wie zum Beispiel:

PARAM1=VAL1,PARAM2=VAL2,...

Im Beispiel führt das Skript rbdmap folgendes Kommando aus:

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

Wenn das Skript als rbdmap map ausgeführt wird, analysiert es die Konfigurationsdatei und versucht, für jedes angegebenen RBD-Image zunächst das Image zuzuordnen (mit dem Kommando the rbd map) und dann das Image einzuhängen.

Wenn es als rbdmap unmap ausgeführt wird, werden die in der Konfigurationsdatei aufgelisteten Images ausgehängt und ihre Zuordnungen werden aufgehoben.

rbdmap unmap-all versucht, alle aktuell zugeordneten RBD-Images auszuhängen und danach deren Zuordnungen aufzuheben, unabhängig davon, ob sie in der Konfigurationsdatei aufgelistet sind.

Bei erfolgreicher Ausführung ordnet der Vorgang "rbd map" das Image einem /dev/rbdX-Gerät zu. Zu diesem Zeitpunkt wird eine udev-Regel ausgelöst, um einen symbolischen Link zu einem Geräteanzeigenamen /dev/rbd/pool_name/image_name zu erstellen, der auf das reale zugeordnete Gerät zeigt.

Damit das Einhängen und Aushängen erfolgreich ausgeführt wird, muss der Anzeigename des Geräts einen entsprechenden Eintrag in /etc/fstab haben. Geben Sie beim Schreiben von /etc/fstab-Einträgen für RBD-Images die Einhängeoption "noauto" (oder "nofail") an. Dadurch wird verhindert, dass das Init-System das Gerät zu früh einhängt, also noch bevor das betreffende Gerät überhaupt vorhanden ist, weil rbdmap.service normalerweise ziemlich spät in der Boot-Sequenz ausgelöst wird.

Eine vollständige Liste der rbd-Optionen finden Sie auf der rbd-Handbuchseite (man 8 rbd).

Beispiele zur Anwendung von rbdmap finden Sie auf der rbdmap-Handbuchseite (man 8 rbdmap).

8.5 Spiegeln des RADOS Block Device

RBD-Images können asynchron zwischen zwei Ceph Clustern gespiegelt werden. Dazu wird die Funktion des RBD-Journaling-Image verwendet, um die absturzkonsistente Reproduktion zwischen Clustern sicherzustellen. Die Spiegelung wird pro Pool in Peer-Clustern konfiguriert. Sie kann so konfiguriert werden, dass alle Images in einem Pool oder nur eine bestimmte Teilmenge der Images automatisch gespiegelt werden. Die Spiegelung wird mit dem rbd-Kommando ausgeführt. Der rbd-mirror Daemon ist dafür zuständig, Image-Updates aus dem Remote-Peer-Cluster zu entnehmen und diese auf das Image im lokalen Cluster anzuwenden.

Wichtig
Wichtig: rbd-mirror Daemon

Für die RBD-Spiegelung benötigen Sie zwei Ceph Cluster. Auf jedem von beiden muss der rbd-mirror Daemon ausgeführt werden.

8.5.1 rbd-mirror Daemon

Die beiden rbd-mirror Daemons sind dafür zuständig, Image-Protokolle am Remote-Peer-Cluster zu beobachten und die Protokollereignisse im Vergleich zum lokalen Cluster wiederzugeben. Die Journaling-Funktion für RBD-Images zeichnet alle Änderungen am Image in der Reihenfolge auf wie sie vorgenommen werden. Dadurch wird sichergestellt, dass ein absturzkonsistenter Spiegel des Remote-Image lokal verfügbar ist.

Der rbd-mirror Daemon ist im Paket rbd-mirror enthalten. Installieren, aktivieren und starten Sie ihn in einem der Cluster Nodes:

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
Wichtig
Wichtig

Jeder rbd-mirror Daemon muss gleichzeitig eine Verbindung zu beiden Clustern herstellen können.

8.5.2 Pool-Konfiguration

Die folgenden Verfahren zeigen, wie einfache Verwaltungsaufgaben zum Konfigurieren der Spiegelung mit dem rbd-Kommando ausgeführt werden. Die Spiegelung wird pro Pool in den Ceph Clustern konfiguriert.

Sie müssen die Schritte zur Pool-Konfiguration an beiden Peer Clustern ausführen. Bei diesen Verfahren wird der Einfachheit halber angenommen, dass von einem einzelnen Host aus auf zwei Cluster ("local" und "remote") zugegriffen werden kann.

Weitere detaillierte Informationen zum Herstellen einer Verbindung zu verschiedenen Ceph Clustern finden Sie auf der rbd-Handbuchseite (man 8 rbd).

Tipp
Tipp: Mehrere Cluster

Der Cluster-Name in den folgenden Beispielen entspricht einer Ceph-Konfigurationsdatei des selben Namens /etc/ceph/remote.conf. In der Dokumentation zu ceph-conf finden Sie weitere Informationen zur Konfiguration mehrerer Cluster.

8.5.2.1 Aktivieren der Spiegelung

Geben Sie zum Aktivieren der Spiegelung in einem Pool das Unterkommando mirror pool enable, den Pool-Namen und den Spiegelungsmodus an. Der Spiegelungsmodus kann entweder "pool" oder "image" lauten:

pool

Alle Images im Pool mit aktivierter Journaling-Funktion werden gespiegelt.

image

Die Spiegelung muss auf jedem Image explizit aktiviert werden. Weitere Informationen finden Sie in Abschnitt 8.5.3.2, „Aktivieren der Image-Spiegelung“.

Beispiel:

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

8.5.2.2 Deaktivieren der Spiegelung

Geben Sie zum Deaktivieren der Spiegelung in einem Pool das Unterkommando mirror pool disable und den Pool-Namen an. Wenn die Spiegelung auf diese Weise in einem Pool deaktiviert wird, dann wird sie auch in anderen Images (im Pool) deaktiviert, für die eine Spiegelung explizit aktiviert wurde.

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

8.5.2.3 Hinzufügen des Cluster Peers

Damit der rbd-mirror Daemon seinen Peer Cluster ermitteln kann, muss der Peer im Pool registriert sein. Geben Sie zum Hinzufügen des Peer Clusters für die Spiegelung das Unterkommando mirror pool peer add, den Pool-Namen und eine Cluster-Spezifikation an:

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 Entfernen des Cluster Peers

Geben Sie zum Entfernen eines Peer Clusters für die Spiegelung das Unterkommando mirror pool peer remove, den Pool-Namen und die Peer-UUID (verfügbar über das Kommando rbd mirror pool info) an:

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 Image-Konfiguration

Im Gegensatz zur Pool-Konfiguration muss die Image-Konfiguration nur für einen einzigen für die Spiegelung vorgesehenen Peer Ceph Cluster durchgeführt werden.

Gespiegelte RBD-Images werden entweder als primär oder nicht primär ausgewiesen. Dies ist eine Eigenschaft des Image und nicht des Pools. Als nicht primär ausgewiesene Images können nicht bearbeitet werden.

Images werden automatisch zu primären Images hochgestuft, wenn die Spiegelung zuvor für ein Image aktiviert wird (entweder implizit mit dem Pool-Spiegelungsmodus "pool" und durch Aktivieren der Journaling-Funktion für das Image oder explizit (Informationen hierzu finden Sie in Abschnitt 8.5.3.2, „Aktivieren der Image-Spiegelung“) mit dem rbd-Kommando).

8.5.3.1 Aktivieren des Supports für Image Journaling

Bei der RBD-Spiegelung wird immer die RBD Journaling-Funktion verwendet, um sicherzustellen, dass das reproduzierte Image immer absturzkonsistent bleibt. Die Journaling-Funktion muss aktiviert werden, bevor ein Image zu einem Peer Cluster gespiegelt werden kann. Die Funktion kann bei der Image-Erstellung aktiviert werden, indem die Option --image-feature exclusive-lock,journaling für das rbd-Kommando angegeben wird.

Alternativ kann die Journaling-Funktion für bereits vorhandene RBD-Images dynamisch aktiviert werden. Geben Sie zum Aktivieren des Journaling den Unterbefehl feature enable, den Pool-Namen, den Image-Namen und den Namen der Funktion an:

root # rbd --cluster local feature enable image-pool/image-1 journaling
Anmerkung
Anmerkung: Abhängigkeit der Option

Die Funktion journaling hängt von der Funktion exclusive-lock ab. Wenn die Funktion exclusive-lock nicht bereits aktiviert ist, müssen Sie diese vor Aktivierung der Funktion journaling aktivieren.

Tipp
Tipp: Journaling an allen neuen Images

Zum standardmäßigen Aktivieren des Journaling an allen neuen Images fügen Sie die folgende Zeile zur Ihrer Ceph-Konfigurationsdatei hinzu:

rbd default features = 125

8.5.3.2 Aktivieren der Image-Spiegelung

Wenn eine Spiegelung für den Pool eines Image im Modus "image" konfiguriert ist, muss die Spiegelung für jedes Image im Pool explizit aktiviert werden. Geben Sie zum Aktivieren der Spiegelung für ein bestimmtes Image das Unterkommando mirror image enable zusammen mit dem Pool- und Image-Namen an:

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

8.5.3.3 Deaktivieren der Image-Spiegelung

Geben Sie zum Deaktivieren der Spiegelung für ein bestimmtes Image das Unterkommando mirror image disable zusammen mit dem Pool- und Image-Namen an:

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

8.5.3.4 Hochstufen und Herabstufen eines Image

In einem Failover-Szenario, in dem die primäre Bezeichnung zum Image im Peer Cluster verschoben werden muss, müssen Sie den Zugriff auf das primäre Image stoppen, das aktuelle primäre Image herabstufen, das neue primäre Image hochstufen und den Zugriff auf das Image am alternativen Cluster wieder aufnehmen.

Geben Sie zum Herabstufen eines bestimmten Image zu "nicht primär" das Unterkommando mirror image demote zusammen mit dem Pool- und Image-Namen an:

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

Geben Sie zum Herabstufen aller primären Images in einem Pool zu "nicht primär" das Unterkommando mirror pool demote zusammen mit dem Pool-Namen an:

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

Geben Sie zum Hochstufen eines bestimmten Image zu "primär" das Unterkommando mirror image promote zusammen mit dem Pool- und Image-Namen an:

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

Geben Sie zum Hochstufen aller primären Images in einem Pool zu "primär" das Unterkommando mirror pool promote zusammen mit dem Pool-Namen an:

root # rbd --cluster local mirror pool promote image-pool
Tipp
Tipp: Aufteilen der E/A-Last

Da der Status "primär" oder "nicht primär" pro Image gilt, ist es möglich, die E/A-Last auf zwei Cluster aufzuteilen und dort ein Failover oder Failback durchzuführen.

Anmerkung
Anmerkung: Erzwungene Hochstufung

Die Hochstufung wird mit der Option --force erzwungen. Die erzwungene Hochstufung ist erforderlich, wenn die Herabstufung nicht auf den Peer Cluster übertragen werden kann (beispielsweise im Fall eines Cluster-Fehlers oder Kommunikationsausfalls). Dies führt zu einem Split Brain-Szenario zwischen den beiden Peers und das Image wird nicht mehr synchronisiert bis ein Unterkommando resync ausgestellt wird.

8.5.3.5 Erzwingen der erneuten Synchronisierung eines Image

Wenn der rbd-mirror-Daemon ein Split Brain-Szenario erkennt, versucht er erst wieder, das betreffende Image zu spiegeln, wenn das Problem behoben ist. Um die Spiegelung für ein Image wieder aufzunehmen, müssen Sie zunächst das Image, das als veraltet ermittelt wurde, herabstufen und dann eine erneute Synchronisierung mit dem primären Image anfordern. Geben Sie zum Anfordern einer erneuten Synchronisierung des Image das Unterkommando mirror image resync zusammen mit dem Pool- und Image-Namen an:

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

8.5.4 Spiegelstatus

Der Reproduktionsstatus des Peer Clusters wird für jedes primäre gespiegelte Image gespeichert. Dieser Status wird mit den Unterkommandos mirror image status und mirror pool status abgerufen:

Geben Sie zum Anfordern des Spiegel-Image-Status das Unterkommando mirror image status zusammen mit dem Pool- und Image-Namen an:

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

Geben Sie zum Anfordern einer Übersicht zum Spiegel-Pool-Status das Unterkommando mirror pool status zusammen mit dem Pool-Namen an:

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

Durch Hinzufügen der Option --verbose zum Unterkommando mirror pool status werden zusätzlich Statusdetails für jedes Spiegel-Image im Pool ausgegeben.

Diese Seite drucken