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 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 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. 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 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 set class 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 Name der Regel, um sie mit einem Pool zu verbinden (angezeigt in der GUI und CLI) Zu welchem Crush-Root sie gehören sollte (Standard-Ceph-Root "default") An welchem Fehlerbereich die Objekte verteilt werden sollten (normalerweise Host) (Bei one Node wäre das hier osd) Welcher Typ von OSD-Backing-Store verwendet werden soll (e.g., nvme, ssd, hdd) Syntax ceph osd crush rule create-replicated 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 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