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