Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
documentation.suse.com / Dokumentation zu SUSE Enterprise Storage 7 / Betriebs- und Verwaltungshandbuch / Speichern von Daten in einem Cluster / Erasure Coded Pools
Gilt für SUSE Enterprise Storage 7

19 Erasure Coded Pools

Ceph bietet eine Alternative zur normalen Reproduktion von Daten in Pools, die als Erasure oder Erasure Coded Pool bezeichnet wird. Erasure Pools bieten nicht alle Funktionen der reproduzierten Pools (sie können beispielsweise keine Metadaten für RBD-Pools speichern), belegen jedoch weniger Basisspeicherplatz. Ein standardmäßiger Erasure Pool, in dem 1 TB Daten gespeichert werden können, erfordert 1,5 TB Basisspeicherplatz für einen einzelnen Festplattenausfall. Im Vergleich dazu benötigt ein reproduzierter Pool einen Basisspeicherplatz von 2 TB für denselben Zweck.

Hintergrundinformationen zu dem Begriff Erasure Code finden Sie unter https://en.wikipedia.org/wiki/Erasure_code.

Eine Liste der Pool-Werte für EC-Pools finden Sie im Abschnitt Werte der Pools mit Löschcodierung.

19.1 Voraussetzungen für Erasure Coded Pools

Zur Nutzung von Erasure Coding muss Folgendes ausgeführt werden:

  • Definieren Sie eine Löschregel in der CRUSH-Zuordnung.

  • Definieren Sie ein Löschcode-Profil, in dem der zu verwendende Codierungsalgorithmus angegeben ist.

  • Erstellen Sie einen Pool mit der obigen Regel und dem Profil.

Denken Sie daran, dass das Profil und die Details im Profil nicht mehr geändert werden können, sobald der Pool erstellt wurde und Daten in den Pool aufgenommen wurden.

Stellen Sie sicher, dass die CRUSH-Regeln für Erasure Pools indep für step verwenden. Weitere Informationen finden Sie in Abschnitt 17.3.2, „firstn und indep.

19.2 Erstellen eines Pools mit Löschcodierung für Testzwecke

Der einfachste Erasure Coded Pool entspricht RAID5 und benötigt mindestens drei Hosts. Dieser Vorgang beschreibt die Erstellung eines Pools für Testzwecke.

  1. Mit dem Kommando ceph osd pool create wird ein Pool vom Typ erasure erstellt. Die Zahl 12 steht für die Anzahl der Placement Groups. Mit den Standardparametern kann der Pool den Ausfall eines OSD verarbeiten.

    cephuser@adm > ceph osd pool create ecpool 12 12 erasure
    pool 'ecpool' created
  2. Die Zeichenkette ABCDEFGHI wird in ein Objekt namens NYAN geschrieben.

    cephuser@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
  3. Für Testzwecke können die OSDs nun deaktiviert werden, zum Beispiel durch Trennen vom Netzwerk.

  4. Auf den Inhalt der Datei wird mit dem Kommando rados zugegriffen, um zu testen, ob der Pool den Ausfall von Geräten verarbeiten kann.

    cephuser@adm > rados --pool ecpool get NYAN -
    ABCDEFGHI

19.3 Löschcode-Profile

Wird das Kommando ceph osd pool create zum Erstellen eines erasure pool aufgerufen, dann wird das Standardprofil verwendet, es sei denn ein anderes Profil wird angegeben. Profile definieren die Redundanz von Daten. Dies erfolgt durch Festlegen von zwei Parametern, die willkürlich als k und m bezeichnet werden. k und m definieren, in wie viele Datenblöcke eine bestimmte Datenmenge aufgeteilt und wie viele Codierungs-Datenblöcke erstellt werden. Redundante Datenblöcke werden dann auf verschiedenen OSDs gespeichert.

Für Erasure Pool-Profile erforderliche Definitionen:

chunk

Wenn die Verschlüsselungsfunktion aufgerufen wird, gibt sie Datenblöcke der selben Größe zurück: Datenblöcke, die verkettet werden können, um das ursprüngliche Objekt zu rekonstruieren, sowie Codierungs-Datenblöcke, mit denen ein verlorener Datenblock neu aufgebaut werden kann.

k

Die Anzahl der Datenblöcke, d. h. die Anzahl der Blöcke, in die das ursprüngliche Objekt aufgeteilt wurde. Bei einem Wert von beispielsweise k=2 wird ein Objekt von 10 KB in k Objekte zu je 5 KB aufgeteilt. Der Standardwert für min_size für Erasure Coded Pools lautet k + 1. Es wird jedoch empfohlen, min_size auf einen Wert von mindestens k + 2 festzulegen, damit keine Schreib- und Datenverluste eintreten.

m

Die Anzahl der Codierungs-Datenblöcke, d. h. die Anzahl der zusätzlichen Blöcke, die durch die Verschlüsselungsfunktionen berechnet werden. Bei 2 Codierungs-Datenblöcken können 2 OSDs ausfallen, ohne dass Daten verloren gehen.

crush-failure-domain

Definiert, an welche Geräte die Datenblöcke verteilt werden. Ein Bucket-Typ muss als Wert festgelegt werden. Alle Bucket-Typen finden Sie in Abschnitt 17.2, „Buckets“. Wenn die Fehlerdomäne rack lautet, werden die Datenblöcke in verschiedenen Racks gespeichert, um die Stabilität im Fall von Rack-Fehlern zu erhöhen. Denken Sie daran, das hierfür k+m Racks erforderlich sind.

Mit dem in Abschnitt 19.2, „Erstellen eines Pools mit Löschcodierung für Testzwecke“ verwendeten standardmäßigen Löschcode-Profil verlieren Sie keine Cluster-Daten, wenn ein einzelnes OSD oder ein einzelner Host ausfällt. Daher benötigt es zum Speichern von 1 TB Daten weitere 0,5 TB Basisspeicherplatz. Für 1 TB Daten sind daher 1,5 TB Basisspeicherplatz erforderlich (k=2, m=1). Dies entspricht einer allgemeinen RAID5-Konfiguration. Zum Vergleich: Ein reproduzierter Pool benötigt 2 TB Basisspeicherplatz zum Speichern von 1 TB Daten.

Die Einstellungen des Standardprofils werden angezeigt mit:

cephuser@adm > ceph osd erasure-code-profile get default
directory=.libs
k=2
m=1
plugin=jerasure
crush-failure-domain=host
technique=reed_sol_van

Es ist wichtig, das richtige Profil zu wählen, weil es nach Erstellung des Pools nicht mehr geändert werden kann. Ein neuer Pool mit einem anderen Profil muss erstellt und alle Objekte müssen vom vorigen Pool in den neuen Pool verschoben werden (siehe Abschnitt 18.6, „Pool-Migration“).

Die wichtigsten Parameter des Profils sind k, m und crush-failure-domain, weil sie den Speicher-Overhead und die Datenhaltbarkeit definieren. Wenn beispielsweise die gewünschte Architektur den Verlust von zwei Racks mit einem Speicher-Overhead von 66 % kompensieren muss, kann das folgende Profil definiert werden. Dies gilt jedoch nur für eine CRUSH-Zuordnung mit Buckets vom Typ „rack“:

cephuser@adm > ceph osd erasure-code-profile set myprofile \
   k=3 \
   m=2 \
   crush-failure-domain=rack

Das Beispiel in Abschnitt 19.2, „Erstellen eines Pools mit Löschcodierung für Testzwecke“ kann mit diesem neuen Profil wiederholt werden:

cephuser@adm > ceph osd pool create ecpool 12 12 erasure myprofile
cephuser@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
cephuser@adm > rados --pool ecpool get NYAN -
ABCDEFGHI

Das NYAN-Objekt wird in drei Datenblöcke aufgeteilt (k=3) und zwei weitere Datenblöcke werden erstellt (m=2). Der Wert von m definiert, wie viele OSDs gleichzeitig ausfallen können, ohne dass Daten verloren gehen. Mit crush-failure-domain=rack wird ein CRUSH-Regelsatz erstellt, der sicherstellt, dass keine zwei Datenblöcke im selben Rack gespeichert werden.

Image

19.3.1 Erstellen eines neuen Löschcode-Profils

Mit folgendem Kommando erstellen Sie ein neues Löschcode-Profil:

root # ceph osd erasure-code-profile set NAME \
 directory=DIRECTORY \
 plugin=PLUGIN \
 stripe_unit=STRIPE_UNIT \
 KEY=VALUE ... \
 --force
VERZEICHNIS

Optional. Legen Sie den Namen des Verzeichnisses fest, aus dem das Löschcode-Plugin geladen werden soll. Der Standardwert lautet /usr/lib/ceph/erasure-code.

PLUGIN

Optional. Mit dem Löschcode-Plugin können Sie Codierungsblöcke berechnen und fehlende Blöcke wiederherstellen. Verfügbare Plugins: „jerasure“, „isa“, „lrc“ und „shes“. Der Standardwert lautet „jerasure“.

STRIPE_UNIT

Optional. Datenmenge in einem Datenblock pro Stripe. Bei einem Profil mit 2 Datenblöcken und dem Wert „stripe_unit=4K“ wird beispielsweise der Bereich 0–4K in Block 0 abgelegt, 4K–8K in Block 1 und 8K–12K wieder in Block 0. Dieser Wert muss ein Vielfaches von 4K sein, damit die bestmögliche Leistung erzielt wird. Der Standardwert wird beim Erstellen eines Pools aus der Monitor-Konfigurationsoption osd_pool_erasure_code_stripe_unit abgerufen. Der Wert für „stripe_width“ eines Pools mit diesem Profil entspricht der Anzahl der Datenblöcke, multipliziert mit diesem Wert für „stripe_unit“.

KEY=VALUE

Schlüssel-/Wertepaare von Optionen für das ausgewählte Löschcode-Plugin.

--force

Optional. Überschreibt ein vorhandenes Profil mit demselben Namen und ermöglicht die Einstellung eines nicht durch 4K teilbaren Werts für „stripe_unit“.

19.3.2 Entfernen eines Löschcode-Profils

Mit folgendem Kommando entfernen Sie das unter NAME angegebene Löschcode-Profil:

root # ceph osd erasure-code-profile rm NAME
Wichtig
Wichtig

Wenn ein Pool auf das Profil verweist, kann das Profil nicht gelöscht werden.

19.3.3 Abrufen der Details eines Löschcode-Profils

Mit folgendem Kommando rufen Sie Details für das unter NAME angegebene Löschcode-Profil ab:

root # ceph osd erasure-code-profile get NAME

19.3.4 Auflisten von Löschcode-Profilen

Mit folgendem Kommando rufen Sie eine Liste der Namen aller Löschcode-Profile ab:

root # ceph osd erasure-code-profile ls

19.4 Markieren von Erasure Coded Pools mit RADOS-Blockgerät

Setzen Sie ein entsprechendes Tag, wenn Sie einen EC Pool als RBD-Pool kennzeichnen möchten:

cephuser@adm > ceph osd pool application enable rbd ec_pool_name

RBD kann Image-Daten in EC Pools speichern. Der Image Header und die Metadaten müssen jedoch weiterhin in einem reproduzierten Pool gespeichert werden. Nehmen wir an, Sie verfügen zu diesem Zweck über einen Pool namens „rbd“:

cephuser@adm > rbd create rbd/image_name --size 1T --data-pool ec_pool_name

Sie können das Image normalerweise wie jedes andere Image verwenden, außer dass alle Daten im Pool ec_pool_name gespeichert werden statt im „rbd“-Pool.