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

9 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 stellen nicht alle Funktionen von reproduzierten Pools bereit, benötigen jedoch auch weniger Basisspeicherplatz. Ein standardmäßiger Erasure Pool, der 1 TB Daten speichern kann, benötigt 1,5 TB Basisspeicherplatz. Im Vergleich dazu benötigt ein reproduzierter Pool einen Basisspeicherplatz von 2 TB für dieselbe Datenmenge.

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

Anmerkung
Anmerkung

Wenn Sie mit FileStore arbeiten, haben Sie erst Zugriff auf Erasure Coded Pools über die RBD-Schnittstelle, wenn Sie eine Cache-Schicht konfigurieren. Weitere Details hierzu finden Sie in Abschnitt 9.3, „Erasure Coded Pool und Cache Tiering“. Alternativ können Sie auch mit BlueStore arbeiten.

Anmerkung
Anmerkung

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

9.1 Erstellen eines Erasure Coded Pools 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.

    root # ceph osd pool create ecpool 12 12 erasure
    pool 'ecpool' created
  2. Die Zeichenkette ABCDEFGHI wird in ein Objekt namens NYAN geschrieben.

    cephadm > 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.

    root # rados --pool ecpool get NYAN -
    ABCDEFGHI

9.2 Erasure Code 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 ist, wird ein Objekt von 10 KB in k Objekte zu je 5 KB aufgeteilt.

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 6.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.

Mit dem in Abschnitt 9.1, „Erstellen eines Erasure Coded Pools für Testzwecke“ verwendeten standardmäßigen Erasure Code Profil verlieren Sie keine Cluster-Daten, wenn ein einzelner OSD ausfällt. Daher benötigt es zum Speichern von 1 TB Daten weitere 0,5 TB Basisspeicherplatz. Dies bedeutet, dass 1,5 TB Basisspeicherplatz für 1 TB Daten benötigt werden. 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:

root # 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.

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:

root # ceph osd erasure-code-profile set myprofile \
   k=3 \
   m=2 \
   crush-failure-domain=rack

Das Beispiel in Abschnitt 9.1, „Erstellen eines Erasure Coded Pools für Testzwecke“ kann mit diesem neuen Profil wiederholt werden:

root # ceph osd pool create ecpool 12 12 erasure myprofile
cephadm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
root # 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.

Weitere Informationen zu Erasure Coded-Profilen finden Sie unter http://docs.ceph.com/docs/master/rados/operations/erasure-code-profile.

9.3 Erasure Coded Pool und Cache Tiering

Erasure Coded Pools benötigen mehr Ressourcen als reproduzierte Pools. Ihnen fehlen außerdem einige Funktionen wie eingeschränkter Schreibzugriff. Wir empfehlen, eine Cache-Schicht vor dem Erasure Coded Pool zu erstellen, um diese Beschränkungen auszugleichen.

Wenn beispielsweise der Pool hot-storagezum Schnellspeichern angelegt ist, dann kann der ecpool, der in Abschnitt 9.2, „Erasure Code Profile“ erstellt wurde, beschleunigt werden mit:

root # ceph osd tier add ecpool hot-storage
root # ceph osd tier cache-mode hot-storage writeback
root # ceph osd tier set-overlay ecpool hot-storage

Dadurch wird der Pool hot-storage als Schicht von "ecpool" in den Zurückschreiben-Modus versetzt, sodass jeder Schreib- und Lesevorgang zu "ecpool" tatsächlich den "hot-storage"-Pool verwendet und von dessen Flexibilität und Geschwindigkeit profitiert.

Mit FileStore ist es nicht möglich, ein RBD-Image zu einem Erasure Coded Pool zu erstellen, weil dazu eingeschränkter Schreibzugriff erforderlich ist. Es ist jedoch möglich, ein RBD-Image zu einem Erasure Coded Pool zu erstellen, wenn eine reproduzierte Pool-Schicht eine Cache-Schicht festgelegt hat:

root # rbd --pool ecpool create --size 10 myvolume

Weitere Informationen zum Cache Tiering finden Sie in Kapitel 10, Cache Tiering.

9.4 Erasure Coded Pools mit RADOS Block Device

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

root # 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":

root # 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.

Diese Seite drucken