Separaten (SSD) Root unter Ceph einrichten


In meinem (Proxmox)-Ceph Cluster möchte ich mit ein paar SSD einen separaten Root Bereich zur Ablage von VM-Images realisieren. Früher musste man dazu die Crush-Map noch von Hand extrahieren, anpassen und wieder einspielen. In der von mir eingesetzten Jewel-Version geht das auch schon mit dem CLI.

Zunächst ein neuen Root-Container erzeugen:

$ ceph osd crush add-bucket ssds root

Da in Ceph-Servern schon SATA Platten verbaut und genutzt sind, muss man für den neuen Pool gefakten Hostnamen anlegen

$ ceph osd crush add-bucket ceph01-ssd host
$ ceph osd crush add-bucket ceph02-ssd host
$ ceph osd crush add-bucket ceph03-ssd host

In die ceph.conf (/etc/pve/ceph.conf wird im [osd]-Abschnitt der folgende Eintrag gemacht, damit nach einem Reboot die OSD nicht wieder in den default-Pool gelegt werden.

[osd]
osd crush update on start = false

In meinem Fall hat dies schon gelangt, damit die OSD permanent im SSD-Container bleiben. Falls das nicht klappt kann man probieren den jeweiligen OSD direkt anzuweisen wo er liegt. Dazu ebenfalls in der ceph.conf einen Eintrag pro OSD machen.

[osd.13]
host = ceph01
osd_journal = /dev/disk/by-id/ata-SATA_SSD_67F584760C2400150026-part1
crush_location = root=ssds host=ceph01-ssd

Nun kann man die neuen OSD anlegen. Entweder via GUI oder

ceph osd crush add 13 0.64 root=ssds

Hierbei ist „13“ die OSD-Nummer und 1.5 gibt die weight an. Eine weight von 1 entspricht 1TB.

Im Anschluss verschiebt man die OSD in den neuen Container.

ceph osd crush set osd.13 0.64 root=ssds host=ceph01-ssd

Nun kann man einen neuen Pool erzeugen. Via Webinterface oder

ceph osd pool create ssdpool 64 64

Anschließend muss noch eine Crush-Rule erzeugt werden

ceph osd crush rule create-simple ssdpool ssds host

Der letzte Schritt ist die Cruh-Rule dem neuen Pool zuzuweisen

ceph osd pool set ssdpool crush_ruleset 3

 

,