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

7 Verwalten von Speicher-Pools

Ceph speichert Daten in Pools. Pools sind logische Gruppen für Speicherobjekte. Wenn Sie zunächst einen Cluster bereitstellen, ohne einen Pool zu erstellen, verwendet Ceph die Standard-Pools zum Speichern von Daten. Ein Pool zeichnet sich durch Folgendes aus:

  • Stabilität: Sie legen fest, wie viele OSDs ausfallen dürfen, ohne Daten zu verlieren. Bei reproduzierten Pools ist das die gewünschte Anzahl von Kopien/Reproduktionen eines Objekts. Neue Pools werden mit der Standardanzahl von 3 Reproduktionen erstellt. Da bei einer normalen Konfiguration ein Objekt und eine zusätzliche Kopie gespeichert werden, müssen Sie die Anzahl der Reproduktionen auf 2 festlegen. Bei Erasure Coded Pools ist es die Anzahl der Codierungs-Datenblöcke (d. h. m=2 im Erasure Code Profil).

  • Placement Groups: sind interne Datenstrukturen zum Speichern von Daten in einem Pool mehrerer OSDs. In einer CRUSH Map wird definiert, wie Ceph Daten in PGs speichert. Die Anzahl der Placement Groups für den Pool kann festgelegt werden. Bei einer normalen Konfiguration sind etwa 100 Placement Groups pro OSD vorhanden. Dadurch wird ein optimaler Ausgleich ermöglicht, ohne zu viel Rechnerressourcen zu verbrauchen. Achten Sie bei der Einrichtung von mehreren Pools sorgfältig darauf, dass Sie eine vernünftige Anzahl von Placement Groups sowohl für den Pool als auch den Cluster insgesamt festlegen.

  • CRUSH-Regeln: Wenn Sie Daten in einem Pool speichern, findet CRUSH anhand eines Regelsatzes, der dem Pool zugeordnet ist, eine Regel für die Platzierung des Objekts und dessen Reproduktionen (oder Datenblöcken bei Erasure Coded Pools). Es ist auch möglich, eine benutzerdefinierte CRUSH-Regel für Ihren Pool zu erstellen.

  • Snapshots: Wenn Sie einen Snapshot mit ceph osd pool mksnap erstellen, machen Sie im Grunde einen Snapshot von einem bestimmten Pool.

  • Eigentümerschaft festlegen: Legen Sie eine Benutzer-ID als Eigentümer eines Pools fest.

Zum Strukturieren der Daten in Pools können Sie Pools auflisten, erstellen und entfernen. Es ist auch möglich, die Auslastungsstatistik für jeden Pool anzuzeigen.

7.1 Verknüpfen von Pools mit einer Anwendung

Bevor Sie Pools verwenden, müssen Sie sie mit einer Anwendung verknüpfen. Mit dem CephFS verwendete Pools oder automatisch von Object Gateway erstellte Pools werden automatisch verknüpft. Pools, die zur Verwendung mit RBD vorgesehen sind, müssen mit dem Werkzeug rbd initialisiert werden (weitere Informationen finden Sie in Abschnitt 8.1, „Kommandos für Blockgeräte“).

In anderen Fällen können Sie manuell einen frei formulierten Anwendungsnamen mit einem Pool verknüpfen:

root # ceph osd pool application enable pool_name application_name
Tipp
Tipp: Standardanwendungsnamen

CephFS verwendet den Anwendungsnamen cephfs, RADOS Block Device verwendet rbd und Object Gateway verwendet rgw.

Ein Pool kann mit mehreren Anwendungen verknüpft werden und jede Anwendung kann eigene Metadaten enthalten. Die Metadaten der Anwendung für einen angegebenen Pool werden mit dem folgenden Kommando angezeigt:

root # ceph osd pool application get pool_name

7.2 Arbeiten mit Pools

In diesem Abschnitt erhalten Sie praktische Informationen zur Ausführung einfacher Prozesse mit Pools. Sie erfahren, wie Sie Pools auflisten, erstellen und löschen, wie Sie Pool-Statistiken anzeigen oder Snapshots eines Pools verwalten.

7.2.1 Auflisten von Pools

Führen Sie zum Auflisten der Pools Ihres Clusters Folgendes aus:

root # ceph osd lspools
0 rbd, 1 photo_collection, 2 foo_pool,

7.2.2 Erstellen eines Pools

Führen Sie zum Erstellen eines reproduzierten Pools Folgendes aus:

root # ceph osd pool create pool_name pg_num pgp_num replicated crush_ruleset_name \
expected_num_objects

Führen Sie zum Erstellen eines Erasure Coded Pools Folgendes aus:

root # ceph osd pool create pool_name pg_num pgp_num erasure erasure_code_profile \
 crush_ruleset_name expected_num_objects

ceph osd pool create wird möglicherweise nicht ausgeführt, wenn Sie die zulässige Anzahl der Placement Groups pro OSD überschreiten. Der Grenzwert wird mit der Option mon_max_pg_per_osd festgelegt.

pool_name

Der Name des Pools. Er muss eindeutig sein. Diese Option muss aktiviert sein.

pg_num

Die Gesamtanzahl der Placement Groups für den Pool. Diese Option muss aktiviert sein. Die Standardeinstellung ist 8.

pgp_num

Die Gesamtanzahl der Placement Groups für Platzierungszwecke. Dieser Wert sollte mit der Gesamtanzahl der Placement Groups identisch sein. Szenarios mit Aufteilung der Placement Groups sind davon ausgenommen. Diese Option muss aktiviert sein. Die Standardeinstellung ist 8.

pgp_type

Der Pool-Typ, entweder replicated (reproduziert), um eine Wiederherstellung verlorener OSDs durch Beibehaltung mehrerer Kopien von Objekten zu ermöglich, oder erasure, um eine Art von genereller RAID5-Funktion zu erhalten. Reproduzierte Pools benötigen zwar mehr Basisspeicher, implementieren jedoch alle Ceph-Operationen. Erasure Coded Pools benötigen weniger Basisspeicher, implementieren jedoch nur eine Teilmenge der verfügbaren Operationen. Die Standardeinstellung ist "replicated".

crush_ruleset_name

Der Name des CRUSH-Regelsatzes für diesen Pool. Wenn der angegebene Regelsatz nicht vorhanden ist, wird der reproduzierte Pool nicht erstellt und -ENOENT wird ausgegeben. Der reproduzierte Pool erstellt einen neuen Erasure-Regelsatz mit dem angegebenen Namen. Der Standardwert ist "erasure-code" für einen Erasure Coded Pool. Übernimmt die Ceph-Konfigurationsvariable osd_pool_default_crush_replicated_ruleset für den reproduzierten Pool.

erasure_code_profile=profile

Nur für Erasure Coded Pools. Verwenden Sie das Erasure Code Profil. Es muss ein vorhandenes Profil sein, das durch osd erasure-code-profile set definiert wurde.

Legen Sie beim Erstellen eines Pools die Anzahl der Placement Groups auf einen sinnvollen Wert fest (zum Beispiel 100). Denken Sie auch an die Gesamtanzahl der Placement Groups pro OSD. Placement Groups sind rechnerisch aufwendig, daher verschlechtert sich die Leistung, wenn viele Pools mit vielen Placement Groups vorhanden sind (wie zum Beispiel 50 Pools mit je 100 Placement Groups). Der Punkt, ab dem sich die Rückgaben verschlechtern hängt von der Leistung des OSD-Hosts ab.

Unter Placement Groups finden Sie detaillierte Informationen zur Berechnung einer angemessenen Anzahl von Placement Groups für Ihren Pool.

expected_num_objects

Die erwartete Anzahl von Objekten für diesen Pool. Wenn Sie diesen Wert festlegen, wird der PG-Ordner zum Zeitpunkt der Erstellung des Pools aufgeteilt. Dadurch werden die negativen Auswirkungen der Latenz vermieden, die bei einer Aufteilung bei Laufzeit auftritt.

7.2.3 Festlegen von Pool-Kontingenten

Pool-Kontingente können für die maximale Anzahl von Byte und/oder die maximale Anzahl von Objekten pro Pool festgelegt werden.

root # ceph osd pool set-quota pool-name max_objects obj-count max_bytes bytes

Beispiel:

root # ceph osd pool set-quota data max_objects 10000

Zum Entfernen eines Kontingents legen Sie den entsprechenden Wert auf 0 fest.

7.2.4 Löschen eines Pools

Warnung
Warnung: Die Löschung eines Pools lässt sich nicht rückgängig machen

Pools enthalten möglicherweise wichtige Daten. Durch Löschen eines Pools gehen alle Daten im Pool verloren und es gibt keine Möglichkeit, sie wiederherzustellen.

Da die unbeabsichtigte Löschung von Pools eine echte Gefahr darstellt, implementiert Ceph zwei Mechanismen, durch die eine Löschung verhindert wird. Beide Mechanismen müssen deaktiviert werden, bevor ein Pool gelöscht werden kann.

Der erste Mechanismus ist die Flagge NODELETE. Diese Flagge ist bei jedem Pool gesetzt und der Standardwert ist "false". Führen Sie folgendes Kommando aus, um den Wert dieser Flagge an einem Pool festzustellen:

root # ceph osd pool get pool_name nodelete

Wenn das Kommando nodelete: true ausgibt, ist es erst möglich, den Pool zu löschen, wenn Sie die Flagge mit folgendem Kommando ändern:

ceph osd pool set pool_name nodelete false

Der zweite Mechanismus ist der Cluster-weite Konfigurationsparameter mon allow pool delete, der standardmäßig auf "false" festgelegt ist. Dies bedeutet, dass es standardmäßig nicht möglich ist, einen Pool zu löschen. Die angezeigte Fehlermeldung sieht folgendermaßen aus:

Error EPERM: pool deletion is disabled; you must first set the
mon_allow_pool_delete config option to true before you can destroy a pool

Zum Löschen des Pools trotz der Sicherheitseinstellung legen Sie vorübergehend mon allow pool delete auf "true" fest, löschen den Pool und legen den Parameter dann wieder auf "false" fest:

root # ceph tell mon.* injectargs --mon-allow-pool-delete=true
root # ceph osd pool delete pool_name pool_name --yes-i-really-really-mean-it
root # ceph tell mon.* injectargs --mon-allow-pool-delete=false

Das Kommando injectargs zeigt die folgende Meldung an:

injectargs:mon_allow_pool_delete = 'true' (not observed, change may require restart)

Dadurch wird einfach nur bestätigt, dass das Kommando erfolgreich ausgeführt wurde. Dies ist kein Fehler.

Wenn Sie für einen erstellten Pool eigene Regelsätze und Regeln festgelegt haben, sollten Sie diese entfernen, wenn Sie den Pool nicht länger benötigen. Wenn Sie Benutzer mit Berechtigungen genau für einen Pool erstellt haben, der nicht mehr vorhanden ist, sollten Sie diese Benutzer ebenfalls löschen.

7.2.5 Umbenennen eines Pools

Führen Sie zum Umbenennen eines Pools folgendes Kommando aus:

root # ceph osd pool rename current-pool-name new-pool-name

Wenn Sie einen Pool umbenennen und Capabilities pro Pool für einen authentifizierten Benutzer festgelegt haben, müssen Sie die Capabilities des Benutzer mit dem neuen Pool-Namen aktualisieren.

7.2.6 Anzeigen der Pool-Statistik

Führen Sie zum Anzeigen der Auslastungsstatistik eines Pools folgendes Kommando aus:

root # rados df
pool name  category  KB  objects   lones  degraded  unfound  rd  rd KB  wr  wr KB
cold-storage    -   228   1         0      0          0       0   0      1   228
data            -    1    4         0      0          0       0   0      4    4
hot-storage     -    1    2         0      0          0       15  10     5   231
metadata        -    0    0         0      0          0       0   0      0    0
pool1           -    0    0         0      0          0       0   0      0    0
rbd             -    0    0         0      0          0       0   0      0    0
total used          266268          7
total avail       27966296
total space       28232564

7.2.7 Festlegen von Pool-Werten

Führen Sie zum Festlegen des Werts für einen Pool folgendes Kommando aus:

root # ceph osd pool set pool-name key value

Sie können Werte für folgende Schlüssel festlegen:

size

Legt die Anzahl der Reproduktionen für Objekte im Pool fest. Weitere Informationen finden Sie in Abschnitt 7.2.9, „Festlegen der Anzahl der Objektreproduktionen“. Nur reproduzierte Pools.

min_size

Legt die Mindestanzahl von Reproduktionen fest, die für E/A benötigt werden. Weitere Informationen finden Sie in Abschnitt 7.2.9, „Festlegen der Anzahl der Objektreproduktionen“. Nur reproduzierte Pools.

crash_replay_interval

Der Zeitraum in Sekunden, für den Clients bestätigte, aber noch nicht zugewiesene Anforderungen erneut wiedergeben können.

pg_num

Die Anzahl der Placement Groups für den Pool. Falls Sie OSDs zum Cluster hinzufügen, sollten Sie den Wert der Placement Groups erhöhen. Weitere Informationen finden Sie in Abschnitt 7.2.11, „Erhöhen der Anzahl von Placement Groups“.

pgp_num

Die effektive Anzahl von Placement Groups zum Berechnen der Datenplatzierung.

crush_ruleset

Der zu verwendende Regelsatz für die Zuordnung der Objektplatzierung im Cluster.

hashpspool

Setzen Sie die Flagge HASHPSPOOL an einem angegebenen Pool (1) oder entfernen Sie sie (0). Durch Aktivieren dieser Flagge wird der Algorithmus geändert, um PGs besser auf OSDs zu verteilen. Nach Aktivierung dieser Flagge für einen Pool, dessen HASHPSPOOL-Flagge auf 0 festgelegt wurde, beginnt der Cluster einen Abgleich, um erneut eine korrekte Platzierung aller PGs zu erreichen. Denken Sie daran, dass sich dadurch möglicherweise eine erhebliche E/A-Last für einen Cluster ergibt. Daher müssen stark ausgelastete Produktions-Cluster sehr gut geplant werden.

nodelete

Verhindert, dass der Pool entfernt wird.

nopgchange

Verhindert, dass die Werte pg_num und pgp_num des Pools geändert werden.

nosizechange

Verhindert, dass die Größe des Pools geändert wird.

write_fadvise_dontneed

Damit setzen oder entfernen Sie die Flagge WRITE_FADVISE_DONTNEED für einen vorhandenen Pool.

noscrub,nodeep-scrub

Deaktiviert (Deep) Scrubbing der Daten für den entsprechenden Pool, um eine vorübergehend hohe E/A-Last zu vermeiden.

hit_set_type

Aktiviert die Treffersatz-Verfolgung für Cache Pools. Weitere Informationen finden Sie unter Bloomfilter. Für diese Option sind die folgenden Werte möglich: bloom, explicit_hash, explicit_object. Der Standardwert ist bloom, die anderen Werte sind nur für Testzwecke vorgesehen.

hit_set_count

Die Anzahl der Treffersätze, die für Cache Pools gespeichert werden sollen. Je höher die Anzahl, desto mehr RAM wird vom ceph-osd-Daemon belegt. Der Standardwert ist 0.

hit_set_period

Die Dauer einer Treffersatz-Periode in Sekunden für Cache Pools. Je höher die Anzahl, desto mehr RAM wird vom ceph-osd-Daemon belegt.

hit_set_fpp

Die falsch positive Wahrscheinlichkeit für den Bloom-Treffersatz-Typ. Weitere Informationen finden Sie unter Bloomfilter. Der gültige Bereich ist 0,0 bis 1,0. Der Standardwert ist 0,05.

use_gmt_hitset

Erzwingen Sie bei Erstellung eines Treffersatzes für das Cache Tiering, dass OSDs die MGZ-Zeitstempel (mittlere Greenwich-Zeit) verwenden. Dadurch wird sichergestellt, dass Nodes in verschiedenen Zeitzonen dasselbe Ergebnis zurückgeben. Der Standardwert ist 1. Dieser Wert darf nicht geändert werden.

cache_target_dirty_ratio

Der Prozentsatz der bearbeiteten (fehlerhaften) Objekte im Cache Pool, der erreicht sein muss, bevor der Cache Tiering Agent diese Objekte in den Hintergrundspeicher-Pool verschiebt. Der Standardwert ist .4

cache_target_dirty_high_ratio

Der Prozentsatz der bearbeiteten (fehlerhaften) Objekte im Cache Pool, der erreicht sein muss, bevor der Cache Tiering Agent diese Objekte mit höherer Geschwindigkeit in den Hintergrundspeicher-Pool verschiebt. Die Standardeinstellung ist .6.

cache_target_full_ratio

Der Prozentsatz der unbearbeiteten (intakten) Objekte im Cache Pool, der erreicht sein muss, bevor der Cache Tiering Agent diese Objekte aus dem Cache Pool entfernt. Der Standardwert ist .8

target_max_bytes

Ceph beginnt mit dem Verschieben oder Entfernen von Objekten, wenn der Grenzwert max_bytes ausgelöst wird.

target_max_objects

Ceph beginnt mit dem Verschieben oder Entfernen von Objekten, wenn der Grenzwert max_objects ausgelöst wird.

hit_set_grade_decay_rate

Temperaturzerfallsrate zwischen zwei aufeinanderfolgenden hit_set. Der Standardwert ist 20.

hit_set_search_last_n

Anzahl der meisten N-Vorkommen in hit_sets für die Temperaturberechnung. Der Standardwert ist 1.

cache_min_flush_age

Die Zeit (in Sekunden), bevor der Cache Tiering Agent ein Objekt vom Cache Pool in den Speicher-Pool verschiebt.

cache_min_evict_age

Die Zeit (in Sekunden), bevor der Cache Tiering Agent ein Objekt aus dem Cache Pool entfernt.

fast_read

Wenn diese Flagge bei Erasure Coding Pools aktiviert wird, stellt die Leseanforderung Teil-Lesevorgänge an alle Shards aus und wartet bis sie genügend Shards zum Decodieren erhält, die für den Client verarbeitet werden. Wenn im Fall von jerasure und isa Erasure Plugins die ersten K-Antworten zurückgegeben werden, dann wird die Anforderung des Clients sofort anhand der von diesen Antworten decodierten Daten verarbeitet. Diese trägt dazu bei, einige Ressourcen für bessere Leistung freizugeben. Diese Flagge wird aktuell nur für Erasure Coded Pools unterstützt. Der Standardwert ist 0.

scrub_min_interval

Das Mindestintervall in Sekunden für ein Pool Scrubbing, wenn die Cluster-Last gering ist. Der Standardwert 0 bedeutet, dass der Wert osd_scrub_min_interval aus der Ceph-Konfigurationsdatei verwendet wird.

scrub_max_interval

Das maximale Intervall in Sekunden für ein Pool Scrubbing, unabhängig von der Cluster-Last. Der Standardwert 0 bedeutet, dass der Wert osd_scrub_max_interval aus der Ceph-Konfigurationsdatei verwendet wird.

deep_scrub_interval

Das Intervall in Sekunden für ein deep Scrubbing des Pools. Der Standardwert 0 bedeutet, dass der Wert osd_deep_scrub aus der Ceph-Konfigurationsdatei verwendet wird.

7.2.8 Abrufen von Pool-Werten

Führen Sie zum Abrufen eines Werts aus einem Pool folgendes Kommando aus:

root # ceph osd pool get pool-name key

Sie können die Werte für Schlüssel abrufen, die in Abschnitt 7.2.7, „Festlegen von Pool-Werten“ aufgelistet sind, und zudem folgende Schlüssel:

pg_num

Die Anzahl der Placement Groups für den Pool.

pgp_num

Die effektive Anzahl von Placement Groups zum Berechnen der Datenplatzierung. Der gültige Bereich ist gleich oder kleiner als pg_num.

7.2.9 Festlegen der Anzahl der Objektreproduktionen

Führen Sie folgendes Kommando aus, um die Anzahl der Objektreproduktionen in einem reproduzierten Pool festzulegen:

root # ceph osd pool set poolname size num-replicas

In num-replicas ist das Objekt selbst enthalten. Geben Sie 3 an, wenn Sie beispielsweise das Objekt und zwei Kopien des Objekts für insgesamt drei Instanzen des Objekts wünschen.

Wenn Sie num-replicas auf 2 festlegen, wird nur eine Kopie Ihrer Daten erstellt. Wenn Sie eine Objektinstanz verlieren, müssen Sie sich darauf verlassen, dass die andere Kopie seit dem letzten Scrubbing bei der Wiederherstellung nicht beschädigt wurde.

Wenn der Pool auf eine Reproduktion festgelegt wird, bedeutet dies, dass genau eine Instanz des Datenobjekts im Pool vorhanden ist. Wenn der OSD ausfällt, verlieren Sie die Daten. Ein Pool mit einer Reproduktion wird normalerweise verwendet, wenn temporäre Daten für kurze Zeit gespeichert werden.

Die Festlegung von mehr als drei Reproduktionen für einen Pool erhöht die Zuverlässigkeit nur geringfügig, kann jedoch in einigen seltenen Fällen sinnvoll sein. Je mehr Reproduktionen erstellt werden, desto mehr Festplattenspeicherplatz zum Speichern von Objektkopien wird benötigt. Daran sollten Sie denken. Wir empfehlen Erasure Coded Pools, wenn Sie ultimative Datensicherheit benötigen. Weitere Informationen finden Sie in Kapitel 9, Erasure Coded Pools.

Warnung
Warnung: Mehr als zwei Reproduktionen empfohlen

Wir raten Ihnen dringend, mehr als zwei Reproduktionen zu verwenden. Falls ein OSD ausfällt, ist es sehr wahrscheinlich, dass der zweite OSD aufgrund des hohen Workloads bei der Wiederherstellung ebenfalls ausfällt.

Beispiel:

root # ceph osd pool set data size 3

Dieses Kommando kann für jeden Pool ausgeführt werden.

Anmerkung
Anmerkung

Ein Objekt akzeptiert möglicherweise E/As im eingeschränkt leistungsfähigen Modus mit weniger als pool size Reproduktionen. Sie sollten die Einstellung min_size verwenden, um eine Mindestanzahl erforderlicher Reproduktionen für E/A festzulegen. Beispiel:

root # ceph osd pool set data min_size 2

Dadurch wird sichergestellt, dass kein Objekt im Daten-Pool E/A mit weniger Reproduktionen als min_size erhält.

7.2.10 Abrufen der Anzahl der Objektreproduktionen

Führen Sie folgendes Kommando aus, um die Anzahl der Objektreproduktionen abzurufen:

root # ceph osd dump | grep 'replicated size'

Ceph listet die Pools mit hervorgehobenem Attribut replicated size auf. Standardmäßig erstellt Ceph zwei Reproduktionen eines Objekts (insgesamt drei Kopien oder eine Größe von 3).

7.2.11 Erhöhen der Anzahl von Placement Groups

Beim Erstellen eines neuen Pools geben Sie die Anzahl der Placement Groups für den Pool an (weitere Informationen finden Sie in Abschnitt 7.2.2, „Erstellen eines Pools“). Nachdem Sie weitere OSDs zum Cluster hinzugefügt haben, müssen Sie normalerweise auch die Anzahl der Placement Groups erhöhen, um die Leistung und Datenhaltbarkeit zu verbessern. Für jede Placement Group benötigen der OSD und die Monitor Nodes ständig Speicherplatz, Netzwerkzugang und CPU, ganz besonders während der Wiederherstellung. Daraus folgt, dass durch Minimierung der Anzahl von Placement Groups erheblich Ressourcen gespart werden.

Warnung
Warnung: Zu hoher Wert für pg_num

Beim Ändern des pg_num-Werts für einen Pool kommt es gelegentlich vor, dass die neue Anzahl der Placement Groups den zulässigen Grenzwert überschreitet. Beispiel

root # ceph osd pool set rbd pg_num 4096
 Error E2BIG: specified pg_num 3500 is too large (creating 4096 new PGs \
 on ~64 OSDs exceeds per-OSD max of 32)

Der Grenzwert verhindert eine extreme Aufteilung der Placement Groups. Er wird aus dem Wert mon_osd_max_split_count abgeleitet.

Die Ermittlung der richtigen Anzahl von Placement Groups für einen Cluster, dessen Größe geändert wurde, ist eine komplexe Aufgabe. Ein Ansatz erhöht die Anzahl der Placement Groups so lange kontinuierlich bis die optimale Cluster-Leistung erreicht ist. Die neue inkrementierte Anzahl von Placement Groups ermitteln Sie, indem Sie den Wert des Parameters mon_osd_max_split_count abrufen und diesen zur aktuellen Anzahl der Placement Groups hinzuaddieren. Eine allgemeine Vorstellung davon vermittelt Ihnen das folgende Skript:

cephadm > max_inc=`ceph daemon mon.a config get mon_osd_max_split_count 2>&1 \
  | tr -d '\n ' | sed 's/.*"\([[:digit:]]\+\)".*/\1/'`
cephadm > pg_num=`ceph osd pool get rbd pg_num | cut -f2 -d: | tr -d ' '`
cephadm > echo "current pg_num value: $pg_num, max increment: $max_inc"
cephadm > next_pg_num="$(($pg_num+$max_inc))"
cephadm > echo "allowed increment of pg_num: $next_pg_num"

Nachdem Sie die nächste Anzahl von Placement Groups herausgefunden haben, erhöhen Sie sie mit

root # ceph osd pool set pool_name pg_num next_pg_num

7.2.12 Hinzufügen eines Pools

Nach der ersten Bereitstellung eines Clusters speichert Ceph die Daten in den Standard-Pools. Sie können später einen neuen Pool erstellen mit

root # ceph osd pool create

Weitere Informationen zur Erstellung von Cluster Pools finden Sie in Abschnitt 7.2.2, „Erstellen eines Pools“.

7.3 Pool-Migration

Beim Erstellen eines Pools (Informationen hierzu finden Sie in Abschnitt 7.2.2, „Erstellen eines Pools“) müssen Sie die ersten Parameter wie den Pool-Typ oder die Anzahl der Placement Groups angeben. Wenn Sie später einen dieser Parameter ändern möchten, nachdem Sie bereits Daten im Pool platziert haben, dann müssen Sie die Pool-Daten zu einem anderen Pool migrieren, dessen Parameter für Ihre Bereitstellung geeignet sind.

Es gibt mehrere Methoden zur Pool-Migration. Wir empfehlen die Methode des Cache Tierings (Aufteilen des Cache in mehrere Schichten), weil sie transparent ist, die Ausfallzeit des Clusters reduziert und die Duplizierung aller Daten des Pools vermeidet.

7.3.1 Migrieren über Cache Tiering

Das Prinzip ist einfach: Stellen Sie den Pool, der migriert werden soll, in umgekehrter Reihenfolge in eine Cache-Schicht. Weitere Details hierzu finden Sie in Kapitel 10, Cache Tiering. Wenn Sie beispielsweise einen reproduzierten Pool namens "testpool" zu einem Erasure Coded Pool migrieren möchten, führen Sie die folgenden Schritte aus:

Prozedur 7.1: Migrieren eines reproduzierten Pools zu einem Erasure Coded Pool
  1. Erstellen Sie einen neuen Erasure Coded Pool namens "newpool":

    root@minion > ceph osd pool create newpool 4096 4096 erasure default

    Nun verfügen Sie über zwei Pools: den ursprünglichen reproduzierten "testpool" mit Daten und den neuen leeren Erasure Coded "newpool":

    Pools vor der Migration
    Abbildung 7.1: Pools vor der Migration
  2. Richten Sie die Cache-Schicht ein und konfigurieren Sie den reproduzierten Pool "testpool" als Cache Pool:

    root@minion > ceph osd tier add newpool testpool --force-nonempty
    root@minion > ceph osd cache-mode testpool forward

    Ab hier werden alle neuen Objekte im neuen Pool erstellt:

    Einrichtung der Cache-Schicht
    Abbildung 7.2: Einrichtung der Cache-Schicht
  3. Erzwingen Sie, dass der Cache Pool alle Objekte in den neuen Pool verschiebt:

    root@minion > rados -p testpool cache-flush-evict-all
    Leeren von Daten
    Abbildung 7.3: Leeren von Daten
  4. Stellen Sie alle Clients auf den neuen Pool um. Solange nicht alle Daten geleert und zum neuen Erasure Coded Pool verschoben sind, müssen Sie eine Überlagerung angeben, sodass Objekte noch im alten Pool gesucht werden:

    root@minion > ceph osd tier set-overlay newpool testpool

    Bei einer Überlagerung werden alle Operationen an den alten reproduzierten "testpool" weitergeleitet:

    Festlegen der Überlagerung
    Abbildung 7.4: Festlegen der Überlagerung

    Nun können Sie alle Clients auf den Zugriff von Objekten im neuen Pool umstellen.

  5. Wenn alle Daten zum Erasure Coded "newpool" migriert sind, entfernen Sie die Überlagerung und den alten Cache Pool "testpool":

    root@minion > ceph osd tier remove-overlay newpool
    root@minion > ceph osd tier remove newpool testpool
    Migration abgeschlossen
    Abbildung 7.5: Migration abgeschlossen

7.4 Pool Snapshots

Pool Snapshots sind Snapshots vom Zustand des gesamten Ceph Pools. Mit Pool Snapshots behalten Sie den Verlauf des Pool-Zustands bei. Abhängig von der Größe des Pools wird für Pool Snapshots möglicherweise viel Speicherplatz benötigt. Prüfen Sie immer zunächst, ob im betreffenden Speicher genügend Festplattenspeicherplatz vorhanden ist, bevor Sie einen Snapshot eines Pools erstellen.

7.4.1 Erstellen eines Pool Snapshots

Führen Sie folgendes Kommando aus, um einen Snapshot von einem Pool zu erstellen:

root # ceph osd pool mksnap pool-name snap-name

Beispiel:

root # ceph osd pool mksnap pool1 snapshot1
created pool pool1 snap snapshot1

7.4.2 Entfernen eines Snapshots eines Pools

Führen Sie folgendes Kommando aus, um einen Snapshot eines Pool zu entfernen:

root # ceph osd pool rmsnap pool-name snap-name

7.5 Datenkomprimierung

Ab SUSE Enterprise Storage 5 bietet BlueStore eine direkte Datenkomprimierung, um Festplattenspeicherplatz zu sparen.

7.5.1 Aktivieren der Komprimierung

Die Datenkomprimierung für einen Pool wird aktiviert mit:

root # ceph osd pool set POOL_NAME ompression_algorithm snappy
root # ceph osd pool set POOL_NAME compression_mode aggressive

Ersetzen Sie POOL_NAME durch den Pool, für den die Komprimierung aktiviert werden soll.

7.5.2 Optionen der Pool-Komprimierung

Eine vollständige Liste der Komprimierungseinstellungen:

compression_algorithm

Werte: none, zstd, snappy. Standardeinstellung: snappy.

Der zu verwendende Komprimierungsalgorithmus hängt vom einzelnen Anwendungsfall ab. Hier sehen Sie einige Empfehlungen:

  • Verwenden Sie nicht zlib: die anderen Algorithmen sind besser.

  • Verwenden Sie zstd, wenn Sie eine gute Komprimierungsrate wünschen. Beachten Sie, dass zstd nicht für BlueStore empfohlen wird, weil bei der Komprimierung kleiner Datenmengen der CPU Overhead hoch ist.

  • Verwenden Sie lz4 oder snappy, wenn Sie eine geringere CPU-Auslastung wünschen.

  • Vergleichen Sie diese Algorithmen anhand eines Beispiels Ihrer realen Daten und beobachten Sie dabei die CPU- und Arbeitsspeicherauslastung Ihres Clusters.

compression_mode

Wert: {none, aggressive, passive, force}. Standardeinstellung: none.

  • none: niemals komprimieren

  • passive: komprimieren bei Hinweis auf COMPRESSIBLE

  • aggressive: komprimieren, falls kein Hinweis auf INCOMPRESSIBLE

  • force: immer komprimieren

Informationen zum Setzen der Flagge COMPRESSIBLE oder INCOMPRESSIBLE finden Sie unter http://docs.ceph.com/docs/doc-12.2.0-major-changes/rados/api/librados/#rados_set_alloc_hint.

compression_required_ratio

Wert: Gleitkomma "double", Grad = SIZE_COMPRESSED / SIZE_ORIGINAL. Standardeinstellung: .875

Objekte mit einem höheren Grad werden nicht komprimiert gespeichert, weil der Nutzen insgesamt sehr gering ist.

compression_max_blob_size

Wert: Ganzzahl ohne Vorzeichen, Größe in Byte. Standardeinstellung: 0

Mindestgröße der Objekte, die komprimiert werden.

compression_min_blob_size

Wert: Ganzzahl ohne Vorzeichen, Größe in Byte. Standardeinstellung: 0

Maximale Größe der Objekte, die komprimiert werden.

7.5.3 Globale Komprimierungsoptionen

Die folgenden Konfigurationsoptionen können in der Ceph-Konfiguration festgelegt werden und gelten für alle OSDs und nicht nur für einen einzelnen Pool. Die in Abschnitt 7.5.2, „Optionen der Pool-Komprimierung“ aufgelistete für den Pool spezifische Konfiguration hat Vorrang.

bluestore_compression_algorithm

Werte: none, zstd, snappy, zlib. Standardeinstellung: snappy.

Der zu verwendende Komprimierungsalgorithmus hängt vom einzelnen Anwendungsfall ab. Hier sehen Sie einige Empfehlungen:

  • Verwenden Sie nicht zlib, die anderen Algorithmen sind besser.

  • Verwenden Sie zstd, wenn Sie eine gute Komprimierungsrate wünschen. Beachten Sie, dass zstd nicht für BlueStore empfohlen wird, weil bei der Komprimierung kleiner Datenmengen der CPU Overhead hoch ist.

  • Verwenden Sie lz4 oder snappy, wenn Sie eine geringere CPU-Auslastung wünschen.

  • Vergleichen Sie diese Algorithmen anhand eines Beispiels Ihrer realen Daten und beobachten Sie dabei die CPU- und Arbeitsspeicherauslastung Ihres Clusters.

bluestore_compression_mode

Wert: {none, aggressive, passive, force}. Standardeinstellung: none.

  • none: niemals komprimieren

  • passive: komprimieren bei Hinweis auf COMPRESSIBLE

  • aggressive: komprimieren, falls kein Hinweis auf INCOMPRESSIBLE

  • force: immer komprimieren

Informationen zum Setzen der Flagge COMPRESSIBLE oder INCOMPRESSIBLE finden Sie unter http://docs.ceph.com/docs/doc-12.2.0-major-changes/rados/api/librados/#rados_set_alloc_hint.

bluestore_compression_required_ratio

Wert: Gleitkomma "double", Grad = SIZE_COMPRESSED / SIZE_ORIGINAL. Standardeinstellung: .875

Objekte mit einem höheren Grad werden nicht komprimiert gespeichert, weil der Nutzen insgesamt sehr gering ist.

bluestore_compression_min_blob_size

Wert: Ganzzahl ohne Vorzeichen, Größe in Byte. Standardeinstellung: 0

Mindestgröße der Objekte, die komprimiert werden.

bluestore_compression_max_blob_size

Wert: Ganzzahl ohne Vorzeichen, Größe in Byte. Standardeinstellung: 0

Maximale Größe der Objekte, die komprimiert werden.

bluestore_compression_min_blob_size_ssd

Wert: Ganzzahl ohne Vorzeichen, Größe in Byte. Standardeinstellung: 8K

Mindestgröße der Objekte, die komprimiert und auf Festkörperlaufwerk gespeichert werden.

bluestore_compression_max_blob_size_ssd

Wert: Ganzzahl ohne Vorzeichen, Größe in Byte. Standardeinstellung: 64K

Maximale Größe der Objekte, die komprimiert und auf einem Festkörperlaufwerk gespeichert werden.

bluestore_compression_min_blob_size_hdd

Wert: Ganzzahl ohne Vorzeichen, Größe in Byte. Standardeinstellung: 128K

Mindestgröße der Objekte, die komprimiert und auf Festplatten gespeichert werden.

bluestore_compression_max_blob_size_hdd

Wert: Ganzzahl ohne Vorzeichen, Größe in Byte. Standardeinstellung: 512K

Maximale Größe der Objekte, die komprimiert und auf Festplatten gespeichert werden.

Diese Seite drucken