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:
-
ssd: Eine OSD-Klasse für SSD-Speichergeräte. Diese OSDs werden normalerweise für Daten verwendet, die eine höhere Leistung erfordern.
-
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.
-
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.
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 Parmeter 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
}
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 zrürückspielen.
Siehe Seite : Crushmap dekompilieren / kompilieren
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
Dann auf Create klicken
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.
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


