
Um Datenverlust zu vermeiden, gibt es in jedem Ceph-Cluster Schwellwerte. Diese warnen und schützen davor, den Cluster zu überfüllen. Deren Standardwerte schützen in der Regel ausreichend gut.
Ceph-Cluster mit 3 Hosts stellen aber einen Sonderfall dar. In diesem Artikel geht es darum, sichere Schwellwerte für Ceph-Cluster mit 3 Hosts an einem Beispiel zu bestimmen.

Wir verwenden einen Ceph-Cluster mit 3 Hosts in einer virtuellen Umgebung auf Proxmox VE. In einem solchen Ceph-Cluster sind 12 OSDs als Mindestanzahl empfohlen[1]:
| Hosts | 3 |
| OSDs | 12 (4 pro Host) |
| Kapazität pro OSD | 16 GiB |
Replica Standard (osd_pool_default_size)
|
3 |
Replica Minimum (osd_pool_default_min_size)
|
2 |
Dazu haben wir sinnvollerweise auf jedem Host einen Monitor und einen Manager installiert.
Insgesamt erhalten wir in unserem Beispiel-Cluster folgende Speicherkapazität:
Mit den Standardwerten erhält man ausgehend von der Gesamtkapazität außerdem folgende Schwellwerte für den Füllgrad des Clusters:
mon_osd_nearfull_ratio (85 %):
mon_osd_backfillfull_ratio (90 %):
mon_osd_full_ratio (95%):
Die Schwellwerte werden pro OSD geprüft und entsprechend im Dashboard angezeigt.

Zur Bestimmung guter Schwellwerte für unseren Cluster berechnen wir zunächst, was bei verschiedenen Ausfallszenarien mit den Standardwerten geschieht. Dann berechnen wir bessere Schwellwerte und stellen diese im Cluster ein.
Wir füllen den Test-Cluster so weit, dass einzelne OSDs bereits den mon_osd_nearfull_ratio Schwellwert von 85 % (13,6 GiB) erreichen.
Bei Ausfall eines Hosts wird keine Recovery der PGs angestoßen, da kein dritter Host als Fehlerdomäne zur Verfügung steht.
Die Datenredundanz des Clusters ist vermindert.
Anmerkung: Bei mehr als 3 Hosts werden in einem 3-fach replizierten Pool die PGs auf den verbleibenden Hosts wiederhergestellt.
Der Cluster startet eine Recovery. Die Placement Groups (PGs) des ausgefallenen OSDs werden auf den verbleibenden OSDs desselben Hosts wiederhergestellt, da er als dritte Fehlerdomäne noch vorhanden ist. Mit folgender Formel lässt sich errechnen, welchen Füllgrad diese OSDs dann erreichen würden:
In unserem Fall bedeutet das bei 13,6 GiB Auslastung und 3 verbleibenden OSDs auf dem Host:
Die Maximalkapzität der OSDs wäre also überschritten. Durch einen Sicherungsmechanismus wird das verhindert. Sobald die mon_osd_backfillfull_ratio erreicht ist, stoppt Ceph die Wiederherstellung.
Die PGs werden nicht vollständig wiederhergestellt, bis Speicherplatz freigegeben oder der Cluster erweitert wird. Da es Replikate auf den anderen Hosts gibt, gehen keine Daten verloren.
Die Datendredundanz des Clusters ist aber vermindert.
Um zu gewährleisten, dass eine vollständige Wiederherstellung im Falle eines OSD Ausfalls möglich ist, sollte man die Schwellwerte anpassen.
Die richtigen Schwellwerte sorgen dafür, dass bei Ausfall einer OSD die Recovery nicht die Backfill-Schwelle überschreitet. Das heißt:
Am wichtigsten ist die Konfiguration der mon_osd_nearfull_ratio. Behalten wir die anderen Werte bei, ist der Optimale Wert in unserem Fall:
Wobei 0,9 für eine zu 90% gefüllte OSD steht. Empfohlen ist daher eine mon_osd_nearfull_ratio von 0,67 oder geringer.
Mit folgenden Befehlen können die Schwellwerte angepasst werden[2]:
mon_osd_nearfull_ratio:root@pve0:~# ceph osd set-nearfull-ratio .67
mons_osd_backfillfull_ratio:root@pve0:~# ceph osd set-backfillfull-ratio .9
mon_osd_full_ratio:root@pve0:~# ceph osd set-full-ratio .95
|
Autor: Stefan Bohn Stefan Bohn ist seit 2020 bei der Thomas-Krenn.AG beschäftigt. Ursprünglich als Berater für IT-Lösungen im PreSales beheimatet, wechselte er 2022 zum Product Management. Dort widmet er sich dem Wissenstransfer und treibt dabei auch das Thomas-Krenn Wiki voran. |