Direkt zum Hauptinhalt

Pools nach Classen anlegen (SSD Pool / HDD Pool)

Beschreibung:

In Ceph können Sie verschiedene Pools anlegen, um unterschiedliche Typen von Speichergeräten zu nutzen. Zum Beispiel können Sie SSD-, NVME- und HDD-Pools erstellen, um eine optimale Nutzung der verfügbaren Speichergeräte zu erreichen. Jeder Pool kann unterschiedliche Konfigurationen für die Leistung und die Ausfallsicherheit aufweisen, um den Anforderungen der Anwendung gerecht zu werden. Durch die Verteilung von Daten auf verschiedene Speichergeräte können Sie auch sicherstellen, dass Daten bei Ausfällen von Speichergeräten zugänglich bleiben.

Festplatten Typen (Classes)

In Ceph können einer OSD verschiedene Klassen hinzugefügt werden.
Diese sind:

  1. ssd: Eine OSD-Klasse für SSD-Speichergeräte. Diese OSDs werden normalerweise für Daten verwendet, die eine höhere Leistung erfordern.

  2. hdd: Eine OSD-Klasse für HDD-Speichergeräte. Diese OSDs werden normalerweise für Daten verwendet, die keine hohe Leistung erfordern, sondern eher für Archiv- oder Backupzwecke geeignet sind.

  3. nvme: Eine OSD-Klasse für NVMe-Speichergeräte. Diese OSDs werden normalerweise für Daten verwendet, die eine sehr hohe Leistung erfordern, z.B. für Anwendungen mit hohem I/O-Durchsatz.

Festplatten Klasse löschen/setzen

Ist schon eine Festplattenklasse gesetzt muss diese erst gelöscht werden, bevor eine neue vergeben werden kann. Im Terminal dienen folgende Befehle zum löschen/setzen.
In unserem Fall die OSD.12 auf NVME setzten.

Löschen


ceph osd crush rm-device-class <osdnr>
ceph osd crush rm-device-class osd.12
Ausgabe:
done removing class of osd(s): 12



Setzen

Syntax
classtype = hdd,ssd,nvme

ceph osd crush set-device-class <classtype> <osdnr>
ceph osd crush set-device-class nvme osd.12
Ausgabe:
set osd(s) 12 to class 'nvme'


Crushmap um weitere replicated rule erweitern/ändern.

!Wichtige Hinweise!!!

!!! WICHTIG!!! Es muss schon eine OSD mit der Klasse geben, bevor eine Rule dafür gebaut werden kann !!!
Ist dies nicht der Fall müsen wir erst die erste Rule nur anpassen für die Klasse die schon da ist.
Danach legen wir dei OSD mit der neuen Klasse an, aber vor alle dem alles auf Maintenance setzten!!!
!!! WICHTIG!!! Alles auf Maintenance stzten, wie no backfill, noreblance etc setzen.

Auswahl_941.png

Erst nach erstellung der Rule die haken wieder entfernen.

Über manuelles bearbeiten


Die Crushmap decompilieren so, das man diese auch bearbeiten kann. Siehe Seite : Crushmap dekompilieren / kompilieren

Ist die Map decompiliert. Der ersten Rule den Parameter für die Klassenzueweisung hinzufügen.
Damit wäre dann erste Regel definiert, das diese für HDDs gillt. Sollten nur NVMEs verbaut sein. Dann natürlich die erste Rule mit NVME setzen und die zweite dann auf HDDs.  In unserem Scenario sind aber HDDs vorhanden und wir wollen NVME Pool hinzufügen. Sind noch gar keine Pools definiert, so kann man auch die erste Rule noch umbenennen, z.b noch _hdd hinzufügen.
Ist die Rule allerdings schon einem pool zugewiesen, muss dies aktualisiert werden. Was in einer Prod umgebung nicht wirklich Sinnvoll ist, dann einfach als gedanken lassen, die erste Rule ist die Rule von dem Klassentyp die zu erst da war. Wie bei uns die HDDs.

Hier der Parameter der einer Rule hinzugefügt werden muss

step take default class <classtype>
step take default class hdd

In unsere Crushmap sehe das so aus.
Auszug.

Original
...
# rules
rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step chooseleaf firstn 0 type host
        step emit
}
...

Nun geändert mit HDD class

...
# rules
rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step take default class hdd
        step chooseleaf firstn 0 type host
        step emit
}

Diese speichern und wieder zurückzuspielen.
Siehe Seite :  Crushmap dekompilieren / kompilieren

Nun eine zweite Rule anlegen, dazu die erste kopieren und die ID und Namen ändern.

z.b so

...
# rules
rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step take default class hdd
        step chooseleaf firstn 0 type host
        step emit
}

# rules
rule replicated_rule_nvme {
        id 1
        type replicated
        min_size 1
        max_size 10
        step take default class nvme
        step chooseleaf firstn 0 type host
        step emit
}

Diese speichern und wieder zurückzuspielen.
Siehe Seite :  Crushmap dekompilieren / kompilieren

Fertig, nun Pool anlegen.

Über Kommandozeilen Befehl

Die Erste Rule die Klasse hinzufügen, wenn die noch keine Klasse hat

ceph osd crush rule modify <rulename> set class <classtype>

Beispiel
ceph osd crush rule modify replicated_rule set class hdd

Nun wenn nicht schon vorhanden OSD mit neuer Klasse hinzufügen.
Dann die weitere Rule erstellen

Erklärung der Parameter

<rule-name>

Name der Regel, um sie mit einem Pool zu verbinden (angezeigt in der GUI und CLI)

<root>

Zu welchem Crush-Root sie gehören sollte (Standard-Ceph-Root "default")

<failure-domain>

An welchem Fehlerbereich die Objekte verteilt werden sollten (normalerweise Host)
(Bei one Node wäre das hier osd)

<class>

Welcher Typ von OSD-Backing-Store verwendet werden soll (e.g., nvme, ssd, hdd)

Syntax
ceph osd crush rule create-replicated <rule-name> <root> <failure-domain> <class>

Beispiel
ceph osd crush rule create-replicated rule_nvme default host nvme

!!! WICHTIG!!! Maintenance mode wieder rausnehmen no backfill, noreblance etc aushaken.

Fertig nun Pool anlegen

Pool anlegen

Nun können wir einen weiteren Pool mit der neuen Rule anlegen.
Dazu auf der Weboberfläche proxmox anmelden, einen Host auswählen dann auf Ceph / Pools klicken

Auswahl_938.png

Dann auf Create klicken

Auswahl_939.png

nun einen Namen vergeben und unseer Ruleset auswählen. Auto PG auf on und den Haken bei Add Storage rein.
Dann bekommen wir auch gleich den Speicher zum Datastore um darauf zuzugreifen.

Auswahl_940.png

Fertig.

So könnte man zum Beispiel ein RBD Pool für NVMEs bauen und einen CephFS Pool mit HDDs.
Als Beispiel

!!!ACHTUNG! NICHT ZU EMPFEHLEN!!!


Man kann natürlich auch einen Vorhandenen Pool ein Komplett anderes Ruleset geben.
Aber Achtung die Daten ziehen dann nicht mit um. Die Änderungen gelten nur für neu geschriebene Daten.
Deshalb lieber einen neuen Pool Anlegen, Daten dort hin verschieben, alten Pool löschen.
Dann einen neuen Pool mit altem Namen und dann der richtigen Ruleset auswählen.
So bleiben die Daten konsistent