Verständnisproblem CEPH Config

BOSSJoe

Member
Aug 5, 2020
68
6
13
44
Hallo zusammen,

wie vielleicht schon der ein oder andere in meinem anderen Betrag gelesen hat, ich baue mir ein neues Demolab auf und dieses soll als Storage auf CEPH aufbauen.

Ich habe drei DELL R620 mit je:
- 2 15k SAS Platten 300GB (hier möchte ich ein ZFS Mirror und das OS installieren)
- 2 Samsung SM883 960GB SSDs
- 2 10k SAS Platten 1,2 TB

Ich hab mich jetzt schon ein wenig mit CEPH befasst und ich denke ich habe ein gutes Grundverständnis entwickelt wie die Software arbeitet und was im Hintergrund alles passiert.
Leider stehe ich trotzdem gerade wie der "Ochs vorm Berg" und weiß nicht so ganz wie ich vorgehen soll.

Hier mal ein Auszug an Fragen die sich mir gerade stellen und die ich trotz intensiver Suche im Netz noch nicht alleine beantworten kann:

1. Wenn ich Proxmox auf den 15k SAS Platten installiere, werden ja dort auch die CEPH Monitore installiert. Bedeutet das für meine späteren CEPH Pools einen Performanceverlust?

2. Sollte ich jeweils für SSDs und HDDs einen eigenen OSD erstellen, oder alles zusammen und die DB und WAL Disk dann auf die SSDs?

3. Macht es Sinn je einen Pool für VMs, Container, ISOs, etc zu erstellen oder mach ich das besser alles in einen?

4. Ich habe verstanden das CEPH mit Erasure Coding arbeitet, allerdings was bedeutet es wenn ich bei der Poolerstellung eine Size von 3 und eine min. Size von 2 einstelle?

5. Kommen wir zu den Placement Groups. Ich hab mal versucht den Calculator zu verwenden, finde den aber doch recht kompliziert. Wenn ich alles richtig gemacht habe, komme ich entweder auf 256 oder 512 PGs. Je nachdem was ich mit den SSDs und HDDs mache (siehe Frage 2).

6. Kann ich dann jedem Pool immer 256 (oder 512) PGs vergeben oder ist das eine Gesamtzahl welche sich aus der Summe aller PGs aller Pools ergibt?

7. Was genau bedeutet das PG Autoscalemode?

8. Ich werde hier zwar erst einmal die Finger von lassen, aber was macht meine CRUSH Rule? Den Eintrag im Wiki dazu habe ich schon 10 mal gelesen und verstehe es immer noch nicht ganz...

So ich denke das sind erst einmal die dringlichsten Fragen die mir so im Kopf herum schwirren... :)

Ich hoffe jemand von euch kann mir die Fragen beantworten.

Vielen Dank schon einmal,

Gruß

Joe
 
1. Wenn ich Proxmox auf den 15k SAS Platten installiere, werden ja dort auch die CEPH Monitore installiert. Bedeutet das für meine späteren CEPH Pools einen Performanceverlust?
Der IO-Bedarf der MONs hält sich nach meiner Wahrnehmung in Grenzen, ein Performanceverlust dürfte daher meiner Meinung nach, wenn überhaupt vorhanden, nicht zu spüren sein.

2. Sollte ich jeweils für SSDs und HDDs einen eigenen OSD erstellen, oder alles zusammen und die DB und WAL Disk dann auf die SSDs?
Eine Disk = ein OSD
Du meinst vermutlich einen separaten Pool. Das kann durchaus sinnvoll sein, da du dann die Kontrolle hast, was wohin gespeichert wird.
Oder was meinst du mit "alles zusammen"?

3. Macht es Sinn je einen Pool für VMs, Container, ISOs, etc zu erstellen oder mach ich das besser alles in einen?
ISOs sind Dateien und Dateien kannst du nicht auf Ceph ablegen, es sei denn, du legst ein CephFS an, was dann wiederum ein eigener Pool ist.
Für VMs und Container würde keinen separaten Pool anlegen, aber das kannst du machen, wie du denkst.

4. Ich habe verstanden das CEPH mit Erasure Coding arbeitet, allerdings was bedeutet es wenn ich bei der Poolerstellung eine Size von 3 und eine min. Size von 2 einstelle?
Erasure Coding ist vergleichbar mit Raid 5/6, grundsätzlich wird gespiegelt. Size 3/2 bedeutet, dass jedes Objekt in drei verschiedenen PGs vorgehalten wird. Aber mit 2 Kopien wird Ceph auch noch funktionieren. Darunter ist dann das Cluster nicht mehr ansprechbar.

5. Kommen wir zu den Placement Groups. Ich hab mal versucht den Calculator zu verwenden, finde den aber doch recht kompliziert. Wenn ich alles richtig gemacht habe, komme ich entweder auf 256 oder 512 PGs. Je nachdem was ich mit den SSDs und HDDs mache (siehe Frage 2).
Jo, 256 ist ein guter Anfang bei der Plattenanzahl. Man zielt auf etwa 100 PGs pro OSD ab und rundet dann zur nächsten 2er-Potenz auf.

6. Kann ich dann jedem Pool immer 256 (oder 512) PGs vergeben oder ist das eine Gesamtzahl welche sich aus der Summe aller PGs aller Pools ergibt?
PGs gelten pro Pool.

7. Was genau bedeutet das PG Autoscalemode?
Ceph wird die Zahl der PGs anhand des tatsächlichen Datenverbrauchs selbst vorschlagen bzw. festlegen. Das bedeutet aber, dass Ceph im Lauf der Zeit die PG-Zahl erhöht und dann schön in die Umverteilung der Daten geht. Daher entweder die beabsichtigte Pool-Größe festlegen (ceph osd pool set mypool target_size_bytes 100G), damit der Autoscaler richtig rechnet oder die PG-Anzahl gleich selbst festlegen.

8. Ich werde hier zwar erst einmal die Finger von lassen, aber was macht meine CRUSH Rule? Den Eintrag im Wiki dazu habe ich schon 10 mal gelesen und verstehe es immer noch nicht ganz...
Die CRUSH-Rule ist sozusagen das Kochrezept, wohin ein Objekt gespeichert wird. Da es ineffizient wäre, eine Liste aller Objekte vorzuhalten, kann bzw. muss jeder Client selbst berechnen, auf welchem OSD er nach einem Objekt fragen muss und dafür nutzt er die CRUSH-Rule. Ich würde davon genau dann die Finger nicht lassen, wenn du zwischen HDD- und SSD-Pool trennst, denn dann brauchst du zwei CRUSH-Rules, um die Daten auch getrennt zu halten.
 
Last edited:
Hi und vielen Dank für deine Antwort. Das hilft mir schon einmal sehr.
Der IO-Bedarf der MONs hält sich nach meiner Wahrnehmung in Grenzen, ein Performanceverlust dürfte daher meiner Meinung nach, wenn überhaupt vorhanden, nicht zu spüren sein.
Perfekt. Dann kann ich die drehenden Platten ohne Bedenken nehmen. Ich dachte schon ich muss schauen wie ich eine NVME SSD in die Server verbaut bekomme... :)
Eine Disk = ein OSD
Du meinst vermutlich einen separaten Pool. Das kann durchaus sinnvoll sein, da du dann die Kontrolle hast, was wohin gespeichert wird.
Oder was meinst du mit "alles zusammen"?
Okay hier war wahrscheinlich das erste Verständnisproblem. Ich habe OSDs immer als eine Art Gruppe von Platten wahrgenommen. Ähnlich einem RAID. Wenn ich das also recht verstehe erkläre ich unter dem Menüpunkt "OSD" CEPH erst einmal welche Platten es überhaupt verwenden darf. Und erst durch die Erstellung eines Pools und der darauf angewendeten CRUSH Rule trenne ich dann zwischen SSDs und HDDs...?
ISOs sind Dateien und Dateien kannst du nicht auf Ceph ablegen, es sei denn, du legst ein CephFS an, was dann wiederum ein eigener Pool ist.
Für VMs und Container würde keinen separaten Pool anlegen, aber das kannst du machen, wie du denkst.
Das hab ich mittlerweile auch festgestellt. Ich hab mir einen virtuellen 3 Node Cluster gebaut um ein wenig mit CEPH spielen zu können. Um ISOs ablegen zu können musste ich erst ein CephFS erstellen. Macht ja auch Sinn, ein RBD ist ja ein Block Speicher. Ich denke ich werde dann einfach mal probieren einen Pool für HDDs und einen für SSDs anzulegen.
Benötigen die HDDs dann noch eine SSDs um die DB und WAL auszulagern und könnte ich dazu eventuell die SSDs aus dem SSD Pool nehmen?
Erasure Coding ist vergleichbar mit Raid 5/6, grundsätzlich wird gespiegelt. Size 3/2 bedeutet, dass jedes Objekt in drei verschiedenen PGs vorgehalten wird. Aber mit 2 Kopien wird Ceph auch noch funktionieren. Darunter ist dann das Cluster nicht mehr ansprechbar.
Passt, hab ich verstanden. Also macht in meinem Fall mit nur drei Knoten eigentlich auch nichts anderes Sinn. Ich hab gelesen das 3/1 eventuell nicht so gut ist weil im Falle einer Wiederherstellung es dann zum Datenverlust kommen kann.
Jo, 256 ist ein guter Anfang bei der Plattenanzahl. Man zielt auf etwa 100 PGs pro OSD ab und rundet dann zur nächsten 2er-Potenz auf.
Korrigier mich bitte aber dann währen es bei mir 512 PGs, oder? 2x SSD und 2x HDD pro Node machen 4 OSDs (4X100=400-->512)???
PGs gelten pro Pool.
Verstanden. Allerdings erklärt das glaube ich die Frage noch nicht. Mal angenomme ich bleibe jetzt bei einer idealen PG Anzahl von 512 und ich erstelle 4 Pools. Kann ich dann jedem Pool 512 PGs zuweisen, oder nur jeweils 128 (4x128=512)?
Ceph wird die Zahl der PGs anhand des tatsächlichen Datenverbrauchs selbst vorschlagen bzw. festlegen. Das bedeutet aber, dass Ceph im Lauf der Zeit die PG-Zahl erhöht und dann schön in die Umverteilung der Daten geht. Daher entweder die beabsichtigte Pool-Größe festlegen (ceph osd pool set mypool target_size_bytes 100G), damit der Autoscaler richtig rechnet oder die PG-Anzahl gleich selbst festlegen.
Heißt also wenn ich unter "PG Autoscale Mode" "warn" einstelle bekomme ich eine Warnung das meine manuell eingestellte Anzahl an PGs zu niedrig ist. Bei "on" wird meine manuell unter "pg_num" angegebene Anzahl an PGs ignoriert und bei "off" angewendet ohne automatisch zu skalieren?
1618558408520.png
Die CRUSH-Rule ist sozusagen das Kochrezept, wohin ein Objekt gespeichert wird. Da es ineffizient wäre, eine Liste aller Objekte vorzuhalten, kann bzw. muss jeder Client selbst berechnen, auf welchem OSD er nach einem Objekt fragen muss und dafür nutzt er die CRUSH-Rule. Ich würde davon genau dann die Finger nicht lassen, wenn du zwischen HDD- und SSD-Pool trennst, denn dann brauchst du zwei CRUSH-Rules, um die Daten auch getrennt zu halten.
Okay dann muss ich mich damit noch einmal näher beschäftigen. Hättest du einen Tipp wo ich noch mehr Infos bekomme? Diese CRUSH Rules werden ja nicht über die GUI bei Proxmox erstellt, oder?

Nochmals vielen Dank für die Hilfe und die Geduld.

Ich finde es wirklich extrem schwierig Antworten auf spezifische Fragen zu bekommen. Die meisten Artikel oder auch How-Tos sind sehr generell und oberflächlich.

Gruß

Joe
 
Moin!

Wenn ich das also recht verstehe erkläre ich unter dem Menüpunkt "OSD" CEPH erst einmal welche Platten es überhaupt verwenden darf. Und erst durch die Erstellung eines Pools und der darauf angewendeten CRUSH Rule trenne ich dann zwischen SSDs und HDDs...?
Genau so, der OSD ist der Dienst, der üblicherweise eine Platte verwaltet. Darauf erstellt du dann Pools. Wenn du keine anderen Regeln definierst, nutzt ein Pool immer alle OSDs/Disks.

Das hab ich mittlerweile auch festgestellt. Ich hab mir einen virtuellen 3 Node Cluster gebaut um ein wenig mit CEPH spielen zu können. Um ISOs ablegen zu können musste ich erst ein CephFS erstellen. Macht ja auch Sinn, ein RBD ist ja ein Block Speicher. Ich denke ich werde dann einfach mal probieren einen Pool für HDDs und einen für SSDs anzulegen.
Virtuell damit rumzuspielen ist optimal!

Benötigen die HDDs dann noch eine SSDs um die DB und WAL auszulagern und könnte ich dazu eventuell die SSDs aus dem SSD Pool nehmen?
Wenn du die SSDs auch als WAL nutzen willst, musst du sie vorher partitionieren und dem OSD nur eine Partition geben. Das geht über die GUI soweit ich weiß nicht.

Passt, hab ich verstanden. Also macht in meinem Fall mit nur drei Knoten eigentlich auch nichts anderes Sinn. Ich hab gelesen das 3/1 eventuell nicht so gut ist weil im Falle einer Wiederherstellung es dann zum Datenverlust kommen kann.
3/1 ist brandgefährlich, da ein einzelner abgetrennter Host immer noch denkt, er habe die Hoheit und weiter munter schreibt. Beim Resync wird seine Kopie dann aber überschrieben.

Korrigier mich bitte aber dann währen es bei mir 512 PGs, oder? 2x SSD und 2x HDD pro Node machen 4 OSDs (4X100=400-->512)???
Ja, mit 3x4 OSDs kommst auf 512, das stimmt, vorausgesetzt, du packst alle OSDs in einen Pool. Wenn du nach Klassen trennst, hast du ja nur 2 OSDs pro Klasse pro Host, dann wären es 256.

Verstanden. Allerdings erklärt das glaube ich die Frage noch nicht. Mal angenomme ich bleibe jetzt bei einer idealen PG Anzahl von 512 und ich erstelle 4 Pools. Kann ich dann jedem Pool 512 PGs zuweisen, oder nur jeweils 128 (4x128=512)?
Ne, wieder falsch herum gedacht. :) Wenn du vier Pools erstellst, errechnen sich für jeden Pool die PGs gemäß der Anzahl der OSDs und dem Anteil an den Gesamtdaten. Da kann dann durchaus mal ein krummer Wert herauskommen. Das solltest du dir vom Ceph PG Calculator ausrechnen lassen.

Heißt also wenn ich unter "PG Autoscale Mode" "warn" einstelle bekomme ich eine Warnung das meine manuell eingestellte Anzahl an PGs zu niedrig ist. Bei "on" wird meine manuell unter "pg_num" angegebene Anzahl an PGs ignoriert und bei "off" angewendet ohne automatisch zu skalieren?
Ja, genau.

Okay dann muss ich mich damit noch einmal näher beschäftigen. Hättest du einen Tipp wo ich noch mehr Infos bekomme? Diese CRUSH Rules werden ja nicht über die GUI bei Proxmox erstellt, oder?
Ich google mir ehrlich gesagt auch immer nen Wolf, ne einschlägige Seite habe ich dafür nicht.
Hier hab ich was gefunden: https://forum.proxmox.com/threads/ceph-classes-rules-and-pools.60013/

Ich finde es wirklich extrem schwierig Antworten auf spezifische Fragen zu bekommen. Die meisten Artikel oder auch How-Tos sind sehr generell und oberflächlich.
Ja, es ist manchmal etwas müßig ... Viel Erfolg trotzdem! :)
 
Servus,... !
Moin!


Genau so, der OSD ist der Dienst, der üblicherweise eine Platte verwaltet. Darauf erstellt du dann Pools. Wenn du keine anderen Regeln definierst, nutzt ein Pool immer alle OSDs/Disks.
Perfekt dann passt das.
Virtuell damit rumzuspielen ist optimal!
Dachte ich mir... :cool:
Wenn du die SSDs auch als WAL nutzen willst, musst du sie vorher partitionieren und dem OSD nur eine Partition geben. Das geht über die GUI soweit ich weiß nicht.
Ehrlich gesagt bin ich mir nicht sicher. Ich lese immer das die Performance von HDDs mit CEPH nicht zu gebrauchen währe... Auf der anderen Seite sind das 10k SAS Platten... ???
3/1 ist brandgefährlich, da ein einzelner abgetrennter Host immer noch denkt, er habe die Hoheit und weiter munter schreibt. Beim Resync wird seine Kopie dann aber überschrieben.
Okay wird nicht gemacht... Speicherplatz passt auch so.

BTW. Speicherplatz. Ich hab in meiner virtuellen Umgebung jetzt drei Nodes und jeder Node hat zwei 50GB Platten. In der GUI bekomme ich 300GB Speicherplatz angezeigt. Wenn ich alles zweimal spiegele hätte ich doch nur 100GB oder hab ich wieder einen Denkfehler?

Ja, mit 3x4 OSDs kommst auf 512, das stimmt, vorausgesetzt, du packst alle OSDs in einen Pool. Wenn du nach Klassen trennst, hast du ja nur 2 OSDs pro Klasse pro Host, dann wären es 256.
Verstanden und wird so gemacht.
Ne, wieder falsch herum gedacht. :) Wenn du vier Pools erstellst, errechnen sich für jeden Pool die PGs gemäß der Anzahl der OSDs und dem Anteil an den Gesamtdaten. Da kann dann durchaus mal ein krummer Wert herauskommen. Das solltest du dir vom Ceph PG Calculator ausrechnen lassen.
Wow ja stimmt :) Ich habe es jetzt virtuell mal durchgespielt und jetzt macht es Sinn. Man da bekommt man ja einen Knoten ins Hirn. Aber ich glaube ich denke noch zu sehr in den "alten" Technologien... :cool:
Ja, genau.
Alles klar. Ich hab das jetzt auch mal in meine virtuellen Umgebung getestet und der Automatismus scheint zu funktionieren. Der skaliert die PGs immer schön hoch und runter. Aktuell hab ich in meiner Umgebung knapp 40 PGs pro Pool obwohl ich mit 128 gestartet habe.
Gibt es einen Nachteil wenn ich es einfach auf "Auto" lasse? Klingt für mich nach der "Sinnvollsten" Einstellung. Oder andersherum gefragt. Wo ist der Vorteil das manuell zu machen???
Ich google mir ehrlich gesagt auch immer nen Wolf, ne einschlägige Seite habe ich dafür nicht.
Hier hab ich was gefunden: https://forum.proxmox.com/threads/ceph-classes-rules-and-pools.60013/
Hatte ich in der Zwischenzeit auch gefunden und hat mir geholfen die neuen CRUSH Rules zu erstellen. Sehr schön. Ich frage mich warum man das nicht ins offizielle Wiki aufnimmt. Das fehlt da nämlich!
Ja, es ist manchmal etwas müßig ... Viel Erfolg trotzdem! :)
Vielen Dank. Ich werde einfach weiter probieren und viel testen und suchen. Allerdings möchte ich wenn ich den Cluster dann mal laufen habe ja nicht mehr viel herumexperimentieren. Zumindest nicht mit meinem "produktiven" System.

Hast mir wirklich extrem geholfen, vielen Dank noch einmal

Joe
 
Ehrlich gesagt bin ich mir nicht sicher. Ich lese immer das die Performance von HDDs mit CEPH nicht zu gebrauchen währe... Auf der anderen Seite sind das 10k SAS Platten... ???
Ich würde es ohne WAL-Disk versuchen und bspw. ein CephFS für Samba-Freigaben oder VMs mit weniger Nutzerinteraktion drauflegen. Wenn dir sonst eine SSD abraucht, sind gleich zwei Pools betroffen. Aber da musst du dich eventuell nochmal woanders nach Meinungen umhören.

BTW. Speicherplatz. Ich hab in meiner virtuellen Umgebung jetzt drei Nodes und jeder Node hat zwei 50GB Platten. In der GUI bekomme ich 300GB Speicherplatz angezeigt. Wenn ich alles zweimal spiegele hätte ich doch nur 100GB oder hab ich wieder einen Denkfehler?
Ja, die Kapazität wird brutto und nicht effektiv angegeben. Ist halt so ...

Alles klar. Ich hab das jetzt auch mal in meine virtuellen Umgebung getestet und der Automatismus scheint zu funktionieren. Der skaliert die PGs immer schön hoch und runter. Aktuell hab ich in meiner Umgebung knapp 40 PGs pro Pool obwohl ich mit 128 gestartet habe.
Gibt es einen Nachteil wenn ich es einfach auf "Auto" lasse? Klingt für mich nach der "Sinnvollsten" Einstellung. Oder andersherum gefragt. Wo ist der Vorteil das manuell zu machen???
Wenn dein Pool mal halb voll ist und die PGs werden erhöht, dann wird jedes Objekt neu berechnet und umverteilt. Da ist dann Party auf dem Clusternetz. Ich würde entweder die beabsichtigte Größe schon angeben (siehe oben) oder es gleich manuell festlegen. Mit mehr PGs hast du halt auch mehr IOPS auf der Disk, aber ob das bei der kleinen Anzahl wirklich eine Rolle spielt...? Ich konnte nach Lektüre einiger Posts keinen zwingenden Vorteil des Autoscalings für mich feststellen, daher hab ich's gelassen.

Viel Erfolg weiterhin! :)
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!